一、 背景知识

1. spark
spark 一个通用的计算引擎,专门为大规模数据处理而设计,与 mapreduce 类似,不同的是,mapreduce 把中间结果 写入 hdfs,而 spark 直接写入 内存,这使得它能够实现实时计算。
spark 由 scala 语言开发,他能够和 scala 完美结合,同时实现了 java、python、R 等接口。

2. yarn
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
二、 实验目标
熟悉并完成spark的3种搭建模式:local 模式、Standalone 模式、基于 yarn 的 spark 集群部署。

三、 实验环境

3台云主机操作系统:CentOS7
jdk.1.8.0_191及以上已安装,具体JAVA版本与hadoop版本的对应关系,请参考https://cwiki.apache.org/confluence/display/HADOOP2/HadoopJavaVersions

四、 实验过程

Standalone模式部署:

1. 官网下载spark压缩包(注意要和hadoop版本相对应,我这里用的hadoop版本是2.8.5)

云计算之Spark学习 spark与云计算的关系_云计算之Spark学习

2. 解压spark压缩包(java环境要提前安装,这里不再赘述)

云计算之Spark学习 spark与云计算的关系_大数据_02

3. 配置环境变量

云计算之Spark学习 spark与云计算的关系_分布式计算_03

export SPARK_HOME=/usr/lib/spark
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$SPARK_HOME/bin:$PATH

4.进入spark目录,修改conf/slaves文件

云计算之Spark学习 spark与云计算的关系_分布式计算_04

5.修改conf/spark-env.sh文件,设置 spark 的主节点 和 端口

云计算之Spark学习 spark与云计算的关系_云计算之Spark学习_05

6.向其他结点远程scp配置文件,执行如下指令

scp -r conf/ root@m2:/usr/lib/spark
scp -r conf/ root@m3:/usr/lib/spark

7.启动spark

8.运行jps指令,查看进程,验证spark是否启动成功,m1正常运行

云计算之Spark学习 spark与云计算的关系_分布式计算_06

9.运行jps指令,查看进程,验证spark是否启动成功,m2正常运行

云计算之Spark学习 spark与云计算的关系_分布式计算_07

10.运行jps指令,查看进程,验证spark是否启动成功,m3正常运行

云计算之Spark学习 spark与云计算的关系_spark_08

11.操作spark集群,通过spark-shell模式,验证spark是否启动
输入spark-shell,m1运行spark-shell成功

**# 也可以设置参数**
spark-shell --master spark://m1:7077 --executor-memory 600m

云计算之Spark学习 spark与云计算的关系_大数据_09

注意用红框框出来的那两句,意思是 shell 中内置了可用的 spark context 和 spark session,名字分别为 sc 和 spark

12.输入:quit即可退出

基于yarn的spark部署:

1.安装java环境,注意要参照hadoop官网中对hadoop相应版本的推荐java版本(这一步在搭建hadoop分布式模式集群之前就应该已经完成)

2.安装scala(理论上):spark tar 包带有 scala 依赖,所以无需专门安装

3. spark on yarn 模式只需在 hadoop 集群的任一节点安装 spark 即可,不需要 spark 集群;
因为 spark 应用提交到 yarn 后,yarn 负责集群资源调度。

4.修改spark-env.sh文件,添加如下内容:
YARN_CONF_DIR=/usr/lib/hadoop-2.8.5/etc/hadoop
这个地址是 hadoop yarn 的配置文件的地址

5.修改hadoop yarn的配置,即修改yarn-site.xml,加入如下内容:

<!-- spark 部署到 yarn 上需要这两个配置 --> 
<!-- 是否启动一个线程检查每个任务正在使用的物理内存,如果超出分配值,则直接杀掉该任务,默认为 true -->
<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
 </property>
 
<!-- 是否启动一个线程检查每个任务正在试用的虚拟内存,如果超出分配值,则直接杀掉该任务,默认为 true -->
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
 </property> 
<!-- spark 部署到 yarn 上需要这两个配置 -->

6.将hadoop yarn配置文件scp分发到各结点主机

7.操作yarn模式,验证spark在yarn上运行是否成功

云计算之Spark学习 spark与云计算的关系_大数据_10

ps:可以利用hadoop UI监控yarn模式的运行状况

五、 收获及心得

由于手指撞车受伤,无法打字,所以学习计划有所耽误,这两种迟更了一篇博客,这篇博客的学习目标,我是想在具体了解大数据分布式计算生态之后,对技术栈中的主要技术与环境做一具体而深入的了解,我认为最有效的方式就是实打实的搭配它的环境,并解决在过程中遇到的问题(遇到的问题很多很细碎,一开始尝试记录问题,但发现这样反而浪费时间,所以在没有遇到特别巨大的问题时,我就直接查阅资料去解决了,并没有记录)。这篇博客,主要是研究了spark与yarn这两个技术分别的作用与意义,并在理论层面了解的基础之上,进行spark与yarn的实践搭建,加深对这两项技术的理解,也提升了我对分布式计算这个课题整体的素养,我受益匪浅。
在研究docker时,发现docker环境搭建有错误,至今还未解决,所以耽误了docker环境的学习,打算重新安装docker环境。
在hadoop伪分布式模式的基础上,我查阅教程熟悉了HDFS的一些基本操作,已经可以熟练的上传或下载文件,这令我非常有成就感,因为我已经从一个对分布式计算一无所知的小白,到了现在可以对HDFS进行操作。
在安装配置环境过程中,有些步骤遇到了莫名其妙的问题,并且非常枯燥,这让我的学习热情有所下降,在知道这个问题后,导师建议我可以多看看分布式计算的实战视频,以提升学习兴趣,我尝试之后,果然热情重燃,非常奏效!这是我学到的一个新的学习方法,因为兴趣是学习路上最好的也是最持久的老师和动力,想方设法提升学习兴趣,也是系统高效的学习方法的一部分,这将是我今后学习路上的一笔财富!

六、 参考资料

http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/ https://baike.baidu.com/item/yarn/16075826?fr=aladdin
https://baike.baidu.com/item/SPARK/2229312?fr=aladdin