zoukankan      html  css  js  c++  java
  • 实现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 plaincopy
    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 plaincopy
    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 plaincopy
    1. 2011-12-21 14:28:44,495 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack1/192.168.1.15:50010  
       


  • 相关阅读:
    Domain Model
    linux 后台运行命令
    morphia(3)-查询
    [八省联考2018] 劈配
    [BZOJ 3218] a+b Problem
    [学习笔记] KM算法
    [HNOI2013] 消毒
    [HNOI2014] 画框
    [HDU 6057] Kanade's convolution
    [模板] 任意模数多项式乘法
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751544.html
Copyright © 2011-2022 走看看