配置Hadoop的机架感知

原地址: http://datasearch.ruc.edu.cn/~boliangfeng/blog/?p=525

我们都知道Hadoop的拓扑结构是机架感知的,这样在分配、请求数据副本时,可以根据机架感知的拓扑结构取得选取节点进行操作的权重(参考Hadoop拓扑结构中关于距离的定义)。

事实上默认Hadoop是没有机架感知的,要想使用它,需要我们额外的配置,配置过程如下:

首先修改namenode所在机器的Hadoop-site.xml配置文件中配置一个选项:

<property>

<name>topology.script.file.name</name>

<value>/path/to/script</value>

</property>

这样在启动Namenode时便会检查topology.script.file.name属性值,为空则不执行,若不为空则执行属性值所指定的脚本文件。

脚本文件的作用是,什么呢?

当datanode 向namenode发出heartbeat时,namenode会将每个datanode的IP映射到不同的Rack中。具体过程如下:namenode在每检测到一个slave 连接上jobtracker时就会把这个slave的IP地址作为参数传给这个脚本,然后期待这个脚本的返回值返回这台slave所述的rack名。而这 个脚本内部具体是如何决定slave和rack的映射hadoop是不关心的。所以,哪台机器属于那个rack,其实是由写这个脚本的人决定。

另外,和topology.script.file.name相对应的还有另外一个配置选 项:topology.script.number.args,这个选项的设定了以上脚本所能接受的最大参数个数,因为脚本被调用时会接受到不止一个参 数,每个参数都是一台机器的IP地址。

一个脚本文件的例子:

#!/usr/bin/perl -w
use strict;
my $ip = $ARGV[0];
my $rack_num = 2;
#将dn的ip通过.分隔
my @ip_items = split /\./, $ip;
my $ip_count = 0;
#for循环读出IP中分裂出来的值相加
foreach my $i (@ip_items)
$ip_count += $i;
}
my $rack = “/rack”.($ip_count % $rack_num);
print “$rack”;

个脚本你可以直接运行进行手动测试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值