最近线上的rm crash了一次,查看日志,发现有如下报错:
2015-01-05 18:00:11,523 ERROR org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler: Request for appInfo of unknown attemptappattempt_1418702129929_2281200_000001 2015-01-05 18:00:11,524 ERROR org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler: Request for appInfo of unknown attemptappattempt_1418702129929_2281200_000001 2015-01-05 18:00:11,526 ERROR org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler: Request for appInfo of unknown attemptappattempt_1418702129929_2281200_000001 2015-01-05 18:00:11,527 FATAL org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error in handling event type APP_ADDED to the scheduler org.apache.hadoop.metrics2.MetricsException: Metrics source QueueMetrics,q0=root already exists! at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.newSourceName(DefaultMetricsSystem.java:126) at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.sourceName(DefaultMetricsSystem.java:107) at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.register(MetricsSystemImpl.java:217) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueueMetrics.forQueue(FSQueueMetrics.java:94) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueue.<init>(FSQueue.java:61) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSLeafQueue.<init>(FSLeafQueue.java:59) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.QueueManager.createLeafQueue(QueueManager.java:199) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.QueueManager.getLeafQueue(QueueManager.java:144) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.addApplication(FairScheduler.java:581) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.handle(FairScheduler.java:998) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.handle(FairScheduler.java:108) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$SchedulerEventDispatcher$EventProcessor.run(ResourceManager.java:378) at java.lang.Thread.run(Thread.java:662)
这其实是yarn的一个bug,在提交的job queue为空时会触发这个bug,导致rm抛出异常而退出,
bug id:https://issues.apache.org/jira/browse/YARN-2863
可以通过如下命令重现:
yarn jar hadoop-mapreduce-examples-2.0.0-cdh4.6.0.jar pi -Dmapreduce.job.queuename= 20 10
在bug 描述中可以看到通过 设置yarn.scheduler.fair.allow-undeclared-pools为false是可以修复这个问题的,但是在cdh4.6.0中是没有这个配置的,可以通过
https://issues.apache.org/jira/browse/YARN-1213
增加一个配置。在queue为空时会使用default的queue。
这个bug在cdh5.2.0已经fix
在5.2.0的yarn中增加了下面两个如下配置
yarn.scheduler.fair.allow-undeclared-pools //是否允许有不存在的queue,默认为true yarn.scheduler.fair.user-as-default-queue //当queue不存在时,是否使用用户名来代替default,默认为true
本文出自 “菜光光的博客” 博客,请务必保留此出处http://caiguangguang.blog.51cto.com/1652935/1602231
原文地址:http://caiguangguang.blog.51cto.com/1652935/1602231