mirahs 2019-06-21
OS:centos 7
JDK版本:1.8
Spark版本:2.1.0
Scala版本:2.11
IDE:intellij idea 14.1.4
完成编译Spark源码并导入intellij
在intellij中新建一个scala工程,取名为“RemoteDebugSparkAppDemo”,添加Spark2.1.0依赖,并编写如下的示例代码:
package com.demo import org.apache.spark.{SparkConf, SparkContext} object MainApp { def main(args:Array[String]):Unit = { //创建sc val sparkAppName = "RemoteDebugSparkAppDemo" val sc = getSparkContext(sparkAppName) //从数组创建第一个RDD val rdd1 = sc.parallelize(Array(1,2,3,4,5)) //统计输入数组中奇偶数的个数 val res = rdd1.map(x=>(x%2==0,x)).groupByKey().mapValues(v=>v.size).collect() //打印结果 println(res.mkString(",")) //停止sc sc.stop() } def getSparkContext(appName: String): SparkContext = { val sparkConf = new SparkConf().setAppName(appName).setMaster("local") .set("spark.driver.host", "127.0.0.1").set("spark.driver.port", "7077") new SparkContext(sparkConf) } }
需要额外说明的是,getSparkContext方法中显式地设置spark.driver.host和spark.driver.port的值并非必须,单纯是为了临时解决如下错误(创建SparkContext步骤的异常):
java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries (starting from 0)! Consider explicitly setting the appropriate port for the service 'sparkDriver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
在这一步中需要同时打开示例工程和Spark源码工程并分别添加远程调试参数,要注意的是示例工程依赖的Spark版本必须和源码工程完全一致
在打开的示例工程“RemoteDebugSparkAppDemo”中,设置远程调试JVM选项,步骤如下:
在intellij中打开"Run -> Edit Configuations...",修改下图中的选项
将该选项的值设置为:
-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005
用intellij打开Spark源码工程,打开"Run -> Edit Configuations...",添加一个新的Remote类型的Configuation项目,取名为RemoteDebug,并按照下图进行配置:
在打开的源码工程的IDE中,设置一个断点,比如设置在DAGScheduler类的runJob方法中(设置在其他预期会进入的方法也OK),
执行"Run -> Debug 'RemoteDebug'",观察IDE的Debugger窗口,如果出现下面的提示,则说明已经开始在本机的5005端口监听远程调试的客户端:
Listening to the connection, address: 'localhost:5005', transport: 'socket'
然后在示例工程中执行"Run -> Run 'MainApp'",如果一切顺利,将会在源码工程IDE的console窗口中打印以下提示:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
上面的"target VM"指的就是运行中的示例程序。
同时,源码工程会命中之前设置的断点。
调试结束后,源码工程IDE的console窗口会打印以下提示:
Disconnected from the target VM, address: 'localhost:5005', transport: 'socket'
Xaprice-Backup: https://xaprice.github.io/201...