超详细的使用Intellij IDEA+Maven开发Spark项目的流程

上了数据挖掘的课,要写结课论文了。于是选择了Spark作为自己的课程主题,也是为自己之后的毕业论文打下知识基础,这里将自己的第一试验记录下来,以便之后的回顾。

1.环境配置

这是我的开发环境:

  • Windows 10
  • 阿里云(Centos 7.3)
  • spark-2.2.0-bin-hadoop2.7(scala-compiler-2.11.8.jar)
  • Scala 2.12.4(这个需要跟spark-2.2.0-bin-hadoop2.7中Scala的编译版本一样才会执行成功,之后会看到报错,所以这个改为Scala 2.11.8)

2.配置Spark的运行环境(Linux)

重点:Spark的版本一定要注意和Scala的版本相对应,不然出现的错误会千奇百怪的,请谨慎安装,具体的对应安装版本无法详细,在这里只能给出自己尝试过的安装版本

安装的环境的前提是要安装JDK(建议是1.8),因为Spark程序是运行在JVM上的,安装Spark只需要将压缩包解压即可。(这是我见过的最简单的安装啦啦啦)下面的是安装后的Spark目录:

image.png

可以利用命令行写Spark项目,可以利用Python和Scala语言写(建议使用Scala),使用./spark-shell 进入编写的入口:

image.png

配置免密钥登录

第一步:使用下面的命令生成密钥

$ ssh-keygen -t rsa

如果之前的生成的密钥的话,在这里可以不用生成。

第二步:复制公钥文件

进入/root/.ssh/ 目录,如果没有authorized_keys 文件,可以先创建一个此文件。

$ cat id_rsa.pub  >> authorized_keys

第三步:修改authorized_keys文件的权限

$ chmod 600 authorized_keys 

第四步:验证ssh服务

$ ssh localhost

执行上述命令如果没有输入密码就可以登录就说明成功了!

3.Intellij IDEA上安装Scala插件和新建项目(Windows)

下面是网友项目的插件安装方法和新建简单的Scala项目,搬过来给大家看看,链接如下:

不会停的蜗牛

下面是我新建Scala项目的目录结构图:

image.png

重点:在build.sbt 文件中添加libraryDependencies 的版本问题,这也是依赖版本要对应的问题,后面会介绍利用Maven管理依赖,这样会方便多了。

4.编写第一个Spark程序

这是非常重要的一步:编写spark程序时需要提前将Scala的SDK添加到Global Libraries,如下图所示:

image.png

新建Scala的class类:

image.png

添加依赖(官方介绍):

可以像这样定义一个依赖,其中 groupIdartifactIdrevision 都是字符串:

libraryDependencies += groupID % artifactID % revision

或者像这样, 用字符串或者 Configuration val 当做 configuration

libraryDependencies += groupID % artifactID % revision % configuration

方法 % 从字符串创建 ModuleID 对象,然后将 ModuleID 添加到 libraryDependencies 中。

当然,要让 sbt(通过 Ivy)知道从哪里下载模块。如果你的模块和 sbt 来自相同的某个默认的仓库,这样就会工作。例如,Apache Derby 在标准的 Maven2 仓库中:

libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"
image.png

不推荐使用这用手动添加依赖的方式,推荐使用Maven管理依赖的方法,请往下面看。

5.将Spark程序打包(Jar包)

打包设置选项:

image.png

打包参数设置:1.选择主函数;2.选择只打包Scala程序

image.png

Build 中选择Build Artifacts 后选择build即可打包成功

image.png

选择build ,然后等待打包结束

image.png

打包的jar包的位置:

image.png

将jar包利用XFtp工具上传到Spark运行环境(对应程序运行地址):

image.png

6.将Jar包上传至Spark运行环境并启动和运行

启动Spark运行环境需要依次执行下面三个命令:

在执行了master进程和worker进程后,可以执行curl 127.0.0.1:8080 得到Spark Master at spark://MJ:7077 ,注意这个地址每个机器上都是不一样的,注意区分一下。

Spark Master at spark://MJ:7077

#启动master进程
./sbin/start-master.sh
#启动worker进程
./bin/spark-class org.apache.spark.deploy.worker.Worker spark://MJ:7077

#提交作业 master后面的地址通过localhost:8080得到  class后面的是自己的项目的名称和对应jar包的地址
./bin/spark-submit --master spark://MJ:7077  --class WordCount  /home/MJ/spark/hellospark.jar

7.查看Spark运行的结果

提交作业之后,可以查看作业运行的结果:

image.png

8.构建Maven管理Spark项目

首先是New Project 项目选择Maven,JDK选择最好是1.8+,然后点击next:

image.png

新建项目之后的目录结构是这样的:

image.png

把其中的java和test文件夹都重新命名为scala文件夹,如下图

image.png

右键项目名出现Add Frameworks support ,并选择scala:

image.png
image.png

选择之后,然后新建一个Package 包文件夹,最后就是新建scala文件

image.png

新建一个Main 文件,打印出hello spark! 字样

image.png
image.png

添加必要的关于Spark的pom 文件,点击添加Group: org.apache.spark

Spark Project Core

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.2.1</version>
</dependency>

Spark Project SQL

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.2.1</version>
</dependency>

Spark Project Hive

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.2.1</version>
</dependency>

9.可能出现的问题

出现这种情况是由于在IDEA和Linux中安装的Scala版本不一样,把两者选择成一样的就会编译通过。

image.png

http://blog.csdn.net/u013054888/article/details/54600229

进入/usr/local/spark-2.2.0-bin-hadoop2.7/jars 找到Scala编译的版本号:

image.png

在IDEA中的Project Structure中选择对应的Scala版本:

image.png

出现下面错误:
exception in thread main org.apache.spark.sparkexception:A master URL must be set in your..
从提示中可以看出找不到程序运行的master,此时需要配置环境变量。
传递给spark的master url可以有如下几种:

local 本地单线程
local[K] 本地多线程(指定K个内核)
local[*] 本地多线程(指定所有可用内核)
spark://HOST:PORT 连接到指定的 Spark standalone cluster master,需要指定端口。
mesos://HOST:PORT 连接到指定的 Mesos 集群,需要指定端口。
yarn-client客户端模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
yarn-cluster集群模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
点击edit configuration,在左侧点击该项目。在右侧在右侧VM options中输入“-Dspark.master=local”,指示本程序本地单线程运行,再次运行即可。从提示中可以看出找不到程序运行的master,此时需要配置环境变量。

点击edit configuration,在左侧点击该项目。在右侧

在右侧VM options中输入“-Dspark.master=local”

,指示本程序本地单线程运行,再次运行即可。

image.png

运行成功的结果:


image.png

10.参考资料

http://docs.scala-lang.org/getting-started.html

http://www.jianshu.com/p/ecc6eb298b8f

http://www.jianshu.com/p/7c0d22847548

http://blog.csdn.net/u012373815/article/details/53266301

http://www.scala-sbt.org/1.x/docs/zh-cn/Library-Dependencies.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容