Spark本地开发环境搭建与远程debug设置

快速看完《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开发所需要的包。

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.1.1</version>
      <scope>provided</scope>
</dependency>

3、编写WordCount

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

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开发环境搭建-博客-云栖社区-阿里云


转自:https://blog.csdn.net/ping_hu/article/details/77513429

猜你喜欢

转载自blog.csdn.net/lijingjingchn/article/details/83143093