如何在Intellij IDEA上调试基于scala的Spark程序

lse*_*ohn 11 scala intellij-idea apache-spark

我目前正在使用Intellij IDEA构建我的开发IDE.我的跟踪方式与http://spark.apache.org/docs/latest/quick-start.html完全相同

build.sbt文件

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.7"

 libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0"
Run Code Online (Sandbox Code Playgroud)

示例程序文件

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object MySpark {

    def main(args: Array[String]){
        val logFile = "/IdeaProjects/hello/testfile.txt" 
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用命令行:

sbt package
Run Code Online (Sandbox Code Playgroud)

然后

spark-submit --class "MySpark" --master local[4] target/scala-2.11/myspark_2.11-1.0.jar
Run Code Online (Sandbox Code Playgroud)

我能够生成jar包和spark运行良好.

但是,我想使用Intellij IDEA来调试IDE中的程序.如何设置配置,如果单击"debug",它将自动生成jar包并通过执行"spark-submit-"命令行自动启动任务.

我只是希望Intellij IDEA中的调试按钮上的"一键"一切都很简单.

谢谢.

San*_*hit 20

你可以简单地添加下面的火花选项

export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7777 
Run Code Online (Sandbox Code Playgroud)

并按如下方式创建Debug配置

Rub-> Edit Configuration - >点击"+"左上角cornor - > Remote - >设置端口和名称

完成上述配置后,使用spark-submit或sbt run运行spark应用程序,然后运行在配置中创建的debug.并添加检查点以进行调试.

  • 这个解决方案有一个完整的分步教程(带图片):http://www.bigendiandata.com/2016-08-26-How-to-debug-remote-spark-jobs-with-IntelliJ/ (2认同)