本来想用Eclipse的。然而在网上找了一圈,发现大家都在说IntelliJ怎样怎样好。我也受到了鼓励,遂决定在这台破机器上鼓捣一次IntelliJ吧。

Spark程序远程调试,就是将本地IDE连接到Spark集群中。让程序一边执行,一边通过debuger实时查看执行情况,配置好以后和本地debug差点儿相同。

之前有写过Spark集群的安装部署。http://blog.csdn.net/u013468917/article/details/50979184当时是在hadoop2.2.0平台部署的Spark1.0.2.后来对Spark熟悉了一点后。就想把集群升级下面。干脆一部到位升级到最新的1.6.1.详细的安装过程和原来的1.0.2一模一样,解压之后将原来安装文件里的conf目录下的配置文件直接复制过来就好了。只是用的是hadoop2.3.0的预编译包,眼下还没有出现什么问题。

所以这次的演示在Spark集群1.6.1上进行。

过程大致分为下面几步:

1、打开Intellij IDEA,File->New ->Project。选择Scala。

2、取名为TopK。然后如图选择Java和Scala的SDK/

3、导入Spark依赖包,这个依赖包在压缩包的lib文件夹下名为 spark-assembly-XXXXXXX.jar

点击File-project structure-Libraries 点击加号选择Java

然后选择依赖包路径就可以。导入依赖包后能够打开这个jar包,依次打开org-apache-spark,然后随便打开一个类,比方rdd文件夹中的RDD.class,展开这个类,点开一个属性。就会出现反编译的源代码。

这时源代码的右上角有一个attach file,点击它,然后选择自己的spark源代码的文件夹就可以绑定源代码。这时凝视什么的都会显示出来。

spark最新源代码下载地址:https://github.com/apache/spark能够用git直接克隆到本地。git
clone https://github.com/apache/spark(前提是在自己电脑中安装好git)

4、在src目录上右击-new-Scala Class。然后填上类名,选择object

5、在文件里填入下面内容

import org.apache.spark._
import org.apache.spark.SparkContext._
object TopK {
def main(args: Array[String]){
val conf = new SparkConf()
val sc = new SparkContext(conf) val textRDD = sc.textFile(args(0),3) val count = textRDD.flatMap(line => line.split("[^a-zA-Z]+").map(word=> (word,1))).reduceByKey(_+_) val topk = count.mapPartitions(getTopk).collect() val iter = topk.iterator
val outiter = getTopk(iter)
println("Topk的值:")
while(outiter.hasNext){
val tmp = outiter.next()
println("\n词: " + tmp._1 + "词频: " + tmp._2)
}
sc.stop()
} def getTopk(iter: Iterator[(String, Int)]): Iterator[(String, Int)] = {
val a = new Array[(String, Int)](10)
while(iter.hasNext){
val tmp = iter.next()
var flag = true
for(i <- 0 until a.length if flag){
if(a(i) !=null && tmp._2 > a(i)._2){
for(j <- ((i+1) until a.length).reverse){a(j) = a(j-1)}
a(i) = tmp
flag = false
}else if(a(i) == null){
a(i) = tmp
flag = false
} }
}
a.iterator
} }

这是一个TopK程序。目的是找出文本中词频最高的10个词。

6、导出jar包

可能是我还不熟悉的原因,个人感觉IntelliJ导jar包比eclipse繁琐非常多。

选择:File-Project Structure-Artifacts 然后点击加号,选择jar-From Modules with dependencies

然后选择Main Class为TopK,选择copy to the outputXXXXXXX点击OK。

接下来选择Build-Build Artifacts-选择build

build完毕后在out目录下就行看到TopK.jar了。

然后将TopK.jar上传到集群主节点中。

到这里。步骤和普通应用开发一样。接下来才是重点。

7、集群配置

改动spark-class脚本 。这个脚本在spark安装文件夹下的bin文件夹中。

改动最后两行:

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

改动为:

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

这就要求Spark在运行任务之前将JAVA_OPTS变量考虑进来。我们就能够为应用程序加入JVM參数啦。

改动完毕后。在命令行中运行下面命令:

export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

这就设置好了当前的暂时JVM变量。

8、远程调试開始了

首先,执行刚才上传的TopK.jar

/cloud/spark-1.6.1-bin-hadoop2.3/bin/spark-submit --class TopK --master yarn TopK.jar /Spark/Jane1.txt

这时能够看到:





说明spark正在监听5005port,这个port能够自己随便设,不冲突即可,可是IntelliJ默认监听这个port。

然后回到IDEA。选择run-Edit Configuration,点击左上角的加号,选择remote。自己取个名字Test_Remote_Debug,改动一下Host。我的集群master地址是192.168.1.131

点击ok

在刚才的TopK程序中设置一个断点。

然后按F9,选择Test_Remote_Debug。

这是假设不出意外。控制台会出现

Connected to the target VM, address: '192.168.1.131:5005', transport: 'socket'

表示连接成功。

接下来就能够和本地Debug一样了。

最后再啰嗦一下那个“JAVA_OPTS"字段是什么意思。

-Xdebug 启用调试特性

-Xrunjdwp 启用JDWP实现,包括若干子选项:

transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。

address=5005 JVM在5005port上监听请求,这个设定为一个不冲突的port就可以。

server=y y表示启动的JVM是被调试者。

假设为n。则表示启动的JVM是调试器。

suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续运行。suspend=n,则JVM不会暂停等待。

Spark应用远程调试的更多相关文章

  1. hive,spark的远程调试设置

    spark的远程调试 spark-env.sh文件里面,加上下面配置即可: if [ "$DEBUG_MODE" = "true" ]; then export ...

  2. spark开启远程调试

    一.集群环境配置 #调试Master,在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量 export SPARK_MASTER_OPTS="-Xdeb ...

  3. sbt结合IDEA对Spark进行断点调试开发

    笔者出于工作及学习的目的,经常与Spark源码打交道,也难免对Spark源码做修改及测试.本人一向讲究借助工具提升效率,开发Spark过程中也在摸索如何更加顺畅的对源码进行调试. Spark基于Sca ...

  4. spark JAVA 开发环境搭建及远程调试

    spark JAVA 开发环境搭建及远程调试 以后要在项目中使用Spark 用户昵称文本做一下聚类分析,找出一些违规的昵称信息.以前折腾过Hadoop,于是看了下Spark官网的文档以及 github ...

  5. Spark远程调试参数

    Spark远程调试脚本: #调试Master,在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量 export SPARK_MASTER_OPTS="- ...

  6. Spark代码Eclipse远程调试

    我们在编写Spark Application或者是阅读源码的时候,我们很想知道代码的运行情况,比如参数设置的是否正确等等.用Logging方式来调试是一个可以选择的方式,但是,logging方式调试代 ...

  7. Spark学习笔记之-Spark远程调试

    Spark远程调试                          本例子介绍简单介绍spark一种远程调试方法,使用的IDE是IntelliJ IDEA.   1.了解jvm一些参数属性   -X ...

  8. Spark远程调试函数

    Spark远程调试函数 1.sendInfo 该函数用于分布式程序的调试,非常方便,在spark的rdd操作中嵌入sendInfo,启动nc服务器后,可以收集到所有需要的运行时信息,该函数可以捕获ho ...

  9. Spark1.6 Idea下远程调试

    使用的开发工具:scala2.10.4.Idea16.JDK8 1.导入依赖的包和源码 在下载Spark中到的导入spark的相关依赖了包和其源码.zip,相关源码的下载地址:https://gith ...

随机推荐

  1. 32位和64位系统下 int、char、long、double所占的内存

    32位和64位系统下 int.char.long.double所占内存

  2. HTML基础(一)

    什么是HTMLHTML Hypertext Markup Language:即超文本标记语言 HTML特点 1.HTML不需要编译,直接由浏览器执行 2.HTML文件是一个文本文件 3.HTML文件必 ...

  3. android 图片

    1,setCompoundDrawables(Drawable left, Drawable top,Drawable right, Drawable bottom) 设置图片出现在textView, ...

  4. xcode菜单栏

    File  文件 Edit  编辑 View 视图 Navigate 导航 Editor 编辑 Product 产品 Window  窗口 Help 帮助 File  文件 New 新建        ...

  5. 记录一个scrapy的坑

    在win10上用命令 pip install scrapy 安装scrapy的时候提示: Could not find a version that satisfies the requirement ...

  6. spring踩坑

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

  7. 第一次:从今开始玩Linux,Ubuntu16.04

    首先声明,我的文章不配图,就靠文字描述,然后自己体会,摸着石头体验吧! 从今天开始玩Linux,Ubuntu16.04据说是比较稳定的,界面友好,类似与Windows界面,也有Linux的命令终端,用 ...

  8. POJ 1414 Life Line(搜索)

    题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...

  9. nmon分析与详解

    1.命令安装 1.查看liunx版本版本x86_64_14i 目录:cd /nmon/logs/ 版本x86_64_14i [root@localhost u06]# cd / [root@local ...

  10. python025 Python3 正则表达式

    Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. ...