Spark2.0.0集群环境部署(Spark On Yarn)

时间:2021-07-15 12:48:58

Spark 2.0.0发布已经有一段时间了,目前公司生产环境还是使用1.6系列版本。为了测试Spark 2.0.0各方面的稳定性和计算性能,我基于CDH集群环境,搭建了Spark On Yarn集群环境。

        

环境信息:

         CDH版本:CDH-5.7.0

                   其中,Hadoop版本:2.6.0

         Java版本:1.7.0_80

         Scala版本:2.11.7

         Spark版本:spark-2.0.0-bin-hadoop2.6

         Spark集群规划:

        

IP地址

主机名

角色

10.20.24.199

SZB-L0029554

Master/Worker

10.20.24.196

SZB-L0029556

Worker

10.20.24.198

SZB-L0029557

Worker

10.20.24.200

SZB-L0029558

Worker

10.20.24.201

SZB-L0029559

Worker

 

安装步骤如下:

1.      Spark集群的每个节点的/etc/hosts添加所有的集群主机信息

127.0.0.1        localhost

10.20.24.199     SZB-L0029554

10.20.24.196     SZB-L0029556

10.20.24.198     SZB-L0029557

10.20.24.200     SZB-L0029558

10.20.24.201     SZB-L0029559

 

2.      给Spark单独规划用户和用户组

groupadd -g 8888myspark

useradd -m -d /var/lib/myspark -g spark -u 5888 myspark

passwd myspark

 

3.      Spark集群所有节点部署Java

Java部署好之后要记得配置环境变量(/etc/profile)并source生效,如下:

export JAVA_HOME=/usr/java/latest

export JRE_HOME=/usr/java/latest/jre

export PATH=$PATH:$JAVA_HOME/bin

exportCLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

 

验证:

[root@SZB-L0029554 ~]# echo$JAVA_HOME

/usr/java/latest

[root@SZB-L0029554 ~]# java -version

java version "1.7.0_80"

Java(TM) SE Runtime Environment(build 1.7.0_80-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixedmode)

 

 

4.      Spark集群所有节点部署Scala

Scala部署好之后,配置环境变量并source生效,如下:

export SCALA_HOME=/usr/local/scala

export PATH=.:$SCALA_HOME/bin:$PATH

 

[root@SZB-L0029554 ~]# echo$SCALA_HOME

/usr/local/scala

[root@SZB-L0029554 ~]# scala-version

Scala code runner version 2.11.7 -- Copyright 2002-2013,LAMP/EPFL

 

5.      Spark集群的节点间创建信任关系

 

6.      Spark集群的每个节点关闭防火墙等服务

 

7.      Spark的Master节点安装部署

解压缩并设置软链接,安装后的目录如下:

[myspark@SZB-L0029554 ~]$ ll

total 4

lrwxrwxrwx  1 myspark spark   25 Aug 8 14:20 spark -> spark-2.0.0-bin-hadoop2.6

drwxr-xr-x 13 myspark spark 4096 Aug  8 15:03 spark-2.0.0-bin-hadoop2.6

 

配置环境变量(myspark用户家目录的.bashrc):

exportSPARK_HOME=/var/lib/myspark/spark

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

 

使环境变量生效:

[myspark@SZB-L0029554 ~]$ source .bashrc

 

8.      Spark的Master节点配置

8.1   创建目录并修改属组和属主

mkdir -p /hadoopdata1/sparkdata/local

mkdir -p /var/lib/myspark/spark/logs

mkdir -p /hadoopdata1/sparkdata/work

chown -R myspark:myspark/hadoopdata1/sparkdata

 

8.2   配置conf/spark-env.sh

export SPARK_HOME=/var/lib/myspark/spark

export JAVA_HOME=/usr/java/jdk1.7.0_80

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop

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

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native

SPARK_MASTER_HOST=10.20.24.199

#web页面端口

SPARK_MASTER_WEBUI_PORT=28686

#Spark的local目录

SPARK_LOCAL_DIRS=/hadoopdata1/sparkdata/local

#worker目录

SPARK_WORKER_DIR=/hadoopdata1/sparkdata/work

#Driver内存大小

SPARK_DRIVER_MEMORY=4G

#Worker的cpu核数

SPARK_WORKER_CORES=16

#worker内存大小

SPARK_WORKER_MEMORY=64g

#Spark的log日志目录

SPARK_LOG_DIR=/var/lib/myspark/spark/logs

 

8.3   配置slaves

SZB-L0029554

SZB-L0029556

SZB-L0029557

SZB-L0029558

SZB-L0029559

 

8.4   配置spark-defaults.conf

#建议开启,可以对已完成的任务记录其详细日志

spark.eventLog.enabled  true

#eventLog的文件存放位置

spark.eventLog.dir      hdfs://SZB-L0023776:8020/myspark/eventLog/applicationHistory

 

其他值保持默认即可。

 

9.      将Master的Spark整个目录拷贝到Worker节点

scp -r spark-2.0.0-bin-hadoop2.6 myspark@SZB-L0029556:/var/lib/myspark/

scp -r spark-2.0.0-bin-hadoop2.6 myspark@SZB-L0029557:/var/lib/myspark/

scp -r spark-2.0.0-bin-hadoop2.6 myspark@SZB-L0029558:/var/lib/myspark/

scp -r spark-2.0.0-bin-hadoop2.6 myspark@SZB-L0029559:/var/lib/myspark/

另外将Master节点的.bashrc环境变量也拷贝到所有的Worker节点并执行source命令使环境变量生效。

 

10.  启动Spark集群环境

在Master节点上启动Spark集群:

[myspark@SZB-L0029554 ~]$ start-all.sh

 

查看Master节点的进程:

[myspark@SZB-L0029554 ~]$ jps

29593 Master

29709 Worker

29970 Jps

 

再查看其他Worker节点的进程:

[myspark@SZB-L0029556 ~]$ jps

25276 Jps

24754 Worker

 

11.  通过Web UI查看

我们访问http://szb-l0029554:28686/页面,查看内容:

可以看到有5个Workers。

 

12.  Spark环境验证

我们先执行官网自带的计算Pi的例子:

[myspark@SZB-L0029554 ~]$ spark-submit --masterspark://SZB-L0029554:7077 --class org.apache.spark.examples.SparkPi --nameSparkPI /var/lib/myspark/spark/examples/jars/spark-examples_2.11-2.0.0.jar

 

输出结果为:

Pi is roughly 3.1383756918784593

 

下面我们通过Yarn资源调度平台来执行相关操作:

[myspark@SZB-L0029554 ~]$ spark-shell --master yarn

Spark context Web UI available athttp://10.20.24.199:4040

Spark context available as 'sc'(master = yarn, app id = application_1469373167347_0106).

Spark session available as 'spark'.

Welcome to

     ____              __

    / __/__  ___ _____/ /__

   _\ \/ _ \/ _ `/ __/  '_/

  /___/ .__/\_,_/_/ /_/\_\   version2.0.0

     /_/

        

Using Scala version 2.11.8 (JavaHotSpot(TM) 64-Bit Server VM, Java 1.7.0_80)

Type in expressions to have themevaluated.

Type :help for more information.

 

scala> val textFile =sc.textFile("/myspark/testdata/README.md")

textFile:org.apache.spark.rdd.RDD[String] = /myspark/testdata/README.mdMapPartitionsRDD[1] at textFile at <console>:24

 

scala> textFile.filter(line =>line.contains("Spark")).count()

res0: Long = 19

 

我们上面执行的是统计HDFS文件系统上的/myspark/testdata/README.md文件里面包含Spark的行数。

 

可以根据上面日志提示的网址http://10.20.24.199:4040来查看作业执行情况,当我们使用浏览器访问http://10.20.24.199:4040时会自动调整到Yarn的管理页面,比如我这里是