topology.script.file.name
HDFS不能够自动判断集群中各个datanode的网络拓扑情况。这种机架感知需要topology.script.file.name属性定义的可执行文件(或者脚本)来实现,文件提供了IP->rackid的翻译。NameNode通过这个得到集群中各个datanode机器的rackid。如果topology.script.file.name没有设定,则每个IP都会翻译成/default-rack。
下面给出了一个script文件的c语言示例。这个文件需要处理多个输入参数的情况,每个参数是个ip。文件的输出对应就是rackid串。
int main(int argc , char *argv[])
{
for(int i=1 ;i< argc; i++)
{
char* ipStr = argv[i];
// 找到ip对应的rack设置,下面的
cout<<"/rack1/"<<i<<" ";
}
cout<< endl;
}
网络拓扑