eka*_*des 39 debugging local apache-spark
我很新兴,我想逐步学习如何在本地调试spark应用程序?有谁可以详细说明这样做的步骤?
我可以从命令行在本地运行spark网站上的simpleApp,但我只需要逐步完成代码并查看它是如何工作的.很感谢任何形式的帮助.谢谢.
Jas*_*ans 26
正如David Griffin所说,使用spark-shell可能非常有用.但是,我发现做实际的本地调试,设置断点,检查变量等是不可或缺的.这是我使用IntelliJ的方式.
首先,确保您可以在本地运行您的spark应用程序spark-submit,例如:
spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar
Run Code Online (Sandbox Code Playgroud)
然后,通过添加如下选项,告诉本地spark驱动程序暂停并等待调试器启动时的连接:
--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
Run Code Online (Sandbox Code Playgroud)
agentlib:jdwpJava Debug Wire Protocol选项在哪里,后跟逗号分隔的子选项列表:
transport定义调试器和调试对象之间使用的连接协议 - 套接字或"共享内存" - 你几乎总是想要socket(dt_socket),除非我相信在Microsoft Windows上的某些情况server在与调试器(或相反地,客户端)通信时,此进程是否应该是服务器 - 您始终需要一个服务器和一个客户端.在这种情况下,我们将成为服务器并等待调试器的连接suspend是否在调试器成功连接之前暂停执行.我们打开它,因此在调试器连接之前驱动程序不会启动address这里,这是要监听的端口(用于传入的调试器连接请求).您可以将其设置为任何可用端口(您只需确保将调试器配置为连接到同一端口)所以现在,您的spark-submit命令行应该类似于:
spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
Run Code Online (Sandbox Code Playgroud)
现在如果你运行上面的内容,你会看到类似的东西
Listening for transport dt_socket at address: 5005
Run Code Online (Sandbox Code Playgroud)
并且您的spark应用程序正在等待调试器附加.
接下来,打开包含Spark应用程序的IntelliJ项目,然后打开"运行 - >编辑配置..."然后单击"+"添加新的运行/调试配置,并选择"远程".给它命名,例如"SparkLocal",并为Transport选择"Socket",为Debugger模式选择"Attach",并为Host输入"localhost",在上面输入你用于Port的端口,在本例中为"5005".单击"确定"保存.
在我的IntelliJ版本中,它给出了调试命令行用于调试过程的建议,它使用"suspend = n" - 我们忽略了它并使用"suspend = y"(如上所述)因为我们想要等待我们连接开始的应用程序.
现在你应该准备调试了.只需使用上面的命令启动spark,然后选择刚刚创建的IntelliJ运行配置,然后单击Debug.IntelliJ应该连接到您的Spark应用程序,该应用程序现在应该开始运行.您可以设置断点,检查变量等.
Dav*_*fin 10
启动Spark shell.这直接来自Spark文档:
./bin/spark-shell --master local[2]
Run Code Online (Sandbox Code Playgroud)
您还会看到Spark shell被称为REPL.这是迄今为止学习Spark的最佳方式.我将80%的时间花在Spark shell上,另外20%将代码翻译成我的应用程序.
只需传递java选项即可打开调试端口.这里有一篇很好的文章解决了你的问题 - http://danosipov.com/?p=779 我正在使用它
$ SPARK_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spark-shell
Run Code Online (Sandbox Code Playgroud)
(是的,SPARK_JAVA_OPTS已被弃用,但它运行正常)
| 归档时间: |
|
| 查看次数: |
28552 次 |
| 最近记录: |