天天看点

使用Scala写第一个Spark程序

环境:

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)解压

这里我解压到自己用户主目录下,配置环境变量的话换成应该换成自己解压的目录

3)配置环境变量

这里我忘记是自动配置还是自己配的了,总之如果解压之后没有那就自己配置吧.打开当前用户目录下的.bashrc文件,将下边环境变量配置加到文件中.

export SCALA_HOME=/home/lovixs/scala-.
    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:http://maven.oschina.net/content/groups/public/ 
  oschina-ivy:http://maven.oschina.net/content/groups/public/, [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,)).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会巨大.

使用Scala写第一个Spark程序

然后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目录下,大家可以在自己代码中设置的位置找到程序输出的结果.

使用Scala写第一个Spark程序

这时我们就可以看到是两个节点(master和worker)分别的输出了!

后记:唉,说实话写到第四条我就后悔了,字是真多,当时觉得很复杂的东西写来简单不少.也可能是这几天忙着天天写业务代码脑子坏掉了,也可能是单纯的当时被网络折磨的,也不知道写这么多有没有用,希望能有人用的到吧.

继续阅读