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

时间:2016-10-05 23:34:52

标签: scala apache-spark intellij-idea

我目前正在使用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"

示例程序文件

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))
    }
}

如果我使用命令行:

sbt package

然后

spark-submit --class "MySpark" --master local[4] target/scala-2.11/myspark_2.11-1.0.jar

我能够生成jar包并且火花运行良好。

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

我只是希望一切都很简单,因为"一次点击"在Intellij IDEA的调试按钮上。

感谢。

4 个答案:

答案 0 :(得分:19)

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

export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7777 

按如下所示创建Debug配置

Rub->编辑配置 - >点击“+”左上角的cornor - >远程 - >设置端口和名称

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

答案 1 :(得分:1)

如果您正在使用scala插件并将项目配置为sbt项目,那么它基本上应该是开箱即用的。

转到Run - > Edit Configurations...并正常添加您的运行配置。

由于您拥有main课程,因此您可能希望添加新的Application配置。

您也可以点击main代码左侧的蓝色方块图标。

设置好运行配置后,您可以使用“调试”功能。

答案 2 :(得分:1)

当我在2.10和2.11之间切换时,我遇到了这种情况。 SBT希望主要对象位于src-> main-> scala-2.10或src-> main-> scala-2.11,具体取决于您的版本。

答案 3 :(得分:0)

它类似于此处提供的解决方案:Debugging Spark Applications。 您可以在Idea中创建远程调试运行配置,并将Java调试参数传递给spark-submit命令。 唯一的问题是你需要在触发spark-submit命令后在Idea中启动远程调试配置。我在某个地方读到,调试点之前的Thread.sleep应该可以让你这样做,我也能够成功地使用这个建议。