实现hadoop中的机架感知

hadoop中声明是有机架感知的功能,能够提高hadoop的性能。平时我们使用的hadoop集群,实际上是从来没有使用上这个功能的。 hadoop中所说的
机架感知的实现实际上这样的:
hadoop启动时会检查hadoop-default.xml和hadoop-site.xml中的一个配置选项:topology.script.file.name,如果这个选项不为空,hadoop就会认
为这是一个可运行脚本,于是在每检测到一个slave连接上jobtracker时就会把这个slave的IP地址作为参数传给这个脚本,然后期待这个脚本的返回
值返回这台slave所述的rack名。而这个脚本内部具体是如何决定slave和rack的映射hadoop是不关心的。所以,哪台机器属于那个rack,其实是由写
这个脚本的人决定。
另外,和topology.script.file.name相对应的还有另外一个配置选项:topology.script.number.args,这个选项的设定了以上脚本所能接受的最大
参数个数,因为脚本被调用时会接受到不止一个参数,每个参数都是一台机器的IP地址。
实现步骤
1, 在jobtracker的hadoop-site.xml配置文件中加入一下配置选项:
<property>
<name>topology.script.file.name</name>
<value>/path/to/rackmap.sh</value>
<description> The script name that should be invoked to resolve DNS names to
NetworkTopology names. Example: the script would take host.foo.bar as an
argument, and return /rack1 as the output.
</description>
</property>


<property>
<name>topology.script.number.args</name>
<value>1000</value>
<description> The max number of args that the script configured with
topology.script.file.name should be run with. Each arg is an
IP address.
</description>
</property>
编写rackmap.sh脚本,为每一个地址输出其所属的rack

重启jobtracker

另外:也可以是python脚本

参考这里:

http://blog.csdn.net/azhao_dn/article/details/7091258

hadoop集群的机架感知功能是提高hadoop集群网络性能的重要参数,配置hadoop机架感知功能的步骤如下:

      1)修改core-site.xml文件,添加以下配置项:

[html]  view plain copy
  1. <property>  
  2.   <name>topology.script.file.name</name>  
  3.   <value>/opt/modules/hadoop/hadoop-0.20.203.0/Utility/RackAware.py</value>  
  4. </property>  

    2)编写 RackAware.py 脚本:

[python]  view plain copy
  1. #!/usr/bin/python  
  2. #-*-coding:UTF-8 -*-  
  3. import sys  
  4.   
  5. rack = {"hadoopnode-176.tj":"rack1",  
  6.         "hadoopnode-178.tj":"rack1",  
  7.         "hadoopnode-179.tj":"rack1",  
  8.         "hadoopnode-180.tj":"rack1",  
  9.         "hadoopnode-186.tj":"rack2",  
  10.         "hadoopnode-187.tj":"rack2",  
  11.         "hadoopnode-188.tj":"rack2",  
  12.         "hadoopnode-190.tj":"rack2",  
  13.         "192.168.1.15":"rack1",  
  14.         "192.168.1.17":"rack1",  
  15.         "192.168.1.18":"rack1",  
  16.         "192.168.1.19":"rack1",  
  17.         "192.168.1.25":"rack2",  
  18.         "192.168.1.26":"rack2",  
  19.         "192.168.1.27":"rack2",  
  20.         "192.168.1.29":"rack2",  
  21.         }  
  22.   
  23.   
  24. if __name__=="__main__":  
  25.     print "/" + rack.get(sys.argv[1],"rack0")  
        由于没有找到确切的文档说明 到底是主机名还是ip地址会被传入到脚本,所以在脚本中最好兼容主机名和ip地址,如果机房架构比较复杂的话,脚本可以返回如:/dc1/rack1 类似的字符串。

       3)执行命令:chmod +x RackAware.py

       4)重启namenode

            如果配置成功,namenode启动日志中会输出:

[html]  view plain copy
  1. 2011-12-21 14:28:44,495 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack1/192.168.1.15:50010  
   


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值