1 什么是yarn Yarn是Hadoop2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster,其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。
Yarn主要由ResouceManager,NodeManager,ApplicationMaster,Container等几个组件构成。
Yarn总体上还是master/slave架构,ResourceManager是master,NodeManager是slave。ResourceManager负责对各个NodeManager上的资源进行统一的调度和管理。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个应用程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManager启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此,他们之间不会互相影响。
YARN作为一个资源调度器,应该考虑到集群里面每一台机子的计算资源,然后根据application申请的资源进行分配Container。Container是YARN里面资源分配的基本单位,具有一定的内存以及CPU资源,是资源的抽象。
在YARN集群中,平衡内存、CPU、磁盘的资源的很重要的,根据经验,每两个container使用一块磁盘以及一个CPU核的时候可以使集群的资源得到一个比较好的利用。
生产推荐
a 内存配置
举例说明 如一台机器的内存为48G,那么 25%留给Linux及其它程序 12G 75%给大数据进程 36G -> datanode: 4G (修改文件 hadoop-env.sh,添加
export HADOOP_DATANODE_OPTS="-Xms4096m -Xmx4096m $HADOOP_DATANODE_OPTS"Xms是最小内存 Xmx是最大内存 设置好后,重启生效 )
nodemanager: 2G (修改文件yarn_env.sh,添加
YARN_OPTS="$YARN_OPTS -Xms2048m -Xmx2048m"重启生效)
正常情况下,计算nodemanager与存储datanode都是部署在同一个节点上。数据本地化。不用走网络拉数据。
一共还剩下30G是给容器的 内存参数配置: yarn.nodemanager.resource.memory-mb 30G yarn.scheduler.minimum-allocation-mb (容器 最小) 2G yarn.scheduler.maximum-allocation-mb (容器 最大) 30G
限制容器参数,如果超出则杀死进程
yarn.nodemanager.pmem-check-enabled true yarn.nodemanager.vmem-check-enabled true
pmem:物理内存 vmem:虚拟内存 默认是true
yarn.nodemanager.vmem-pmem-ratio 2.1
物理内存:虚拟内存 = 2.1
b CPU配置 yarn上面有个vcore的概念,这是虚拟core,是yarn引入的新概念,这是考虑到不同机器的CPU的计算能力不同。一般在spark中使用。 正常情况下 1 core : 2 vcore 举例: 如果有8个core ————》 16个vcore 那么我们预留2core ----> 4vcore 剩下的6core ---->12vcore给yarn 那么参数配置为 yarn.nodemanager.resource.cpu-vcores 12 yarn.scheduler.minimum-allocation-vcores 1 yarn.scheduler.maximum-allocation-vcores 12
更详细的参数调优请参考: http://blog.itpub.net/30089851/viewspace-2127851/