现象:集群使用ambari管理,需要配置机架感知。检查了配置拓扑相关的配置项,完全OK。开开心心把自己生成的topology_mappings.data文件上传到hdp的hadoop配置目录下,然后重启Standby节点,陷入等待成功的喜悦之中。But,However,What F**k?上传的文件被新的内容覆盖掉了,都变成了/default机架。重试了很多次之后还是这样。陷入苦恼,网上搜解决办法,发现似乎没人遇到这种问题。准备自己Fuck这个问题。
首先说结论:
你先找到topology_mapping.data.j2这个模板文件的位置。然后修改这个模板文件里面的内容为你的机架拓扑。比如,在我的机器上,这个文件的位置在:
/var/lib/ambari-agent/cache/stack-hooks/before-START/templates/topology_mappings.data.j2
把里面的除了开头的注释和第一行的[network_topology]之外的内容删除,把机架拓扑复制到这个文件。然后重启Namenode就OK了。
如果帮到你了,真的不用太感谢我,谁让我就是这么乐于助人呢。
排坑过程:
决定自己resolve 这个问题后,首先看了ambari在restart namenode时的日志:
把这个日志复制到本地之后,搜索关键词 topo*, 抓到以下关键内容:
发现了模板Template('topology_mappings.data.j2')。怀疑是ambari根据这个文件生成topology_mapping.data文件。到ambari源码中搜索这个文件,内容如下:
mapping.data文件就是由这个模板生成。于是我们去机器上把这个模板文件改掉即可。改成我们生成的topo文件