美文网首页
第四章 用IDEA写一个spark小程序

第四章 用IDEA写一个spark小程序

作者: 比特阳 | 来源:发表于2017-01-15 18:27 被阅读0次

创建:20161211
更新:20170115

本章小目标

  1. 搭建IDEA开发环境
  2. 安装并配置sbt
  3. 写一个spark程序并运行

软件版本

1. 安装IDEA

1.1 解gz包安装

话说以前都用eclipse,后来觉得还是jetbrains的系列IDE给力,我也用pycharm写python程序。有社区版和付费版,请随便选择一个合适的即可。

$ mkdir ~/soft/jetbrains
$ tar -xzvf ideaIU-2016.2.4.tar.gz -C ~/soft/jetbrains
$ tar -xzvf pycharm-professional-2016.1.4.tar.gz -C ~/soft/jetbrains/
$ cd ~/soft/jetbrains/idea-IU-162.2032.8/bin
$ ./idea.sh

下面进入图形化安装界面,过于简单此处略过,随便折腾吧,折腾坏了也没什么大不了的,可以删掉配置文件,再来一次。实在不行还有虚拟机快照呢!

$ rm -rf  ~/.IntelliJIdea2016.2/   #删掉IDEA配置

如果要安装pycharm,也是一样的步骤,有兴趣可以试试。

1.2 插件安装

上一步图形界面安装时,可以选择安装scala插件,vim插件。很不幸地联网失败了。怎么办呢,进入IDE启动页面。

image.png

右下角点击configure,然后选择PLugins,再选择下方的install plugin from disk

image.png

选择提前下载好的插件然后安装,可以在官网下载插件
另外,经过测试,插件安装失败应该是被墙了,后来把宿主机也翻过去就可以在线装了。

1.3 sbt安装与配置

linux下安装,看官网:
http://www.scala-sbt.org/1.0/docs/zh-cn/Installing-sbt-on-Linux.html

echo "deb https://dl.bintray.com/sbt/debian-experimental /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
sudo apt-get install sbt

安装完成后需要配置一下源,否则会很慢。
配置源参考:第五章 SBT国内源配置

$ sbt sbtVersion 测试安装结果
[info] Set current project to root--sbt (in build file:/home/bit/.sbt/)
[info] 0.13.13

1.4 IDEA配置sbt

setting -》 Build-》SBT-》
找到本地安装sbt-launch.jar的路径,进行修改。

image.png

2 创建sbt spark工程

新建一个SBT工程,scala版本2.11.8,sbt版本与本地安装不一致,先选一个,稍后修改。
样例代码使用《spark机器学习》第一章的例子,我从网上下的:
Spark机器学习与随书代码- 下载频道- CSDN.NET

工程目录如下:
修改build.properties的sbt版本为本地版本。
修改build.sbt,增加:

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.2"
image.png

3 用SBT运行程序

到项目目录下执行,应该能看到如下结果

sbt run
17/01/15 18:19:14 INFO BlockManagerInfo: Removed broadcast_1_piece0 on 192.168.124.151:36074 in memory (size: 1956.0 B, free: 379.2 MB)
Total purchases: 5
Unique users: 4
Total revenue: 39.91
Most popular product: iPhone Cover with 2 purchases
17/01/15 18:19:14 INFO ContextCleaner: Cleaned shuffle 0

[success] Total time: 25 s, completed Jan 15, 2017 6:19:15 PM

4 编译打包输出

$ sbt
[info] Loading project definition from /home/bit/mlw_spark/hispark/project
[info] Set current project to hispark (in build file:/home/bit/mlw_spark/hispark/)
> 
> compile   编译
[success] Total time: 1 s, completed Jan 15, 2017 6:29:56 PM
> package  打包
[info] Packaging /home/bit/mlw_spark/hispark/target/scala-2.11/hispark_2.11-1.0.jar ...
[info] Done packaging.
[success] Total time: 0 s, completed Jan 15, 2017 6:30:09 PM
> 

5 提交到spark集群

spark运行方法参考:第三章 spark2.0实验环境搭建

在项目目录执行如下代码,指定编译打包输出的jar文件。
~/mlw_spark$ ~/soft/spark/spark-2.0.2-bin-hadoop2.7/bin/spark-submit --master local[2] ./hispark/target/scala-2.11/hispark_2.11-1.0.jar

报错1:

Exception in thread "main" java.net.ConnectException: Call From U1604N1/192.168.124.151 to U1604N1:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

因为我构建的集群是hdfs的,因此需要在路径前指定输入文件来自操作系统本地文件。

val data = sc.textFile("file:data/UserPurchaseHistory.csv")

报错2:

17/01/15 18:36:51 INFO spark.SparkContext: Created broadcast 0 from textFile at ScalaApp.scala:13
Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:data/UserPurchaseHistory.csv

提示说用file后就不支持相对路径了,这个不知道有没有什么办法,如果有,也可以回复给我。多谢
修改一下代码如下:

val data = sc.textFile("file:/home/bit/mlw_spark/hispark/data/UserPurchaseHistory.csv")

重新编译,打包,再次执行就可以了。
输出效果如下:

17/01/15 18:39:28 INFO scheduler.DAGScheduler: Job 3 finished: collect at ScalaApp.scala:30, took 0.155300 s
Total purchases: 5
Unique users: 4
Total revenue: 39.91
Most popular product: iPhone Cover with 2 purchases

相关文章

网友评论

      本文标题:第四章 用IDEA写一个spark小程序

      本文链接:https://www.haomeiwen.com/subject/xsypmttx.html