快速看完《Spark大数据处理 技术、应用与性能优化》前四章后,对Spark有了一个初步的了解,终于踏出了第一步,现在需要在Spark集群中做些测试例子,熟悉一下开发环境和开发的流程。本文主要总结了如何在本地使用Maven搭建开发环境以及如何进行远程debug。由于采用的Spark是今年5月24号才发布的Spark2.1.1,网上大多数例子都是Spark1.X,因此走了不少弯路,才搭建好开发环境。

版本概述

Spark版本:2.1.1
IntelliJ IDEA:2017.1.5
开发环境:mac
测试环境:Linux

本地开发环境搭建

1、新建一个Maven项目

archetype选择scala

2、导入spark相关包

配置pom.xml,然后Maven自动下载依赖包,Spark2.X已经不提供spark-assembly-1.5.0-hadoop2.4.0.jar 之类的jar包,改成了一些小的jar包,存放在jars目录下。开发的时候可以全部导入jars目录下的jar包,但更方便的是使用maven可以方便的自动导入spark2.1.1开发所需要的包。

1
2
3
4
5
6
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
<scope>provided</scope>
</dependency>

3、编写WordCount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.xuxp.test

import org.apache.spark.{SparkConf, SparkContext}

/**
* Created by xuxp on 2017/8/21.
*/
object WordCount {
def main(args: Array[String]): Unit = {
if (args.length == 0) {
System.err.println("Usage: SparkWordCount <inputfile> <outputfile>")
System.exit(1)
}
val conf = new SparkConf().setAppName("WominWordCount")
val sc = new SparkContext(conf)
val textRdd = sc.textFile(args(0))
val result = textRdd.flatMap ( line => line.split("\\s+") ).map(word => (word, 1)).reduceByKey(_ + _)
result.saveAsTextFile(args(1))
}
}

4、打包配置

在project settings->Artifacts新建一个JAR—>from modules with dependencies
选择Main Class

配置好后Build—>Build Artifacts —>build,就能生成打包好的jar包

5、jar包上传

配置文件上传tools—>deployment

打开Browse Remote Host,将文件直接拖过去,就实现文件上传

6、执行jar包

写一个执行脚本,上传后,每次只需要./run-spark.sh就能很快的执行。执行时需要保证README.md在hdfs中。

执行完毕后,可以查询outputdir/part-00000中的文件hadoop fs -cat outputdir/part-00000

远程开发调试

1、在远程服务器的bash中设置SPARK_SUBMIT_OPTS

1
export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=41999

2、在IntelliJ IDEA中配置remote debug

3、打个断点

4、在远程服务器上运行程序

运行时会出现程序挂起,监听端口中

5、在IntelliJ IDEA中debug

出现如下情况,说明远程debug成功

程序会继续输出,并在断点出停住。

总结

不得不说IntelliJ IDEA确实是一个非常强大的集成开发环境,提供版本管理,ssh,远程debug等强大功能,是Spark开发的利器,事实上Spark的开发团队也是使用IntelliJ IDEA来开发Spark的。
网上的有关spark的搭建文章有时候并不适合自己,需要根据自己的环境,软件的版本来选择搭建的方式。

参考资料

How to debug a scala based Spark program on Intellij IDEA - Stack Overflow
想研读下spark的源码,怎么搭阅读和调试的环境呢? - 知乎
IntelliJ IDEA 导入 spark 源码 步骤 - - CSDN博客
Spark修炼之道(进阶篇)——Spark入门到精通:第三节 Spark Intellij IDEA开发环境搭建-博客-云栖社区-阿里云