实验指导:
13.1 实验目的
能够理解Spark存在的原因,了解Spark的生态圈,理解Spark体系架构并理解Spark计算模型。学会部署Spark集群并启动Spark集群,能够配置Spark集群使用HDFS。
13.2 实验要求
要求实验结束时,每位学生均已构建出以Spark集群:master上部署主服务Master;slave1、2、3上部署从服务Worker;client上部署Spark客户端。待集群搭建好后,还需在client上进行下述操作:提交并运行Spark示例代码WordCount,将client上某文件上传至HDFS里刚才新建的目录。
13.3 实验原理
13.3.1 Spark简介
Spark是一个高速的通用型集群计算框架,其内部内嵌了一个用于执行DAG(有向无环图)的工作流引擎,能够将DAG类型的Spark-App拆分成Task序列并在底层框架上运行。在程序接口层,Spark为当前主流语言都提供了编程接口,如用户可以使用Scala、Java、Python、R等高级语言直接编写Spark-App。此外,在核心层之上,Spark还提供了诸如SQL、Mllib、GraphX、Streaming等专用组件,这些组件内置了大量专用算法,充分利用这些组件,能够大大加快Spark-App开发进度。
一般称Spark Core为Spark,Spark Core处于存储层和高层组建层之间,定位为计算引擎,核心功能是并行化执行用户提交的DAG型Spark-App。目前,Spark生态圈主要包括Spark Core和基于Spark Core的独立组件(SQL、Streaming、Mllib和Graphx)。
13.3.2 Spark适用场景
(1)Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。
(2)由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。
(3)数据量不是特别大,但是要求实时统计分析需求。
13.4 实验内容和步骤
13.4.1 配置Spark集群
配置Spark集群(独立模式):
前提:1、请自行配置各节点之间的免密登录,并在/etc/hosts中写好hostname与IP的对应,这样方便配置文件的相互拷贝。2、因为下面实验涉及Spark集群使用HDFS,所以按照之前的实验预先部署好HDFS。
在master机上操作:确定存在spark。
[root@master ~]# ls /usr/cstor
spark/
[root@master ~]#
在master机上操作:进入/usr/cstor目录中。
[root@master ~]# cd /usr/cstor
[root@master cstor]#
进入配置文件目录/usr/cstor/spark/conf, 先拷贝并修改slave.templae为slave。
[root@master ~]# cd /usr/cstor/spark/conf
[root@master cstor]# cp slaves.template slaves
然后用vim命令编辑器编辑slaves文件
[root@master cstor]# vim slaves
编辑slaves文件将下述内容添加到slaves文件中。
slave1
slave2
slave3
上述内容表示当前的Spark集群共有三台slave机,这三台机器的机器名称分别是slave1~3。
在spark-conf.sh中加入JAVA_HOME。
[root@master cstor]# vim /usr/cstor/spark/sbin/spark-config.sh
加入以下内容
export JAVA_HOME=/usr/local/jdk1.7.0_79
将配置好的Spark拷贝至slaveX、client。(machines在目录/root/data/2下,如果不存在则自己新建一个)
使用for循环语句完成多机拷贝。
[root@master ~]# cd /root/data/2
[root@master ~]# cat machines
slave1
slave2
slave3
client
[root@master ~]# for x in `cat machines` ; do echo $x ; scp -r /usr/cstor/spark/ $x:/usr/cstor/; done;
在master机上操作:启动Spark集群。
[root@master local]# /usr/cstor/spark/sbin/start-all.sh
13.4.2 配置HDFS
配置Spark集群使用HDFS:
首先关闭集群(在master上执行)
[root@master ~]# /usr/cstor/spark/sbin/stop-all.sh
将Spark环境变量模板复制成环境变量文件。
[root@master ~]# cd /usr/cstor/spark/conf
[root@master conf]# cp spark-env.sh.template spark-env.sh
修改Spark环境变量配置文件spark-env.sh。
[root@master conf]$ vim spark-env.sh
在sprak-env.sh配置文件中添加下列内容。
export HADOOP_CONF_DIR=/usr/cstor/hadoop/etc/hadoop
重新启动spark
[root@master local]# /usr/cstor/spark/sbin/start-all.sh
13.4.3 提交Spark任务
在client机上操作:使用Shell命令向Spark集群提交Spark-App
(1)上传in.txt文件到HDFS(hdfs://master:8020/user/spark/in/)上。
in.txt文件在/root/data/13/目录下。
请大家参照实验一自行完成。
(2)提交wordcount 示例代码。
进入/usr/cstor/spark目录,执行如下命令:
[root@master local]# cd /usr/cstor/spark
[root@client spark]# bin/spark-submit --master spark://master:7077 \
--class org.apache.spark.examples.JavaWordCount \
lib/spark-examples-1.6.0-hadoop2.6.0.jar hdfs://master:8020/user/spark/in/in.txt
13.5 实验结果
13.5.1 进程查看
在master和slave1-3上分别执行jps命令查看对应进程。master中进程为Master,slave机进程为Worker。如图13-1所示:
图13-1
13.5.2 验证WebUI
在本地(需开启OpenVPN)浏览器中输入master的IP和端口号8080(例:10.1.89.5:8080),即可看到Spark的WebUI。此页面包含了Spark集群主节点、从节点等各类统计信息。如图13-2所示:
图13-2 Spark界面
13.5.3 SparkWordcount程序执行
输入:in.txt(数据放在/root/date/13目录下)。
hello world
ni hao
hello my friend
ni are my sunshine
输出结果如图13-3所示
图13-3
WebUI中Application的详细信息如图13-4所示。
图13-4
实验操作:
步骤1:配置集群ssh免密
步骤2:修改Spark独立模式配置
在master机上操作:确定存在spark。
[root@master ~]# ls /usr/cstor
spark/
[root@master ~]#
在master机上操作:进入/usr/cstor目录中。
[root@master ~]# cd /usr/cstor
[root@master cstor]#
进入配置文件目录/usr/cstor/spark/conf, 先拷贝并修改slave.templae为slave。
[root@master ~]# cd /usr/cstor/spark/conf
[root@master cstor]# cp slaves.template slaves
然后用vim命令编辑器编辑slaves文件
[root@master cstor]# vim slaves
编辑slaves文件将下述内容添加到slaves文件中。
slave1
slave2
slave3
上述内容表示当前的Spark集群共有三台slave机,这三台机器的机器名称分别是slave1~3。
在spark-conf.sh中加入JAVA_HOME。
[root@master cstor]# vim /usr/cstor/spark/sbin/spark-config.sh
加入以下内容
export JAVA_HOME=/usr/local/jdk1.7.0_79
将配置好的Spark拷贝至slaveX、client。(machines在目录/root/data/2下,如果不存在则自己新建一个)
使用for循环语句完成多机拷贝。
[root@master ~]# cd /root/data/2
[root@master ~]# cat machines
slave1
slave2
slave3
client
[root@master ~]# for x in `cat machines` ; do echo $x ; scp -r /usr/cstor/spark/ $x:/usr/cstor/; done;
步骤3:启动Spark独立模式
步骤4:修改HDFS配置
首先关闭集群(在master上执行)
[root@master ~]# /usr/cstor/spark/sbin/stop-all.sh
将Spark环境变量模板复制成环境变量文件。
[root@master ~]# cd /usr/cstor/spark/conf
[root@master conf]# cp spark-env.sh.template spark-env.sh
修改Spark环境变量配置文件spark-env.sh。
[root@master conf]$ vim spark-env.sh
在sprak-env.sh配置文件中添加下列内容。
export HADOOP_CONF_DIR=/usr/cstor/hadoop/etc/hadoop
重新启动spark
[root@master local]# /usr/cstor/spark/sbin/start-all.sh
步骤5:启动HDFS
步骤6:设置Spark使用HDFS
步骤7:重新启动Spark
步骤8:上传数据文件至HDFS
步骤9:提交Spark任务
步骤10:查看运行结果