我已经在3个集群上设置了hadoop2.2.0。一切都很顺利。NodeManager和Datanode在每个集群中启动。但是,当我运行wordcount示例时,会发生100%映射,并给出以下异常:
map 100% reduce 0%
13/11/28 09:57:15 INFO mapreduce.Job: Task Id : attempt_1385611768688_0001_r_000000_0, Status : FAILED
Container launch failed for container_1385611768688_0001_01_000003 : org.apache.hadoop.yarn.exceptions.
YarnException: Unauthorized request to start container.
This token is expired. current time is 1385612996018 found 1385612533275
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
我已经通过互联网找到了解决方案。但我找不到。帮帮我。
当节点具有不同的时间设置时,会发生此异常。请确保所有3个节点都具有相同的时区设置,然后重新启动计算机。
这对我很有效。希望这对你也有帮助!!!!
其中一个选项是通过设置来延长容器的使用寿命
yarn.resourcemanager.rm.container-allocation.expiry-interval-ms
默认情况下为10分钟
例如
服务范围/高级
YARN-site.xml的YARN服务配置安全阀
<property>
<name>yarn.resourcemanager.rm.container-allocation.expiry-interval-ms</name>
<value>1000000</value>
</property>
除了时间设置之外,还要确保节点运行NTP或时间同步得相当好-我遇到了同样的问题,发现其中一个节点的日期设置错误。一旦我把时间间隔在几秒钟内,错误就消失了。
如果您突然看到这个错误,那么它可能是由于虚拟机的时间漂移引起的。
所有虚拟机都可能容易出现时间漂移。
如果系统时间没有同步到已知的良好时间源,那么在长时间运行的集群上,系统时间可能会漂移几分钟。因此,所有使用自己系统的集群节点时间都可能随时间的推移而偶尔漂移。
Hadoop作业最初可能会成功运行,因为漂移可能不太明显。但是,在长时间运行的集群上,如果其中一个工作进程的时间漂移太长(与主进程的时间相比),超过了10分钟的间隔,那么作业就会失败,因为AM一提交作业,在该工作进程上调度的YARN容器就会被标记为EXPIRED。
关键部分是:
"对于任何集装箱,如果相应的NM没有向RM报告容器已在配置的时间间隔内开始运行时间,默认为10分钟,容器被视为已死亡RM过期。"
您可以在这里了解更多关于YARN集装箱分配的信息:http://hortonworks.com/blog/apache-hadoop-yarn-resourcemanager/
因此,如果您在yarn-site.xml配置文件中增加yarn.resourcemanager.rm.container-allocation.expiry-interval-ms
,这些作业就会工作。
但这只是一个临时的解决办法。
为了避免实际问题,您需要使用一些同步NTP等机制。
NTP负责与全局时间服务器和主/工作节点进行时间同步。
您需要确保NTP守护程序已启动并在集群的所有节点上运行。NTP还应在集群的整个生命周期中保持"同步"(ntpstat
)。可能导致NTP不同步的一些明显问题
- 您的防火墙可能正在阻止UDP端口123
- 您可能患有AD具有与NTP冲突的不同时间同步的环境
http://support.ntp.org/bin/view/Support/TroubleshootingNTP