作为一款资源调度框架,Yarn 支持可插拔的调度器,常见的调度器有公平调度器 fair scheduler 和容量调度器 capacity scheduler。常见的大数据发行版中,CDH 集成的是公平调度器,CDP/HDP集成的是容量调度器。
在实际使用过程中,为充分利用资源,一般多个大数据应用会公用一个大数据集群,此时集群管理员会将YARN资源划分到若干个队列中并为不同队列配置不同的资源额度,然后不同的业务根据其业务特征和重要性,提交作业到集群管理员规定的 YARN 队列中。
笔者遇到过不少因为 YARN 集群队列资源配置不当,造成业务作业获取不到资源而执行失败的情况,所以在此跟大家分享下集群管理员配置YARN调度器时的常见注意事项。
为保证各个业务的 SLA 并兼顾集群资源的高效使用,不管使用公平调度器还是容量调度器,管理员在配置YARN调度器时,都需要遵循以下原则:
有些大数据集群的某些YARN队列具有明显的潮汐特征,即这些队列每天大部分时候都是空闲的,但在特定的时间段内,YARN 客户端会在短时间内提交大量作业申请大量容器资源,此时考虑到YARN队列的冷启动问题和YARN高并发下的性能问题,对于公平调度器,集群管理员可以调整以下参数,确保YARN队列能及时获得足够的资源:
当业务作业因为调度器资源配置不当而运行失败时,一般需要查看以下信息以分析问题:
//作业失败相关日志:
failed to create spark client for spark session xxx xx:java.util.concurrent.TimeoutException: client xx timed out waiting for connection from the remote spark driver;
//资源超限相关日志:
org.apache.hive.spark.client.sparkClientImpl: [spark-submit-stderr-redir-HiveServer2-Backgroud-pool: Thread-xxxxx]: diagnostics: xxx application is added to the scheduler and is not yet activated. (Resource request: <memory:3584,vcores:1> exceeds maximum am resource allowed).
在容量调度器下,具体的资源管控参数,重要的有以下这些:
- Min Resources:队列最小资源数;
- Max Resources:队列最大资源数;
- maxRunningApps: 队列内最大可运行作业书;
- maxAMShare: am 资源比,默认50%;
- weigh: 队列权重,调度器会基于所有队列的权重计算每个队列的 fair share 资源配额;
- schedulingPolicy: 可选 fifo/fair/drf;
##更多细节,请参考官方文档
- https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
在容量调度器下,具体的资源管控参数,重要的有以下这些:
##队列资源相关参数
- yarn.scheduler.capacity.-path>.capacity/yarn.scheduler.capacity.-path>.maximum-capacity
- yarn.scheduler.capacity.-path>.maximum-allocation-mb/yarn.scheduler.capacity.-path>.maximum-allocation-vcores
- yarn.scheduler.capacity.-path>.user-limit-factor
## am 资源限制相关参数
- yarn.scheduler.capacity.maximum-am-resource-percent/yarn.scheduler.capacity.-path>.maximum-am-resource-percent
##作业并行度相关参数
- yarn.scheduler.capacity.maximum-applications/yarn.scheduler.capacity.-path>.maximum-applications
- yarn.scheduler.capacity.max-parallel-apps/yarn.scheduler.capacity.-path>.max-parallel-apps
- yarn.scheduler.capacity.user.max-parallel-apps/yarn.scheduler.capacity.user.<username>.max-parallel-apps
##更多细节,请参考官方文档
- https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html