Hadoop提供了机架(rack)的概念,Hadoop集群上面的一个node属于哪一个rack,rack信息由网络管理员配置。Hadoop提供机架感知的功能来获取管理员配置的机架和节点的信息。
https://blog.csdn.net/xhh198781/article/details/7162270这篇文章讲的很清楚了,不多说了。
一个Windows下直接运行的栗子
java代码
public class TestRack {
public static void main(String[] args){
YarnConfiguration conf = new YarnConfiguration();
ScriptBasedMapping sbp = new ScriptBasedMapping();
sbp.setConf(conf);
List<String> ips = new ArrayList<String>();
ips.add("127.0.0.1");
ips.add("127.0.0.2");
ips.add("127.0.0.3");
ips.add("127.0.0.4");
// 我自己提供的1.bat一次只能解析一个IP,这里一个IP一个IP进行解析
// 生产提供的脚本一次会解析过个IP,最大参数个数由maxArgs限制
// maxArgs由配置项`net.topology.script.number.args`在core-site中进行配置,默认值是100
for(String ip: ips){
List <String> tmpList = new ArrayList<String>(1);
tmpList.add(ip);
System.out.println(sbp.resolve(tmpList));
}
}
}
core-site.xml
<configuration>
<property>
<name>topology.script.file.name</name>
<value>/C:\Users\64371\Desktop\yarn\1.bat</value>
<description>可执行文件ipresolve的绝对路径</description>
</property>
</configuration>
可执行脚本
@echo off
echo /rack/rack%1%