阅读 157

记一Hive执行Job挂起(Accepted状态)的异常处理

问题

  1. 出现Hive执行select count(*) from ……语句时,任务长时间不运行
  2. 在Yarn界面观察任务状态一直是Accepted状态
  3. Hive使用tez引擎启动时挂起,使用beeline连接后执行count报错
  4. 此时集群还有很多内存和CPU资源空闲!

定位

查看Yarn UI界面的日志,有如下提示:

Diagnostics:Application is added to the scheduler and is not yet activated. 
Queue's AM resource limit exceeded. Details : AM Partition = <DEFAULT_PARTITION>; 
AM Resource Request = <memory:9216MB(9G), vCores:1>; 
Queue Resource Limit for AM = <memory:454656MB(444G), vCores:1>; 
User AM Resource Limit of the queue = <memory:229376MB(224G), vCores:1>; 
Queue AM Resource Usage = <memory:221184MB(216G), vCores:24>;
复制代码

说明任务被提交到调度器,但ApplicationMaster申请的资源超过了上限,剩余可用资源不足以启动AM,因此程序处于挂起状态,不能运行。

  • 触发资源上限的可能是内存,或虚拟核数(vCores)以及二者均有,分析时可注意甄别。

解决方案

调大AM资源百分比

maximum-am-resource-percent:集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,我这默认是20%。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置,而单个队列可通过参数yarn.scheduler.capacity.. maximum-am-resource-percent设置适合自己的值。一般不要超过50%。

如果是HDP用户

使用Ambari修改 Maximum AM Resource

结语

这个问题不常遇到,一般只有在Yarn正在运行很多任务时出现,记录在此。但导致Yarn任务挂起,一直Accepted状态的原因不一定是这个。

为使本问题容更容易被搜索到,以上内容涉及:

  • Application Master申请不到资源

  • 提交了Yarn任务之后没有分配资源

  • Queue AM Resource Usage,Queue's AM resource limit exceeded.

  • 修改集群用于运行应用程序ApplicationMaster的资源比例上限

  • yarn.scheduler.capacity.maximum-am-resource-percent调整

  • 任务处于 Accepted 状态,但集群还有可用资源

    周末愉快~
    复制代码
关注下面的标签,发现更多相似文章
评论