Spark 1.5.0 远程调试

简介: Spark 1.5.0 远程调试作者:摇摆少年梦 微信号:zhouzhihubeyond先决条件已安装好Spark集群,本例子中使用的是spark-1.5.0. 安装方法参见:http://blog.csdn.net/lovehuangjiaju/article/details/48494737已经安装好Intellij IDEA,本例中使用的是Intel

Spark 1.5.0 远程调试

作者:摇摆少年梦
微信号:zhouzhihubeyond

先决条件

  1. 已安装好Spark集群,本例子中使用的是spark-1.5.0. 安装方法参见:http://blog.csdn.net/lovehuangjiaju/article/details/48494737
  2. 已经安装好Intellij IDEA,本例中使用的是Intellij IDEA 14.1.4,具体安装方法参见:http://blog.csdn.net/lovehuangjiaju/article/details/48577281

远程调试过程描述

  1. 打开Intellij IDEA,File->New ->Project
    这里写图片描述

  2. 选择Scala,然后next
    这里写图片描述

  3. 配置好JDK、Scala版本,填入项目名称,然后Finish
    这里写图片描述

这里写图片描述

4.导入spark-assembly-1.5.0-hadoop2.4.0.jar

File->Prject Structure->Library
这里写图片描述

这里写图片描述

点”+”号->选择JAVA
这里写图片描述
找到spark-1.5.0安装目录,选择spark-assembly-1.5.0-hadoop2.4.0.jar,我的机器上jar包目录为
/hadoopLearning/spark-1.5.0-bin-hadoop2.4/lib/spark-assembly-1.5.0-hadoop2.4.0.jar,然后Finish
这里写图片描述

这里写图片描述
最后点击“OK”完成导入

5.关联spark-1.5.0源代码
在Extended Library中展开spark-assembly-1.5.0-hadoop2.4.0.jar
这里写图片描述
找到org->apache->spark
这里写图片描述
点开下面包中的任意源文件,我在本机上选择”SparkContext.class”文件,默认情况下Intellij IDEA会为我们反编译.class文件,但源码里面没有注释,可以选择右上角的”Attach Sources”
这里写图片描述

选择源码文件目录,我的机器上源码解压在/hadoopLearning/spark-1.5.0目录,完成后“OK”
这里写图片描述
完成后会提示根目录
这里写图片描述
全部选择后点击“OK”,此时显示的不是反编译后的代码,而是关联源代码后的代码,你会发现多了很多注释
这里写图片描述

至此源码阅读环境构建完毕。

6.启动spark-1.5.0集群
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/sbin# ./start-all.sh
这里写图片描述

7.修改spark-class脚本
本机器上的spark-class脚本位于/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin目录
将脚本中的内容

done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")

修改为

done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main $JAVA_OPTS "$@")

这里写图片描述

然后在命令行中执行下列语句
export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

这里写图片描述

  1. 创建用于测试的Spark应用程序
    选择项目中的src文件,然后右键 New->Scala Class
    这里写图片描述
    然后选择Object
    这里写图片描述
    命名为SparkWordCount,然后点击OK,输入如下内容
import org.apache.spark.SparkContext._
import org.apache.spark.{SparkConf, SparkContext}

object SparkWordCount{
  def main(args: Array[String]) {
    if (args.length == 0) {
      System.err.println("Usage: SparkWordCount <inputfile> <outputfile>")
      System.exit(1)
    }

    val conf = new SparkConf().setAppName("SparkWordCount")
    val sc = new SparkContext(conf)

    val file=sc.textFile("file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/README.md")
    val counts=file.flatMap(line=>line.split(" "))
      .map(word=>(word,1))
      .reduceByKey(_+_)
    counts.saveAsTextFile("file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/countReslut.txt")

  }
}

9 将Spark应用程序打包
选择项目,File->Project Structure
这里写图片描述
选择 Artifacts
这里写图片描述
点击“+”号,然后选择”Jar”->”From modules with dependencies”
这里写图片描述
这里写图片描述

选择SparkWordCount作为MainClass
这里写图片描述

这里写图片描述

Spark应用程序在运行是会自动加载spark-assembly-1.5.0-hadoop2.4.0.jar等jar包,为减少后期Jar包的体积,可以将spark-assembly-1.5.0-hadoop2.4.0.jar等jar包删除,这样打包时不会被打包进去。
这里写图片描述
完成后点击”OK”

再选择”Build”->”Build Artifacts”
这里写图片描述
Action中选择“Build”
这里写图片描述

编译后在对应目录中可以看到生成的jar包文件,本机器上的目录是:
/root/IdeaProjects/SparkRemoteDebugPeoject/out/artifacts/SparkRemoteDebugPeoject_jar

这里写图片描述

10 将代码利用spark-submit提交到集群

root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# ./spark-submit --master spark://sparkmaster:7077 --class SparkWordCount --executor-memory 1g /root/IdeaProjects/SparkRemoteDebugPeoject/out/artifacts/SparkRemoteDebugPeoject_jar hdfs://ns1/README.md hdfs://ns1/SparkWordCountResult
//注意这一行语句
Listening for transport dt_socket at address: 5005

这里写图片描述

11 Intellij IDEA中配置远程调试
Run->Edit Configuration
这里写图片描述
找到Remote
这里写图片描述
点击”+“号,命名为Spark_Remote_Debug,其它配置默认,Intellij IDEA已为我们默认配置
这里写图片描述
完成后,点击OK

12 正式启动远程调试
在源码中设置断点,本例中选择在SparkSubmit.scala文件中设置断点
这里写图片描述

然后按 F9
这里写图片描述
选择Spark_Remote_Debug
Spark控制台出现:Connected to the target VM, address: ‘localhost:5005’, transport: ‘socket’,如下图
这里写图片描述
在Debugger上可以看到
这里写图片描述
程序在运行SparkSubmit源码中设置断点处
这里写图片描述

至此,远程调试正式开始,请畅游Spark源代码吧

最后说明一下调试参数:
参见:http://www.thebigdata.cn/QiTa/12370.html

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
参数说明:
-Xdebug 启用调试特性
-Xrunjdwp 启用JDWP实现,包含若干子选项:
transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=5005 JVM在5005端口上监听请求,这个设定为一个不冲突的端口即可。
server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。
目录
相关文章
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise-then的返回值2
前端学习笔记202306学习笔记第四十二天-promise-then的返回值2
124 0
|
存储 算法 物联网
计算机网络第三章 数据链路层(下)
计算机网络第三章 数据链路层
898 0
计算机网络第三章 数据链路层(下)
|
前端开发 Java 关系型数据库
基于JSP实现私人牙科诊所管理系统
基于JSP实现私人牙科诊所管理系统
337 0
基于JSP实现私人牙科诊所管理系统
|
存储 安全 API
Android Q 适配指南
在Android 10开始版本中,官方的改动较大,相应的开发者适配成本还是很高的。 这里按照`2019.11.11 google android q workshop`流程,大概说明一下Android Q适配需要注意的内容。虽然是大概介绍,但应该是目前最全的适配攻略了...
1154 0
Android Q 适配指南
|
自然语言处理 算法 关系型数据库
PostgreSQL的全文检索插件zhparser的中文分词效果
PostgreSQL支持全文检索,其内置的缺省的分词解析器采用空格分词。因为中文的词语之间没有空格分割,所以这种方法并不适用于中文。要支持中文的全文检索需要额外的中文分词插件。网上查了下,可以给PG用的开源中文分词插件有两个:nlpbamboo和zhparser。
2762 0
|
数据库 关系型数据库 PostgreSQL
创建一个简单的多边形表
1. 首先创建一个多边形的表 CREATE TABLE shp_polygon(   polygon_id serial NOT NULL,    "name" character varying(40),    CONSTRAINT pk_shp_polygon PRIMARY KEY (po...
957 0
|
7天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1766 117
|
8天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1279 11
|
14天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1956 9
阿里云联动百位企业安全专家,共识Agent防御最佳实践