Spark完全分布式安装及简单Scala编程
sunshj Lv4

基于Hadoop环境的Spark完全分布式安装及在Windows下使用IDEA进行Scala编程

一、Spark完全分布式安装

首先确保已经安装好完全分布式Hadoop环境,谨记Spark与Hadoop版本的兼容性

安装包
scala-2.11.12.tgz
spark-2.4.5-bin-hadoop2.7.tgz

1、安装Scala

1
tar -xzvf scala-2.11.12.tgz

配置环境变量

1
2
export SCALA_HOME=/home/sunshj/scala-2.11.12
export PATH=$PATH:$SCALA_HOME/bin

测试scala&打印版本信息

1
2
scala
scala -version

2、安装Spark

1
2
tar -xzvf spark-2.4.5-bin-hadoop2.7.tgz
mv spark-2.4.5-bin-hadoop2.7 spark-2.4.5

配置环境变量

1
2
export SPARK_HOME=/home/sunshj/spark-2.4.5
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

使配置文件立即生效

1
source .bashrc

3、配置Spark

进入Spark的conf目录

1
cp spark-env.sh.template spark-env.sh
1
cp slaves.template slaves

spark-env.sh配置信息

1
2
3
4
5
export JAVA_HOME=/home/sunshj/jdk1.8
export SCALA_HOME=/home/sunshj/scala-2.11.12
export SPARK_MASTER_IP=192.168.1.1
export SPARK_WORKER_MEMORY=1G
export HADOOP_CONF_DIR=/home/sunshj/hadoop-2.7.7/etc/hadoop

slaves添加

1
2
slave1
slave2

分发到子节点

1
2
3
scp -r spark-2.4.5/  sunshj@slave1:/home/sunshj/

scp -r spark-2.4.5/ sunshj@slave2:/home/sunshj/
1
2
3
scp -r .bashrc  sunshj@slave1:/home/sunshj/

scp -r .bashrc sunshj@slave2:/home/sunshj/

4、启动Spark集群

  • 首先要启动hadoop集群
  • 进入Spark的sbin目录,将start-all.sh修改为start-spark.sh,同样把stop-all.sh修改为stop-spark.sh,这样做是因为Spark的sbin目录与Hadoop的sbin目录中有重名shell脚本。
  • jps查看master进程中是否多了Master以及Worker,slave1与slave2中是否多了worker。如果有,则正常。

二、Scala编程实现WordCount程序

1、windows下安装Scala

安装包
scala2.11.12.msi

添加系统环境变量

1
2
新建SCALA_HOME,内容为scala安装路径
在Path中添加scala的bin路径

测试

1
scala -version

2、IDEA配置

IDEA需要安装Scala插件

  • 新建Maven工程,选中Create from archetype,选择org.scala-tools.archetypes:scala-archetypes-simples,按流程创建工程。

  • 修改pom.xml,将scala.version标签内容改为2.11.12。并添加以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
    <groupId>org.scala-tools</groupId>
    <artifactId>maven-scala-plugin</artifactId>
    <version>2.11</version>
    </dependency>
    <dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.5.1</version>
    </dependency>
  • 删除test文件夹内容

3、编写程序

  • 新建Scala Class,选择Object,命名为WordCount

  • 添加依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.4.5</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.7</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.7</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.7</version>
    </dependency>
  • 程序代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkConf

    object WordCount
    {
    def main(args : Array[String])
    {
    val conf = new SparkConf().setAppName("WordCount")
    val sc = new SparkContext(conf)
    val inFile = sc.textFile("hdfs://master:9000/input/test.txt")
    val wordCount = inFile.flatMap(_.split(" ")).map(word => (word,1)).reduceByKey((a,b)=>a+b)
    wordCount.foreach(println)
    }
    }

4、打包提交

打包:和java程序打包方法相同,打包为WordCount.jar

上传至master主机,使用以下命令执行程序,其中 {Main-Class} 为你的MANIFEST.MF文件中的 Main-Class

首先删除不必要的文件

1
zip -d WordCount.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF

执行程序

1
spark-submit --class {Main-Class} WordCount.jar
 评论