Spark作业代码(源码)IDE远程调试

Similar documents
Apache CarbonData集群模式使用指南

Spark读取Hbase中的数据

使用Spark SQL读取Hive上的数据

Hive:用Java代码通过JDBC连接Hiveserver

使用Cassandra和Spark 2.0实现Rest API服务

Flume-ng与Mysql整合开发

Guava学习之Resources

Hadoop&Spark解决二次排序问题(Hadoop篇)

Flink on YARN部署快速入门指南

通过Hive将数据写入到ElasticSearch

Flink快速上手(QuickStart)

使用Hive读取ElasticSearch中的数据

如何在 Apache Hive 中解析 Json 数组

使用MapReduce读取XML文件

Kafka客户端是如何找到 leader 分区的

Hadoop元数据合并异常及解决方法

使用Apache Beam读写HDFS上的文件

在Spring中使用Kafka:Producer篇

六种使用Linux命令发送带附件的邮件


SparkR(R on Spark)编程指南

韶关:神奇丹霞

三种方法实现Hadoop(MapReduce)全局排序(1)

哼, 你 們 不 回 答 又 怎 麼 樣? 不 管 是 多 大 來 頭, 現 在 都 被 血 魔 吞 噬 無 蹤 了 你 們 幾 個 真 是 太 過 分, 我 不 犯 你 們, 你 們 卻 一 天 到 晚 來 挑 釁 我 教 尊 冷 笑 著 說 道 嗚, 大 人 土 地 大 姐 跪 下 來, 流 下

PowerPoint 演示文稿

证券期货市场之主要诚信规范

伊春:醉人林都

Flink快速上手之Scala API使用

案例分享产品文档

解决百度统计无法获取https来源的referrer

在Fedora上部署Hadoop2.2.0伪分布式平台

Guava学习之CharSequenceReader

将 MySQL 的全量数据导入到 Apache Solr 中

Ubuntu和CentOS如何配置SSH使得无密码登陆

关林:武圣陵寝

泰山:五岳独尊

国内26省市新能源汽车推广规划已出台

北戴河:海阔天空

西岭雪山滑雪场

untitled

Hadoop 2.2.0安装和配置lzo

06?????k?g

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

21 个你应该知道的 wget 命令

三种恢复 HDFS 上删除文件的方法

据传-蚂蚁金服350亿美元开约A股IPO,马云身价又要暴涨

IP505SM_manual_cn.doc

奇虎360正式开源深度学习调度平台XLearning

電機工程系認可證照清單 /7/1


江门:中国第一侨乡

untitled

培 训 机 构 介 绍 中 科 普 开 是 国 内 首 家 致 力 于 IT 新 技 术 领 域 的 领 航 者, 专 注 于 云 计 算 大 数 据 物 联 网 移 动 互 联 网 技 术 的 培 训, 也 是 国 内 第 一 家 开 展 Hadoop 云 计 算 的 培

是 喔, 就 是 那 個 在 BBS 醫 療 版 跟 你 嗆 聲, 自 稱 有 三 十 多 年 推 拿 經 驗 的 大 叔 嗎? 一 個 看 來 頗 為 清 秀 的 女 生 問 道, 她 語 氣 中 略 感 訝 異 是 啊, 什 麼 推 拿 按 摩 有 多 好, 還 要 人 生 病 盡 量 不 要








1

教育扩张能改善收入分配差距吗?——来自CHNS2006年数据的证据

山水文化,市井人家——以湖州邱城小镇的概念性规划为例

Workbook_Chinese copy.pdf

Apache Spark 2.4 新增内置函数和高阶函数使用介绍

1

ebook140-11

RunPCPB8 new feature.PDF

Socket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

版权声明


untitled

<4D F736F F D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63>

关于建立境内违法互联网站黑名单管理制度的通知

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99

八个基本的 Docker 容器管理命令

Chapter #

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

双机模板方案0404.doc

UDP 8.2 TCP/IP OSI OSI 3 OSI TCP/IP IP TCP/IP TCP/IP Transport Control Protocol TCP User Datagram Protocol UDP TCP TCP/IP IP TCP TCP/IP TC

(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

浙江师范大学2014年度毕业生就业质量报告

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

公務員服務法第13條相關解釋彙整表

大陸教育部等6個部門公佈「現代職業教育體系建設規劃 ( 年)」規劃到2015年初步形成現代職業教育體系框架,到2020年基本建成「中國」特色現代職業教育體系

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

B1

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

B1

Microsoft Word - 临政办发6.doc

Spark1.4中DataFrame功能加强,新增科学和数学函数

untitled


中国证券监督管理委员会公告

Transcription:

我们在编写 Spark Application 或者是阅读源码的时候, 我们很想知道代码的运行情况, 比如参数设置的是否正确等等 用 Logging 方式来调试是一个可以选择的方式, 但是,logging 方式调试代码有很多的局限和不便 今天我就来介绍如何通过 IDE 来远程调试 Spark 的 Application 或者是 Spar k 的源码 本文以调试 Spark Application 为例进行说明, 本文用到的 IDE 是 IntelliJ IDEA 步骤如下 : 设置调试相关参数 JAVA 自身支持调试功能, 我们仅仅需要在程序启动之前, 在 JVM 里面设置以下参数 : -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888 这里对上面的几个参数进行说明 : -Xdebug 启用调试特性 -Xrunjdwp 启用 JDWP 实现, 包含若干子选项 : transport=dt_socket JPDA front-end 和 backend 之间的传输方法 dt_socket 表示使用套接字传输 address=8888 JVM 在 8888 端口上监听请求, 这个设定为一个不冲突的端口即可 server=y y 表示启动的 JVM 是被调试者 如果为 n, 则表示启动的 JVM 是调试器 suspend=y y 表示启动的 JVM 会暂停等待, 直到调试器连接上才继续执行 suspend=n, 则 JVM 不会暂停等待 因为 Spark 应用程序是分布式的, 所有调试的时候有点麻烦 但是如果知道方法也是很容易的 这里分两种情况来说明 : 调试 Driver 端相关代码 Spark 应用程序都有一个 Driver, 如果你是 yarn-client 模式, 这个 Driver 一般在你启动程序的机器上运行 如果你想调试这块模块, 我们需要在 Driver 相关参数里面设置调试参数如下 : spark.driver.extrajavaoptions -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,ad dress=8888 1 / 5

这个配置可以放到 $SPARK_HOME/conf/spark-defaults.conf 里面 ; 也可以在启动作业的时候通过 --conf 设置, 比如 :--conf "spark.driver.extrajavaoptions=-xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888" 这时候我们就可以调试 Driver 相关的代码了 调试 Executor 端相关代码 一个 Spark 应用程序一般会启动一个或多个 Executor, 我们应用程序相关的计算逻辑一般都是在这里完成的, 所有如果你想调试这块的代码, 需要在 Executor 启动的 JVM 加入相关的调试参数如下 : spark.executor.extrajavaoptions -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y, address=8888 这个配置可以放到 $SPARK_HOME/conf/spark-defaults.conf 里面 ; 也可以在启动作业的时候通过 --conf 设置, 比如 :--conf "spark.executor.extrajavaoptions=-xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888" 可以看见,Executor 的调试代码和 Driver 很类似 启动 Spark Application 上面我们已经设置好了相关的调试参数, 现在我们可以启动 Spark Application 应用程序了 如下 : [iteblog.com@spark spark]$./bin/spark-submit --class scala.scalashuffle --master yarn-client --queue queue1 --num-executors 1 --executor-memory 10g --executor-cores 1 spark-1.0-snapshot.jar /home/wyp/shuffle /home/wyp/sparkshu ffle Spark assembly has been built with Hive, including Datanucleus jars on classpath Listening for transport dt_socket at address: 8888 2 / 5

如果你看到第九行的输出 (Listening for transport dt_socket at address: 8888), 那恭喜你了, 启动了远程调试 而且 Spark Application 正在等待我们的 IDE 连接它 在 IntelliJ IDEA 设置远程调试的 IP 和 Port 如果你需要调试 Driver 相关代码, 依次选择 Edit Configurations-> 点击左上角的 + 号 ->Remote, 在弹出的页面里面将 Host 和 Port 两个选项设置为你 Driver 运行所在节点机器的 IP 和 Port 设置完后, 设置好程序的断电, 然后再点击 IDE 上面的 Debug 按钮 ( 就是那个虫子按钮 ) 这时候, 程序会继续运行, 而且在 IDE 里面会输出以下信息 Connected to the target VM, address: 'www.iteblog.com:8888', transport: 'socket' 而且程序会跳到你设置断点的地方, 你可以在你 IDE 的 Dubegger 里面看到如下的信息 : 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 3 / 5

调试 Executor 相关的代码和上面设置类似, 这里就不介绍了 问题 在调试 Executor 相关代码大家可能会遇到相关的问题 如下 : 17/10/27 13:40:35 WARN cluster.yarnschedulerbackend$yarnschedulerendpoint: Container m arked as failed: container_1504162679223_4890447_01_000003 on host: 192.168.0.126. Exit st atus: 134. Diagnostics: Exception from container-launch: org.apache.hadoop.util.shell$exitcod eexception: /bin/bash: line 1: 9767 Aborted /home/q/java/jdk1.7.0_25//bin/java -server -Xmx 10240m '-Xdebug' '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888' -Djava.io.tmpdir=/tmp/iteblog/nm-local-dir/usercache/iteblog/appcache/application_1504162679223_4 890447/container_1504162679223_4890447_01_000003/tmp '-Dspark.driver.port=49676' -Dsp ark.yarn.app.container.log.dir=/tmp/iteblog/userlogs/application_1504162679223_4890447/co ntainer_1504162679223_4890447_01_000003 -XX:OnOutOfMemoryError='kill %p' org.apache.s park.executor.coarsegrainedexecutorbackend --driver-url spark://coarsegrainedscheduler@1 92.168.0.125:49676 --executor-id 2 --hostname 192.168.0.126 --cores 1 --app-id application_15 04162679223_4890447 --user-class-path file:/tmp/iteblog/nm-local-dir/usercache/iteblog/appc ache/application_1504162679223_4890447/container_1504162679223_4890447_01_000003/ app.jar --user-class-path file:/tmp/iteblog/nm-local-dir/usercache/iteblog/appcache/applicati on_1504162679223_4890447/container_1504162679223_4890447_01_000003/hadoop-lzo-0.4. 20-SNAPSHOT.jar --user-class-path file:/tmp/iteblog/nm-local-dir/usercache/iteblog/appcache/ application_1504162679223_4890447/container_1504162679223_4890447_01_000003/mysql-c onnector-java-5.1.35.jar > /tmp/iteblog/userlogs/application_1504162679223_4890447/contain er_1504162679223_4890447_01_000003/stdout 2> /tmp/iteblog/userlogs/application_1504162 679223_4890447/container_1504162679223_4890447_01_000003/stderr at org.apache.hadoop.util.shell.runcommand(shell.java:464) at org.apache.hadoop.util.shell.run(shell.java:379) at org.apache.hadoop.util.shell$shellcommandexecutor.execute(shell.java:589) at org.apache.hadoop.yarn.server.nodemanager.defaultcontainerexecutor.launchcontainer( DefaultContainerExecutor.java:200) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.containerlaun ch.call(containerlaunch.java:283) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.containerlaun ch.call(containerlaunch.java:79) at java.util.concurrent.futuretask.run(futuretask.java:266) at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142) at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617) at java.lang.thread.run(thread.java:745) 这个问题是 Spark 在同一台机器上启动多个 Executor, 4 / 5

Powered by TCPDF (www.tcpdf.org) 导致端口被占用, 出现的异常, 这时候你只需要把 --num-executors 设置为 1 即可解决这个问题 我们还有可能遇到下面的问题 : 17/10/27 13:56:42 WARN spark.heartbeatreceiver: Removing executor 1 with no recent heartb eats: 12301 ms exceeds timeout 12000 ms 17/10/27 13:56:42 ERROR cluster.yarnscheduler: Lost executor 1 on www.iteblog.com: Execut or heartbeat timed out after 12301 ms 17/10/27 13:56:42 WARN scheduler.tasksetmanager: Lost task 0.0 in stage 0.0 (TID 0, www.ite blog.com, executor 1): ExecutorLostFailure (executor 1 exited caused by one of the running tas ks) Reason: Executor heartbeat timed out after 12301 ms 17/10/27 13:56:46 ERROR cluster.yarnscheduler: Lost executor 1 on www.iteblog.com: Contain er container_1504162679223_4902148_01_000002 exited from explicit termination request. 这是因为我们在调试出现的时候, 整个程序运行流程就卡到那了 这时候 Driver 就无法接收到 Executor 发来的心跳信息了, 从而产生这种异常 解决办法也很简单, 只需要把下面两个参数加大即可 : spark.executor.heartbeatinterval spark.network.timeout spark.executor.heartbeatinterval 参数不能设的比 spark.network.timeout 大 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 5 / 5