创建:20161211
更新:20170115
本章小目标
- 搭建IDEA开发环境
- 安装并配置sbt
- 写一个spark程序并运行
软件版本
- IDE: ideaIU-2016.2.4.tar.gz 中文网站下载稍快一些。
- IDEA 英文官方网站
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启动页面。
右下角点击configure,然后选择PLugins,再选择下方的install plugin from disk
选择提前下载好的插件然后安装,可以在官网下载插件
另外,经过测试,插件安装失败应该是被墙了,后来把宿主机也翻过去就可以在线装了。
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的路径,进行修改。
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"
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