NodeManager
NodeManager会执行健康检查,可以是检查磁盘或者任意用户指定的检查脚本,如果检查失败,则标记此节点为unhealthy并且报告给ResourceManager,然后停止分配容器到此节点。
磁盘检查
磁盘检查两个目录(local-dirs和log-dirs)分别由yarn.nodemanager.local-dirs和yarn.nodemanager.log-dirs指定,检查包括权限和磁盘空间剩余量。同时检查文件系统不是只读状态。默认检查间隔时间为2Min,如果磁盘检查失败,NodeManager停止使用那部分磁盘,仍旧报告节点状态为healthy。如果许多磁盘检查失败,检查的磁盘数量可以配置,则报告节点状态为unhealthy,并且新的容器不会被调度到这个节点上。
下面的配置参数可以用于修改磁盘检查:
yarn.nodemanager.disk-health-checker.enable:是否开启磁盘健康检查。
yarn.nodemanager.disk-health-checker.interval-ms:磁盘检查间隔。
yarn.nodemanager.disk-health-checker.min-healthy-disks:浮点数,0-1之间,默认为0.25,必须通过多少检查,才认为是healthy
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage:浮点数,0-100之间,默认值为90,磁盘被标记为unhealthy之前的最大使用率。
yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb:默认值为0。
扩展检查脚本
用户可以指定自己的健康检查脚本,它会被健康检查服务调起。用户也可以指定一个超时时间。如果脚本以非0码退出,超时,或者结果抛出异常,则节点被标记为unhealthy。如果因为权限或者不正确的路径,脚本不能执行,它会被标记为失败。指定健康检查脚本是必须的。如果没有健康检查脚本,则只有磁盘检查,确定节点的状态。
可以通过下面的参数配置健康检查。
yarn.nodemanager.health-checker.interval-ms:检查间隔,单位为毫秒,默认值为10min
yarn.nodemanager.health-checker.script-timeout-ms:健康检查脚本的超时时间,默认为20min
yarn.nodemanager.health-checker.script.path:脚本路径
yarn.nodemanager.health-checker.script.opts:脚本选项。
NodeManager Restart
在不丢失已经运行的激活的容器重启NodeManager。默认,NM存储必要的state在一个local state-store。当NM重启时,它会加载这些文件,然后进行恢复。
Step 1.开启NM Restart 功能:
yarn.nodemanager.recovery.enabled
Step 2.配置NM存储状态文件的本地目录
yarn.nodemanager.recovery.dir:默认值为$hadoop.tmp.dir/yarn-nm-recovery
Step 3.配置一个对于NodeManager合法的RPC地址
yarn.nodemanager.address:
Step 4. Auxilliary services
在YARN集群中,NodeManager可以被配置为运行auxilliary services,对于一个完整功能的NM restart,YARN依赖任何辅助服务支持恢复。
一个简单的例子是ShuffleHandler for MapReduce。
Auxiliary Service Classpath Isolation
如果需要运行辅助服务,系统管理员需要把jar包直接放置到NodeManager的类路径。如果存在多版本,则无法控制哪个版本会被加载。如果辅助服务和节点管理器存在依赖冲突,则会使辅助服务和节点管理器同时崩溃。为了解决这个问题,我们可以设置辅助服务使用单独的类路径。
在yarn-site.xml中配置下列选项。
yarn.nodemanager.aux-services.%s.classpath:指定本地jar和依赖jar的目录
yarn.nodemanager.aux-services.%s.remote-classpath:指定远程jar和依赖jar的目录
yarn.nodemanager.aux-service.%s.system-classes:
配置案例:
yarn.nodemanager.aux-services
mapreduce_shuffle,CustomAuxService
yarn.nodemanager.aux-services.CustomAuxService.classpath
${local_dir_to_jar}/CustomAuxService.jar
yarn.nodemanager.aux-services.CustomAuxService.class
org.aux.CustomAuxService
yarn.nodemanager.aux-services.mapreduce_shuffle.class
org.apache.hadoop.mapred.ShuffleHandler