【问题标题】:How to debug a scala based Spark program on Intellij IDEA如何在 Intellij IDEA 上调试基于 Scala 的 Spark 程序
【发布时间】:2017-02-14 13:35:41
【问题描述】:

我目前正在使用 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包并且spark运行良好。

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

我只是希望一切都可以像 Intellij IDEA 中的调试按钮上的“一键式”一样简单。

谢谢。

【问题讨论】:

    标签: scala apache-spark intellij-idea


    【解决方案1】:

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

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

    由于您有一个main 类,您可能想要添加一个新的Application 配置。

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

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

    【讨论】:

    • 谢谢。我创建了一个 sbt 项目并将脚本文件放在那里。如果我直接在它上面运行,它会说“线程“主”java.lang.ClassNotFoundException:MySpark中的异常”你能告诉我具体如何设置参数吗?
    • @Iserlohn 在设置 SparkConf() 时已将主服务器设置为“本地 [2]”,然后再将 SparkConf 传递到 SparkContext。如果您的 SparkConf 被命名为 sparkConf,它将如下所示: sparkConf.setMaster("local[2]") 这仅适用于通过 IDE 进行调试。如果在将代码部署到服务器时不小心留下了它,它将无法正常运行。
    【解决方案2】:

    我在 2.10 和 2.11 之间切换时遇到了这个问题。 SBT 期望主要对象位于 src->main->scala-2.10 或 src->main->scala-2.11 中,具体取决于您的版本。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        首先定义如下环境变量

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

        然后在Intellij Idea中创建Debug配置如下

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

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

        【讨论】:

        • 感谢您的回答。如何找到本地 spark 的端口和名称?
        • 是端口和名称“localhost:7077”吗?我收到“运行 Spark 时出错:无法打开调试器端口 (localhost:7077):java.net.ConnectException “连接被拒绝””
        • 你不应该放spark端口你可以简单地把与SPARK_SUBMIT_OPTS中的地址相同的端口放在上面SPARK_SUBMIT_OPTS你可以看到地址=7777所以现在只需在远程配置中更改端口并在你的代码中添加一个检查点现在sun spark-smit 和它的 show msg 监听端口 7777 然后去 itellij 并点击你创建的调试
        • 我在下面使用它来让它工作。 export SPARK_DAEMON_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=
        • 此解决方案在此处有完整的分步教程(带图片):bigendiandata.com/…
        猜你喜欢
        • 2018-12-06
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        • 2011-11-02
        • 1970-01-01
        • 2013-05-19
        相关资源
        最近更新 更多