热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

intellij远程调试spark源码示例

环境与版本OS:centos7JDK版本:1.8Spark版本:2.1.0Scala版本:2.11IDE:intellijidea14.1.4前置条件完成编译Spark源码并导入i

环境与版本

  • 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.

在IDE中配置远程调试参数

在这一步中需要同时打开示例工程和Spark源码工程并分别添加远程调试参数,要注意的是示例工程依赖的Spark版本必须和源码工程完全一致

设置示例工程远程调试参数

在打开的示例工程“RemoteDebugSparkAppDemo”中,设置远程调试JVM选项,步骤如下:

在intellij中打开”Run -> Edit Configuations…”,修改下图中的选项

《intellij远程调试spark源码示例》

将该选项的值设置为:

-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005

设置Spark源码工程远程调试参数

用intellij打开Spark源码工程,打开”Run -> Edit Configuations…”,添加一个新的Remote类型的Configuation项目,取名为RemoteDebug,并按照下图进行配置:

《intellij远程调试spark源码示例》

测试远程调试

在打开的源码工程的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…


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 开发笔记:Spark Java API 之 CountVectorizer
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SparkJavaAPI之CountVectorizer相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
author-avatar
书友34043247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有