环境:
1, ubuntu 16.04
2, Intellij
3, jdk1.8
4, Scala2.11
5,Spark 2.1.1
操作过程:
一,安装好Intellij,配置jdk,这些就不详细写了.
二,安装Scala
1)下载Scala
scala下载地址
这里注意Scala需要下载2.12之前的,spark目前不支持2.12之后的Scala的版本,之前我就吃了这个亏.
2)解压
tar -xvzf scala-2.11.1.tgz -C ~/
这里我解压到自己用户主目录下,配置环境变量的话换成应该换成自己解压的目录
3)配置环境变量
这里我忘记是自动配置还是自己配的了,总之如果解压之后没有那就自己配置吧.打开当前用户目录下的.bashrc文件,将下边环境变量配置加到文件中.
export SCALA_HOME=/home/lovixs/scala-2.11.1
export PATH=${SCALA_HOME}/bin:$PATH
4)验证
输入scala,如果进入scala的控制台,说明安装就成功了.
三,安装Spark
这个下载去官网把Spark下载即可.
spark下载链接
这个解压到自己的工作目录即可
注意:这里如果网络不好可以换个网络试一下,我下载的时候就是校园网下不动,cmcc却很快.
四,在Intellij新建一个项目
1,安装scala插件
首先在intellij中安装scala插件,File => Setting => Plugins,在搜索拦输入Scala,然后点击下边Browse Repositories,搜索到之后点击Install,然后重启Intellij即可
2,新建一个Sbt项目
Sbt是类似Maven的一个管理Scala项目和打包的工具,所以这里直接新建一个Sbt项目.
New => Project => Scala,然后选择SBT,点击Next即可
这一步可谓是最麻烦的,麻烦倒不是操作麻烦,而是网络.因为使用sbt来管理和打包scala项目,sbt的一些插件和jar包是真的很慢.网上有一种方法,大家不妨试一试.
* 在.sbt/目录下 新建 repositories
* 在repositories中写入一下内容,起始就是把sbt下载的源改为国内的.
[repositories]
local
oschina-ivy:[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
然后再下载可能会快点.
当然我试了试貌似对我不感冒,最后用cmcc配置了个代理才成功.
代理是在Setting => Appearance & Behavior => System Setting => HTTP Proxy中配置的,用的shadow socks ,大家可以自行配置,网上教程也很多.
3,WordCount类
在src/main/scala下新建WordCount类,右键scala目录,选择new => Scala Class,然后输入类名WordCount,选择Kind为Object,内容为下.
import org.apache.spark.{SparkConf, SparkContext}
object wordCount {
def main(args: Array[String]){
val conf = new SparkConf().setAppName("wordcount")
val sc = new SparkContext(conf)
val input = sc.textFile("/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/test")//存储要分析的文本文件
val lines = input.flatMap(line => line.split(" "))
val count = lines.map(word => (word,1)).reduceByKey{case (x,y) => x+y}
val output = count.saveAsTextFile("/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/helloSparkRes")//存储处理结果的位置,自行更改
}
}
4,打包代码
先创建jar包,File => Project Structure => Artifacts ,点击+号,选择Jar => from modules with dependencies ,然后选择module,就是刚才我们新建的项目,然后在main class选择刚才新建的WrodCount类,注意下边的选项选择第二个选项,否则intellij会把jar中所有的依赖都打包进去,这样打出的jar会巨大.
然后build,生成jar包.build => build artifacts ,然后选择build就可以了.jar包在项目的out/artifacts/name_of_project_jar目录下.
五,将打包的jar放到spark集群上运行(伪集群,只有一个worker节点)
1, 为了方便spark登录本机,首先配置本机无密ssh登录.
* ssh-keygen生成本机的公私钥
* 在~/.ssh目录下新建authorized_keys文件,然后cat id_rsa.pub > authorized_keys,把公钥的内容写入新建的文件中
* 更改权限: chmod 600 authorized_keys
2,把打好的jar包,就是刚才项目中的out/artifacts/name_of_project_jar目录下的以项目名为名字的jar包拷贝一个特定的目录.
3,启动集群
进入spark文件夹中,./sbin/start-master.sh
启动集群.使用jps可以查看当前集群中的节点.
4,启动worker节点
./bin/spark-class org.apache.spark.deploy.worker.Worker spark://lovixs-QTK5:7077
!!注意:
最后的spark://lovixs-QTK5:7077 ,需要我们访问本地的8080端口,替换为spark为我们生成的url地址.
5,提交作业
./bin/spark-submit –master spark://lovixs-QTK5:7077 –class wordCount /home/lovixs/work/myfirstscala.jar
其中同样要注意替换自己的url地址,和类名(wordCount),最后为jar包的位置.
六,检查结果
生成的结果在代码中被我存在了/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/helloSparkRes目录下,大家可以在自己代码中设置的位置找到程序输出的结果.
这时我们就可以看到是两个节点(master和worker)分别的输出了!
后记:唉,说实话写到第四条我就后悔了,字是真多,当时觉得很复杂的东西写来简单不少.也可能是这几天忙着天天写业务代码脑子坏掉了,也可能是单纯的当时被网络折磨的,也不知道写这么多有没有用,希望能有人用的到吧.