IDEA远程调试Spark

本文详细介绍如何通过IDEA进行Spark项目的远程调试。主要包括四个步骤:将Spark项目打包并复制到集群Master节点;配置IDEA的远程调试连接;在Master节点上启动Spark-Submit;在IDEA中设置断点并开始调试。

IDEA远程调试Spark很简单,大概分四步:

1、打包到master

将Spark项目打包后拷贝到master节点上,这里用spark-examples.jar做下示例。

2、IDEA设置Remote连接

添加Remote:Menu -> Run -> Edit Configurations -> 选择 + -> Remote。

修改服务器IP,端口只要没有占用的就可以。

 

3、服务器启动Spark-Submit

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop-master:7077 \
--driver-java-options \
"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005" \
/liujinhe/jars/spark-examples.jar

或者,在conf/spark-env.sh添加环境变量:

export SPARK_JAVA_OPTS+="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

4、IDEA中打断点,开启Debug

IDEA中,在要调试的类中打上断点,运行Debug模式。

 

其他

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888

jvm参数属性说明:

  • -Xdebug: 启用调试特性
  • -Xrunjdwp:启用JDWP实现,包含若干子选项
  • transport=dt_socket:JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输
  • server=y:y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器
  • suspend=y:y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待
  • address=5005:JVM在5005端口上监听请求,这个设定为一个不冲突的端口即可

问题 

19/07/23 09:03:59 INFO client.StandaloneAppClient$ClientEndpoint: Connecting to master spark://hadoop-master:7077...
19/07/23 09:03:59 WARN client.StandaloneAppClient$ClientEndpoint: Failed to connect to master hadoop-master:7077
org.apache.spark.SparkException: Exception thrown in awaitResult: 

....

Caused by: java.net.ConnectException: 拒绝连接

出现无法连接,先检查Spark是否启动。 

### IntelliJ IDEA 远程调试 Spark 的配置教程 #### 1. **准备远程调试环境** 为了实现远程调试,需要在运行 `spark-submit` 命令时启用 JVM 调试模式。通过设置 `SPARK_SUBMIT_OPTS` 环境变量来指定调试端口。 以下是启动命令的示例: ```bash export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006" spark-submit --packages "xxx" --files "xxx" --class xxx xxx.jar ``` 此命令会在服务器上监听 5006 端口并等待调试器连接[^1]。 --- #### 2. **创建 Spark 应用程序代码** 编写一个简单的 Spark 应用程序作为测试目标。以下是一个计算 π 值的 Scala 示例: ```scala import scala.math.random import org.apache.spark.{SparkConf, SparkContext} object SparkPi { def main(args: Array[String]): Unit = { val conf = new SparkConf() .setAppName("Spark Pi") .setMaster("local[*]") // 替换为实际集群地址 .setJars(List("/path/to/jar/file")) val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = 100000 * slices val count = spark.parallelize(1 to n, slices).map { _ => val x = random * 2 - 1 val y = random * 2 - 1 if (x * x + y * y < 1) 1 else 0 }.reduce(_ + _) println(s"Pi is roughly ${4.0 * count / n}") spark.stop() } } ``` 该代码可以用于本地或分布式环境中运行,并支持远程调试[^2]。 --- #### 3. **配置 IntelliJ IDEA远程调试功能** ##### a. 安装 Big Data Tools 插件 确保已安装 IntelliJ IDEA 的 Big Data Tools 插件,这有助于更好地管理 Hadoop 和 Spark 项目[^4]。 ##### b. 创建 Remote Debug 配置 1. 打开 IntelliJ IDEA 并导航至菜单栏中的 `Run -> Edit Configurations...`。 2. 单击左上方的加号 (`+`) 并选择 `Remote`。 3. 设置以下参数: - **Name**: 输入配置名称(例如 `Spark Remote Debug`)。 - **Transport**: 选择 `Socket`。 - **Debugger mode**: 选择 `Attach to remote JVM`. - **Host**: 输入运行 Spark 程序的主机 IP 地址(例如 `localhost` 或实际服务器地址)。 - **Port**: 输入之前定义的调试端口号(例如 `5006`)。 ##### c. 同步源码路径 如果 Spark 程序是在另一台机器上运行,则需确保 IntelliJ 中加载的源码与远程执行的 JAR 文件一致。可以通过以下方式同步: - 将项目的完整目录上传到远程服务器。 - 使用版本控制系统(如 Git)保持一致性。 --- #### 4. **启动远程调试会话** 完成以上步骤后,按照以下顺序操作: 1. 在终端中运行带有调试选项的 `spark-submit` 命令。 2. 返回 IntelliJ IDEA,点击绿色三角形按钮以附加调试器到远程 JVM。 3. 在代码中设置断点并观察程序行为。 --- #### 5. **注意事项** - 如果使用的是 Windows 系统,请确认防火墙未阻止调试端口。 - 对于生产环境下的 Spark 集群,建议仅在开发阶段开启调试模式,以免影响性能。 - 若遇到无法连接的情况,请验证网络连通性和端口绑定状态。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值