yarn-site.xml 基本配置参考
以下只是对yarn配置文件(yarn.site.xml)简单的一个配置
<configuration> <!-- rm失联后重新链接的时间 --> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <property> <!-- 启用RM高可用 --> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> <description>启动Yran HA模式</description> </property> <property> <!-- 指定两台RM主机名标识符 --> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> <description>resourcemanager id</description> </property> <property> <!--Ha功能,需要一组zk地址,用逗号分隔。被ZKFailoverController使用于自动失效备援failover。 --> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> <description>Zookeeper 队列</description> </property> <property> <!--开启失效转移 --> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> <description>开启 ResourceManager 故障自动切换</description> </property> <property> <!-- 指定rm1的主机名--> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> <description>rm1 的hostname</description> </property> <property> <!-- 指定rm2的主机名--> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave1</value> <description>rm2 的hostname</description> </property> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> <description>本机的rmid</description> </property> <property> <!-- RM故障自动恢复 --> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <!-- 被RM用于状态存储的ZooKeeper服务器的主机:端口号,多个ZooKeeper的话使用逗号分隔。 --> <name>yarn.resourcemanager.zk-state-store.address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <!-- 配置RM状态信息存储方式,有MemStore和ZKStore。 --> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <!--使用ZK集群保存状态信息,指定zookeeper队列 --> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>my-yarn</value> <description>集群ID</description> </property> <property> <!-- schelduler失联等待连接时间,以毫秒为单位--> <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name> <value>5000</value> </property> <description>以下开始对 rm1 进行配置,rm2 改成对应的值!!!</description> <property> <!-- 客户端通过该地址向RM提交对应用程序操作 --> <name>yarn.resourcemanager.address.rm1</name> <value>master:8032</value> </property> <property> <!--ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 --> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>master:8030</value> </property> <property> <!-- RM HTTP访问地址,查看集群信息--> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master:8088</value> </property> <property> <!-- NodeManager通过该地址交换信息 --> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>master:8031</value> </property> <property> <!--管理员通过该地址向RM发送管理命令 --> <name>yarn.resourcemanager.admin.address.rm1</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm1</name> <value>master:23142</value> </property> <property> <name>yarn.resourcemanager.address.rm2</name> <value>slave1:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>slave1:8030</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>slave1:8088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>slave1:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>slave1:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm2</name> <value>slave1:23142</value> </property> <property> <!-- 为了能够运行MapReduce程序,需要让各个NodeManager在启动时加载shuffle server,shuffle server实际上是Jetty/Netty Server,Reduce Task通过该server从各个NodeManager上远程拷贝Map Task产生的中间结果。下面增加的两个配置均用于指定shuffle serve。 --> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <!--中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载 --> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/hadoop-2.9.0/data/nm</value> </property> <property> <!-- yarn node 运行时日志存放地址,记录container日志,并非nodemanager日志存放地址 --> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/hadoop-2.9.0/log/yarn</value> </property> <property> <name>mapreduce.shuffle.port</name> <value>23080</value> </property> <property> <!-- 以轮训方式寻找活动的RM所使用的类--> <name>yarn.client.failover-proxy-provider</name> <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value> </property> <property> <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name> <value>/yarn-leader-election</value> </property> <property> <!-- 每使用一个物理cpu,可以使用的虚拟cpu的比例,默认为2--> <name>yarn.nodemanager.vcores-pcores-ratio</name> <value>1</value> </property> <property> <!-- 每单位的物理内存总量对应的虚拟内存量,默认是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。--> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>5.2</value> </property> <!-- (2)yarn.nodemanager.vmem-pmem-ratio 任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1 (3) yarn.nodemanager.pmem-check-enabled 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。 (4) yarn.nodemanager.vmem-check-enabled 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <property> <!-- 表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数 --> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</value> </property> <property> <!-- 表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节>点的物理内存总量。 --> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> <property> <!-- 单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数 --> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <!-- 单个任务可申请的最多物理内存量,默认是8192(MB)。 默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制 --> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1024</value> </property> </configuration>
补充:
1、yarn监控nodemanager的运行状况
Hadoop提供了一种机制,管理员可以通过该机制定期运行管理员提供的脚本以确定节点是否健康。
管理员可以通过在脚本中执行对其选择的任何检查来确定节点是否处于正常状态。如果脚本检测到节点处于不健康状态,则必须以字符串ERROR开头的标准输出行。NodeManager定期生成脚本并检查其输出。如果脚本的输出包含字符串ERROR,如上所述,节点的状态将报告为运行状况不佳并且ResourceManager将节点列入黑名单。不会为此节点分配其他任务。但是,NodeManager继续运行脚本,因此如果节点再次变得健康,它将自动从ResourceManager上的黑名单节点中删除。如果节点不健康,则可以在ResourceManager Web界面中为管理员提供节点的运行状况以及脚本的输出。自节点健康以来的时间也显示在Web界面上。
以下参数在yarn.site.xml配置
参数 | 值 | 说明 |
---|---|---|
yarn.nodemanager.health-checker.script.path | 节点健康脚本 | 用于检查节点健康状况的脚本。 |
yarn.nodemanager.health-checker.script.opts | 节点健康脚本选项 | 用于检查节点健康状态的脚本选项。 |
yarn.nodemanager.health-checker.interval-ms | 节点健康脚本间隔 | 运行健康脚本的时间间隔。 |
yarn.nodemanager.health-checker.script.timeout-ms | 节点运行状况超时间隔 | 健康脚本执行超时。 |
如果只有部分本地磁盘变坏,则运行状况检查程序脚本不应该给出错误。NodeManager能够定期检查本地磁盘的运行状况(具体检查nodemanager-local-dirs和nodemanager-log-dirs),并在达到配置属性yarn.nodemanager.disk-health-checker.min-healthy-disks设置的错误目录数阈值,整个节点被标记为运行状况不佳,此信息也会发送给资源管理器。引导磁盘被突袭或健康检查程序脚本识别引导磁盘中的故障。
记录学习和生活的酸甜苦辣.....哈哈哈