SparkOnYarn专题一SparkOnYarn环境搭建

hadoop版本: 2.8.0  spark 版本: 2.2.0

前提:hdfs的集群环境已经搭建完毕,这里不详表。

集群环境:3台机器规模

192.168.8.11   hdp-01              

192.168.8.12   hdp-02

192.168.8.13   hdp-03

hdp-01上安装:                    NameNode   ResourceManager       DataNode        NodeManager

hdp-02 hdp-03 上安装:     DataNode  NodeManager

1.  yarn集群环境搭建:

yarn集群中有两个角色:

主节点:Resource Manager  1台

从节点:Node Manager   N台

NodeManager在物理上应该跟data node部署在一起,为什么?

hdfs上的数据存储在datanode节点上,而nodemanager,要进行运算,就需要读取datanode上的数据块,如果部署在datanode节点上,可用直接本地读取,不需要再跨网络传输,速度更快,效率更高。

ResourceManager在物理上应该独立部署在一台专门的机器上(可用部署在任意的机器)

1 修改配置文件:

yarn-site.xml

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hdp-01</value>

</property>

# nodemanager给 mapreduce程序提供辅助功能,辅助shuffle

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name> yarn.nodemanager.resource.memory-mb</name>

<value>4096</value>

</property>

<property>

<name> yarn.nodemanager.resource.cpu-vcores</name>

<value>4</value>

</property>

yarn集群配置参数说明:

 yarn.nodemanager.resource.memory-mb 默认是8G

 yarn.nodemanager.resource.cpu-vcores  默认是8

注意:如果内存不足2G,至少配置2G,即值为2048

如果内存配置低于2G,可能会导致mapreduce任务不能正常运行。

报错如下:

原因:

在mapred-default.xml中,有默认参数配置了(MR AppMaster)内存为1.5G。


每一个mapreduce 会启动一个MR AppMaster进行。

2、scp这个yarn-site.xml到其他节点

cd  /root/apps/hadoop/etc/hadoop/

for i in 2 3;do scp yarn-site.xml hdp-0$i:`pwd` ;done

yarn为每一个容器分配内存和核数:

yarn为每一个container分配的最小的内存:1024

yarn.scheduler.minimum-allocation-mb  1024
最大可分配的内存为8G:
yarn.scheduler.maximum-allocation-mb  8192
最小的cores: 1个  默认的就是一个
yarn.scheduler.minimum-allocation-vcores 1 
最多可分配的cores:32个
yarn.scheduler.maximum-allocation-vcores 32


3、启动yarn集群:

主节点:#yarn-daemon.sh start resourcemanager

从节点:#yarn-daemon.sh start nodemanager

4、脚本批量启动:

在hdp-01上,修改hadoop的slaves文件,列入要启动nodemanager的机器

然后将hdp-01到所有机器的免密登陆配置好

启动yarn集群:(注:该命令应该在resourcemanager所在的机器上执行)

# start-yarn.sh

停止:# stop-yarn.sh

验证:用jps检查yarn的进程,用web浏览器查看yarn的web控制台

启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:

http://hdp-01:8088

看resource mananger是否认出了所有的node manager节点

2.  spark on yarn,yarn集群的补充配置:

补充配置一:

yarn默认情况下,只根据内存调度资源,所以sparkon yarn运行的时候,即使通过--executor-cores指定vcore个数为N,但是在yarn的资源管理页面上看到使用的vcore个数还是1. 相关配置在capacity-scheduler.xml 文件:

<property> 

<name>yarn.scheduler.capacity.resource-calculator</name> 

<!-- <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> --> 

<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> 

</property>

补充配置二:

修改所有yarn节点的yarn-site.xml,在该文件中添加如下配置

<property>

    <name>yarn.nodemanager.pmem-check-enabled</name>

    <value>false</value>

</property>

<property>

    <name>yarn.nodemanager.vmem-check-enabled</name>

    <value>false</value>

</property>

如果不配置这两个选项,在spark-on-yarn的client模式下,可能会报错,错误如下:

分析原因:内存不足,导致程序被终止。

参数说明:
yarn.nodemanager.pmem-check-enabled
是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true
yarn.nodemanager.vmem-check-enabled
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true

配置修改完成之后,把配置文件分发到各台节点上:

# cd /root/apps/hadoop/etc/hadoop

[root@hdp-01 hadoop]# for i in 2 3 ;do scp capacity-scheduler.xml yarn-site.xml hdp-0$i:`pwd`;done

至此,spark on yarn的yarn集群配置完成。(hdfs集群也配置完成是前提)

 启动hdfs和yarn集群。

3.  spark配置:

3.1.  sparkonyarn 简介:

yarn是hadoop中的一个组件,是一个统一的资源调度平台。

spark on yarn,就是把spark任务提交到yarn 集群上运行。

那么提交spark任务的地方,就是客户端。所以客户端一台即可。但需要保证客户端可以正常连接到hdfs集群和yarn集群。

3.2.  spark配置:

官方文档:

http://spark.apache.org/docs/latest/running-on-yarn.html

下载spark安装包,上传并解压到/root/apps目录下。

修改spark的配置文件,只需要修改conf目录下的spark-env.sh 配置文件即可。

在spark-env.sh中配置

export JAVA_HOME=/usr/local/jdk1.8.0_131

export HADOOP_CONF_DIR=/root/apps/hadoop/etc/hadoop

注意:该配置文件的作用,就是告知spark程序yarn在哪里。

可以使用HADOOP_CONF_DIR或者YARN_CONF_DIR,如果不配置该选项,就会报错如下:

 

再次强调:提交spark任务的地方,就是客户端,所以配置一台机器即可。

 

待HDFS和YARN正常启动后,就可以提交任务到yarn集群中。

 

以cluster模式提交任务到yarn集群:

spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /root/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 1000

 

4.  补充:hadoop集群其他配置文件:

core-site.xml文件:

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hdp-01:9000</value>

</property>

</configuration>

hdfs-site.xml文件:

<configuration>

# namenode 存储元数据的本地目录

<property>

<name>dfs.namenode.name.dir</name>

<value>/root/dfs/name</value>

</property>

# datanode  存储块数据的本地目录

<property>

<name>dfs.datanode.data.dir</name>

<value>/root/dfs/data</value>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>hdp-02:50090</value>

</property>

<property>

<name>dfs.namenode.checkpoint.dir</name>

<value>/root/dfs/namesecondary</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

</configuration>

hadoop-env.sh:

export JAVA_HOME=/usr/local/jdk


交流q:824203453   大数据人工智能交流QQ群:588946830

猜你喜欢

转载自blog.csdn.net/qq_21439395/article/details/80678372
今日推荐