昨天因为datanode出现大规模离线的情况,初步判断是dfs.datanode.max.transfer.threads参数设置过小。于是将所有datanode节点的hdfs-site.xml配置文件都作了调整。重启集群后,为了验证,试着运行一个作业,在jobhistory中查看该作业的configuration,令人意外的是,显示的居然还是旧的值,也就是说,作业还是用旧的值运行的,明明所有datanode节点已经做了配置文件的更新了啊。
忽然间想起,hadoop作业的调度是由另外一台集群外的机器发起的,这台机的配置文件并没有更新。会不会是在作业发起的时候,读取的是这台客户端机器的hadoop配置呢?去更改这台客户机配置后再测试,新的作业果然使用了新配置的值了。
从这个事情上看,估计hadoop配置文件看来并不完全是由namenode、datanode等守护进程读取,有部分配置项其实是由发起作业的客户端读取,并传递到hadoop的job中并影响作业运行的。因此如果hadoop调度是由集群外机器发起,切记将发起机器的配置文件与集群配置文件保持一致,以避免各种莫名其妙的问题。
PS:以上结论只是根据实践进行的推测,后续要再根据资源查证确认。
时间: 2024-12-18 21:37:12