Local方式调试请参考王家林老师的《大数据Spark企业级实践》。这里主要介绍Master集群方式下Spark应用程序的调试。
一、关联Spark源码
打开Project Structure。选择File菜单下的Project Structure…命令,Project Structure界面如图2.60所示。
图2.60 IntelliJ IDEA中的Project Structure…菜单
在图2.60中选中Spark的jar包Spark-assembly-1.3.0-hadoop2.4.0,然后单击右面窗口中的“+”按钮,在弹出目录中选中Spark 1.3的源码目录,如图2.61所示。
图2.61 选择需要关联的源码目录
注意:有时候会弹出让你选择“+”的类型的窗口,这时候选择Sources就可以了。之后会弹出扫描进度的界面,如图2.62所示。
图2.62 等待关联源码扫描过程
添加源码关联后,会自动开始扫描,等结束后会等弹出下面的窗口,如图2.63所示,默认全部选择即可,点击OK按钮。
图2.63 检测到的关联源码信息
如果编辑界面还是提示错误,单击File菜单下的Invalidate Caches/Restart…命令,并重新启动IDEA即可,操作界面如图2.64所示。
图2.64 重新刷新缓存信息的菜单
到这一步,关联源码已经完成,可以开始调试Spark应用程序了。关联源码后,调试应用程序时,也可以同时调试Spark的源码。如果要远程调试Spark的各个组件,可以参考《Spark学习笔记.docx》的调试章节(https://github.com/harlixxy/StudyNotes/),笔记中同时提供了远程调试详细步骤的链接。
二、进行Spark应用程序的调试设置
单击Run菜单下的Debug…命令,打开调试设置窗口,步骤如图2.65所示。
图2.65 IntelliJ IDEA中的Debug…命令
在弹出窗口中,选择Edit Configurations…命令,如图2.66所示。
图2.66 IntelliJ IDEA中的调试编辑菜单
在左边窗口单击“+”按钮,添加一个应用程序(Application),添加后修改Applica-tion的配置信息,如图2.67所示。
为了模拟spark-submit提交部署应用程序,我们用spark-submit脚本最终执行的SparkSubmit作为调试入口。SparkSubmit封装了集群应用的部署,通过SparkSubmit才能调试非Local的集群模式。进一步地,还可以通过设置环境变量来完全模拟SparkSubmit部署。
在图2.67中的右面窗口中:
1)Name:是添加的Application的名字。
2)Main class:是调试的入口类,设置为org.apache.spark.deploy.SparkSubmit。(www.xing528.com)
3)Program arguments:输入使用spark-submit脚本提交应用程序时所用的参数,包含以下部分。
● --class:test.HellpSparkMaster,即要调试的应用程序。
● --master:Spark集群的MasterURL,必须和Spark集群Web Interface(http://master:
8080)上显示的一样。
● 最后是输入刚才构建的应用程序jar包的地址。
spark-submit脚本提交应用程序最终也是将脚本的参数传入SparkSubmit,因此这里使用的Program arguments和脚本的参数是一样的。
图2.67 IntelliJ IDEA中的调试时程序参数的设置界面
三、调试Spark应用程序
单击Run菜单下的Debug…命令,打开调试设置窗口,在弹出窗口中选中刚才建立的调试Application,这里对应刚才的调试编辑界面图2.67上的Application中的HellpSparkMaster,如图2.68所示。
图2.68 启动指定名字的应用程序调试
或在下拉框中选择调试的HellpSparkMasterApplication,单击工具栏里的调试快捷按钮,如图2.69所示。
在应用程序test.HellpSparkMaster的main函数中设置断点,也可以按【Ctrl+N】组合键打开SparkSubmit类。在SparkSubmit中设置断点进行调试,调试窗口的内容如图2.70所示。
图2.69 启动指定名字的应用程序调试的快捷方式
图2.70 应用程序调试的界面信息
调试窗口中,Debugger为调试窗口,可以看到调试信息,Console为控制台窗口,可以看到控制台输出信息。控制台窗口的右边工具栏为调试工具栏,在Variablies窗口中可以查看当前程序的变量信息。
切换到Console输出窗口,查看Console,即查看控制台输出的执行结果,下面是输出信息的截图。控制台Console输出信息如图2.71所示。
图2.71 应用程序调试过程的部分输出信息
可以看到应用程序已经成功执行。下图是Driver Program的Web Interface(http∶//dirver∶4040)界面信息,应用程序执行结果如图2.72所示。
图2.72 应用程序调试时的UI界面
在窗口中可以看到刚才提交的应用程序。由于是在集群中提交,分布式计算,在Task执行时的输出信息是在Executor机器上输出的,可以在上面的界面Logs列进行查看。Logs包括stdout和stderr两个文件(Executor输出时重定向到这两个标准输出流),前者是标准输出信息,后者是标准错误。
下面是stderr文件内容的截图,内容如图2.73所示。
图2.73 应用程序调试时UI界面的stderr文件内容
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。