YARN性能调优 本章节介绍YARN性能调优建议。 YARN动态心跳 NodeManager采用固定频率心跳(默认1秒)向ResourceManager汇报状态。Yarn引入了动态心跳机制,NodeManager上报自身负载情况,由ResourceManager自动调节心跳发送间隔,通知NodeManager下次心跳时间。核心目标是考虑NodeManager负载情况,调节Container在NodeManager间的分配速度。 计算规则 增加基于NodeManager节点 CPU 利用率与集群整体 CPU 利用率对比,动态调整 ResourceManager和NodeManager心跳间隔的能力。 若某个NodeManager节点的利用率高于集群其他节点,则延长其心跳间隔。 若NodeManager节点利用率低于集群其他节点,则缩短其心跳间隔。 配置动态心跳 调整yarnsite.xml中配置参数: 配置参考 配置参数 参考值 描述 yarn.resourcemanager.nodemanagers.heartbeatintervalscalingenable true 动态心跳总开关,是否允许ResourceManager基于集群节点负载自动调整所有NodeManager的心跳间隔。 yarn.resourcemanager.nodemanagers.heartbeatintervalminms 500 设置动态心跳的最小间隔,单位毫秒。 yarn.resourcemanager.nodemanagers.heartbeatintervalmaxms 2000 设置动态心跳的最大间隔,单位毫秒。 修改配置参数后,需要重启ResourceManager实例。 Timeline 数据存储调优 yarn.timelineservice.storeclass配置YARN Timeline Service (YARN时间线服务) 中的存储实现,用于保存应用运行历史信息。LeveldbTimelineStore 和RollingLevelDBTimelineStore是其两种实现: LeveldbTimelineStore:使用一个固定的LevelDB数据库文件存储所有数据,但是数据量大时性能下降。 RollingLevelDBTimelineStore:将数据按时间窗口分成多个LevelDB数据库,分片后性能更稳定。 配置参考 配置参数 参考值 描述 yarn.timelineservice.storeclass org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore 默认org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore,数据库膨胀后性能下降,不适合生产大规模集群;org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore将数据按时间窗口分成多个LevelDB数据库,通过滚动机制控制存储总量,超过保留期限的数据库会被自动删除。 yarn.timelineservice.rollingperiod hourly RollingLevelDBTimelineStore数据库滚动的时间窗口,有效值 daily, halfdaily, quarterdaily, hourly, minutely。 yarn.timelineservice.leveldbtimelinestore.ttlintervalms 3600000 设置检查数据库过期的频率,单位毫秒。 yarn.timelineservice.ttlms 604800000 Timeline存储的数据的存活时间,单位毫秒。 修改配置参数后,需要重启TimelineServer实例。