yarn - yaokun123/php-wiki GitHub Wiki
-
于2012年引入的组件,用于管理集群中的计算资源并在这些资源上调度用户应用
-
Apache Hadoop YARN 是开源 Hadoop 分布式处理框架中的资源管理和作业调度技术。作为 Apache Hadoop 的核心组件之一,YARN 负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。
1、cli(切片清单/配置/jar/上传到hdfs)访问ResourceManager申请ApplicationMaster
2、ResourceManager选择一台不忙的节点通知NodeManager启动一个Container,在里面反射一个ApplicationMaster
3、启动ApplicationMaster,从hdfs下载切片清单,向ResourceManager申请资源
4、由ResourceManager根据自己掌握的资源情况得到一个确定清单,通知NodeManager启动Container
5、Container启动后会反向注册到已启动的ApplicationMaster
6、ApplicationMaster(曾经的JobTracker阉割版不带资源管理)最终将任务Task发送给Container(消息)
7、Container从hdfs下载jar/配置 反射相应的Task类为对象,调用方法执行,其结果就是我们的业务逻辑代码的执行
8、计算框架都有Task失败重试机制
1、处理客户端请求
2、监控NodeManager
3、启动或者监控ApplicationMaster
4、资源的分配与调度
1、管理单个节点上的资源
2、处理来自ResourceManager的命令
3、处理来自ApplicationMaster的命令
1、负责数据的切分
2、为应用程序申请资源并分配给内部的任务
3、任务的监控与容错
Container是Yarn中的资源抽象,它封装了某个节点上的多维度资源,包括:内存、CPU、磁盘、网络等。
hadoop | 1.x | 2.x | 3.x |
---|---|---|---|
hdfs | no ha | ha(向前兼容,没有过多的改NameNode,而是通过新增了角色zkfc) | |
yarn | no yarn | 不是新增角色,而是直接在RM进程中增加了HA模块 |
在Hadoop每台节点上$HADOOP_HOME/etc/hadoop下配置mapred-site.xml配置文件,让MapReduce任务运行时使用Yarn资源调度框架进行调度
// mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
在Hadoop每台节点$HADOOP_HOME/etc/hadoop/yarn-site.xml中配置yarn-site.xml配置文件
// yarn-site.xml
<!-- 让yarn的容器支持mapreduce的洗牌,开启shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 启用resourcemanager的HA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定zookeeper集群的各个节点地址和端口号 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mynode3:2181,mynode4:2181,mynode5:2181</value>
</property>
<!-- 标识集群,以确保 RM 不会接管另一个集群的活动。 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</value>
</property>
<!-- RM HA的两个resourcemanager的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定rm1的reourcemanager进程所在的主机名称 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>mynode1</value>
</property>
<!-- 指定rm2的reourcemanager进程所在的主机名称 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mynode2</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>
/software/hadoop-3.1.4/etc/*,
/software/hadoop-3.1.4/etc/hadoop/*,
/software/hadoop-3.1.4/lib/*,
/software/hadoop-3.1.4/share/hadoop/common/*,
/software/hadoop-3.1.4/share/hadoop/common/lib/*,
/software/hadoop-3.1.4/share/hadoop/mapreduce/*,
/software/hadoop-3.1.4/share/hadoop/mapreduce/lib/*,
/software/hadoop-3.1.4/share/hadoop/hdfs/*,
/software/hadoop-3.1.4/share/hadoop/hdfs/lib/*,
/software/hadoop-3.1.4/share/hadoop/yarn/*,
/software/hadoop-3.1.4/share/hadoop/yarn/lib/*
</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>mynode1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>mynode2:8088</value>
</property>
注意:workers可以不用管,搭建hdfs的时候已经改过了。NodeManager和DataNode是一一对应的。
配置start-yarn.sh&stop-yarn.sh脚本
在$HADOOP/sbin目录下,在start-yarn.sh和stop-yarn.sh脚本中加入以下两行配置,指定操作Yarn的用户,配置完成之后,我们也同步到其他Hadoop节点上。
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
首先启动zookeeper,HDFS,然后启动Yarn,命令如下:
start-yarn.sh
// 如果在ResourceManager有没启动的,需要手动启动
yarn-daemon.sh start resourcemanager
webapp
随后可以使用mynode1:8088/mynode2:8088在web网页上查看资源管理的状态。
访问standby的会自动重定向到active。
Memory Total 和 VCores Total 默认是按照一台机器8核8G来算的,需要修改配置。
1、yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
2、yarn.nodemanager.vmem-pmem-ratio
任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1。
3、yarn.nodemanager.pmem-check-enabled
是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
4、yarn.nodemanager.vmem-check-enabled
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
5、yarn.scheduler.minimum-allocation-mb
单个container可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。
6、yarn.scheduler.maximum-allocation-mb
单个container可申请的最多物理内存量,默认是8192(MB)。
7、yarn.nodemanager.resource.cpu-vcores
表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。
如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。
8、yarn.scheduler.minimum-allocation-vcores
单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
9、yarn.scheduler.maximum-allocation-vcores
单个任务可申请的最多虚拟CPU个数,默认是32。