5、Spark集群的安装

 

5.1、Spark版本的选择

三大主要版本:

Spark-0.X

Spark-1.X(主要 Spark-1.3 和 Spark-1.6)

Spark-2.X(最新 Spark-2.3) 

官网首页:http://spark.apache.org/downloads.html 

kylin4下载spark后无法识别 spark官网无法选择下载版本_kylin4下载spark后无法识别

我们选择的版本:spark-2.3.0-bin-hadoop2.7.tgz 

 

5.2、Spark编译

自己用利用搜索引擎解决哈,小老弟。解决问题的能力,职场中也至关重要!

官网:http://spark.apache.org/docs/latest/building-spark.html 

 

5.3、Spark依赖环境

在官网文档中有一句话: 

kylin4下载spark后无法识别 spark官网无法选择下载版本_hadoop_02

 

5.4、安装JDK

大哥,我请大神教你安装,点一下就学会如何安装JDK啦!

 

5.5、安装 Scala 

可以看我之前的文章哦,卧槽,看了就会系列的产品:

 

5.6、安装Spark

5.6.1、Spark 分布式集群 

Spark 也是一个主从架构的分布式计算引擎。 主节点是 Master,从节点是 Worker

所以集群规划:

Server

Master

Worker 

hadoop02



hadoop03

 


hadoop04

 


hadoop05

 


 

 

 

 

 

 

详细安装步骤:

1、上传下载好的 Spark 到集群中的一个节点,

比如是 hadoop05 put c:/spark-2.3.0-bin-hadoop2.7.tgz

2、使用之前安装 hadoop 集群相同的 hadoop 用户安装 spark 集群,

现在规划安装目录 /home/hadoop/apps/,

解压缩进行安装: tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -apps /home/hadoop/apps/

3、修改配置文件 spark-env.sh 进入 SPARK_HOME 的 conf 目录中,进行如下更改:

cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf mv spark-env.sh.template spark-env.sh 然后修改 spark-env.sh:

export JAVA_HOME=/usr/local/java/jdk1.8.0_73 export SPARK_MASTER_HOST=hadoop02 export

SPARK_MASTER_PORT=7077

4、修改配置文件 slave 进入 SPARK_HOME 的 conf 目录中,进行如下更改: cd /home/hadoop/apps/spark-2.3.0-bin-

hadoop2.7/conf mv slaves.template slaves 在 slaves 的最后添加所有 worker 节点的主机名 hadoop02

hadoop03

hadoop04

hadoop05

5、将 spark 安装包 copy 到所有安装节点

scp -r spark-2.3.0-bin-hadoop2.7 hadoop02:/home/hadoop/apps/

scp -r spark-2.3.0-bin-hadoop2.7 hadoop03:/home/hadoop/apps/

scp -r spark-2.3.0-bin-hadoop2.7 hadoop04:/home/hadoop/apps/

6、配置环境变量

vim ~/.bashrc

export SPARK_HOME=/home/hadoop/apps/spark-2.3.0-bin-hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

source ~/.bashrc

千万注意:HADOOP_HOME/sbin 和 SPARK_HOME/sbin 目录中都包含 start-all.sh 和

stopall.sh 脚本。所以会有冲突。所以在使用有冲突的命令等要千万注意。

如果区分不清楚,那么不推荐配置环境变量

7、启动 Spark 集群

[hadoop@hadoop02 ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7

[hadoop@hadoop02 spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh

kylin4下载spark后无法识别 spark官网无法选择下载版本_spark_03

8、验证集群启动是否成功

8.1、验证每个节点上的对应进程是否都启动正常

kylin4下载spark后无法识别 spark官网无法选择下载版本_SPARK_04

8.2、验证 Spark Web UI

打开浏览器访问:http://hadoop02:8080/

hadoop02 就是 master 所在的服务器

kylin4下载spark后无法识别 spark官网无法选择下载版本_SPARK_05

8.3、测试能否运行一个 Spark 例子程序

提交一个 spark 程序:

[hadoop@hadoop03 ~]$ run-example

SparkPi 10 最后结果:

kylin4下载spark后无法识别 spark官网无法选择下载版本_spark_06

或者:

[hadoop@hadoop3 ~]$ ~/apps/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://hadoop02:7077 \

--executor-memory 512m \

--total-executor-cores 1 \

~/apps/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar \ 100

--master spark://hadoop02:7077     指定 Master 的地址

--executor-memory 512m                指定每个 worker 可用内存为 500m

--total-executor-cores 1                   指定整个集群使用的 CPU 核数为 1 个

8.4、进入 Spark Shell 提交 wordcount 程序:

数据准备:

kylin4下载spark后无法识别 spark官网无法选择下载版本_spark_07

进入 Spark Shell: [hadoop@hadoop2 ~] spark-shell

执行程序:

sc.textFile("/home/hadoop/words.txt").flatMap(_.split(" ")) .map((_,1)).reduceByKey(_+_).foreach(println)

kylin4下载spark后无法识别 spark官网无法选择下载版本_kylin4下载spark后无法识别_08

如果是 Spark-1.6.3,那么启动的 spark-shell 如下:

kylin4下载spark后无法识别 spark官网无法选择下载版本_spark_09

注意:

如果启动 Spark Shell 时没有指定 master 地址,但是也可以正常启动 Spark Shell 和执行 Spark Shell 中的程序,其实是启动了 Spark 的 local 模式,该模式仅在本机启动一个进程,没有与 集群建立联系。 Spark Shell 中已经默认将 SparkContext 类初始化为对象 sc。用户代码如果需要用到,则直接 应用 sc 即可。 Spark Shell 中已经默认将 Spark Session 类初始化为对象 spark。用户代码如果需要用到,则 直接应用 spark 即可。

注意 Spark2 和 Spark1 的区别

5.6.2、Spark 高可用集群

在上面的 4.6.1 中的安装的 Spark 集群是一个普通的分布式集群,存在 master 节点的单点故 障问题。Hadoop 在 2.X 版本开始,已经利用 ZooKeeper 解决了单点故障问题。同样的策略, Spark 也利用 ZooKeeper 解决 Spark 集群的单点故障问题

集群规划:

Server

Master

Worker

hadoop02



hadoop03

 


hadoop04



hadoop05

 


 

 

 

 

 

 

具体步骤:

1、停止 Spark 集群

[hadoop@hadoop02 ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7

[hadoop@hadoop02 ~]$ sbin/stop-all.sh

2、配置 ZooKeeper 集群,并且启动好 ZooKeeper 集群

3、修改 SPARK_HOME/conf 目录中的 spark-env.sh 配置文件:

删掉:

export SPARK_MASTER_HOST=hadoop02

增加一行:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER - Dspark.deploy.zookeeper.url=hadoop02,hadoop03,hadoop04 -

Dspark.deploy.zookeeper.dir=/spark"

解释:

-Dspark.deploy.recoveryMode=ZOOKEEPER

说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper 来维护的。就是说用 zookeeper 做了 Spark 的 HA 配置,Master(Active)挂掉的话, Master(standby)要想变成 Master(Active)的话,Master(Standby)就要像 zookeeper 读取 整个集群状态信息,然后进行恢复所有 Worker 和 Driver 的状态信息,和所有的 Application 状态信息

-Dspark.deploy.zookeeper.url=hadoop2:hadoop03:hadoop04

#将所有配置了 zookeeper,并且在这台机器上有可能做 master(Active)的机器都配置进 来(我用了 3 台,就配置了 3 台)

-Dspark.deploy.zookeeper.dir=/spark

这里的 dir 和 zookeeper 配置文件 zoo.cfg 中的 dataDir 的区别??? -Dspark.deploy.zookeeper.dir 是保存 spark 的元数据,保存了 spark 的作业运行状态; zookeeper 会保存 spark 集群的所有的状态信息,包括所有的 Workers 信息,所有的 Applactions 信息,所有的 Driver 信息,如果集群

4、如果是高可用的 Hadoop 集群,一定要把 core-site.xml 和 hdfs-site.xml 放置在 $SPARK_HOME/conf 目录中。然后所有节点要同步

5、同步配置文件

[hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop03:$PWD

[hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop04:$PWD

[hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop05:$PWD

6、启动集群

在 hadoop02 上执行:

[hadoop@hadoop02 ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7

[hadoop@hadoop02 spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh

kylin4下载spark后无法识别 spark官网无法选择下载版本_hadoop_10

此时,通过观察启动日志,或者检查 hadoop04 上是否包含有 master 进程等都可以得知 hadoop04 上的 master 并不会自动启动,所以需要手动启动 那么在 hadoop04 执行命令进行启动:

kylin4下载spark后无法识别 spark官网无法选择下载版本_spark_11

7、验证高可用

这是正常情况:

Hadoop02 是 spark 集群的 active master 节点

Hadoop04 是 spark 集群的 standby master 节点

kylin4下载spark后无法识别 spark官网无法选择下载版本_hadoop_12


通过杀掉 active master 观察是否 hadoop04 能启动切换为 active 状态。

结果:

kylin4下载spark后无法识别 spark官网无法选择下载版本_SPARK_13

5.6.3、配置 Spark HistoryServer

详细步骤:

第一步:

cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf

cp spark-defaults.conf.template spark-defaults.conf

在文件里面添加如下内容:

spark.eventLog.enabled                         true

spark.eventLog.dir                                  hdfs://myha01/sparklog

kylin4下载spark后无法识别 spark官网无法选择下载版本_Spark集群的安装_14

第二步:

在 spark-evn.sh 的文件里面添加如下内容:

export               SPARK_HISTORY_OPTS="Dspark.history.ui.port=18080

Dspark.history.retainedApplications=30

Dspark.history.fs.logDirectory=hdfs://myha01/sparklog"

kylin4下载spark后无法识别 spark官网无法选择下载版本_hadoop_15

第三步:

在启动 HistorServer 服务之前 hdfs://myha01/sparklog 目录要提前创建

hadoop fs -mkdir -p hdfs://myha01/sparklog

第四步:启动 Spark HistoryServer

[hadoop@hadoop02 ~] $SPARK_HOME/sbin/start-history-server.sh

第五步:访问 Spark History WebUI

http://hadoop02:18080/