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. rack = {"hadoopnode-176.tj":"rack1",
  5. "hadoopnode-178.tj":"rack1",
  6. "hadoopnode-179.tj":"rack1",
  7. "hadoopnode-180.tj":"rack1",
  8. "hadoopnode-186.tj":"rack2",
  9. "hadoopnode-187.tj":"rack2",
  10. "hadoopnode-188.tj":"rack2",
  11. "hadoopnode-190.tj":"rack2",
  12. "192.168.1.15":"rack1",
  13. "192.168.1.17":"rack1",
  14. "192.168.1.18":"rack1",
  15. "192.168.1.19":"rack1",
  16. "192.168.1.25":"rack2",
  17. "192.168.1.26":"rack2",
  18. "192.168.1.27":"rack2",
  19. "192.168.1.29":"rack2",
  20. }
  21. if __name__=="__main__":
  22. 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

实现hadoop中的机架感知的更多相关文章

  1. Hadoop基础-网络拓扑机架感知及其实现

    Hadoop基础-网络拓扑机架感知及其实现 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网络拓扑结构 在本地网络中,两个节点被称为“彼此近邻”是什么意思?在海量数据处理中,其 ...

  2. hadoop(三):hdfs 机架感知

    client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响.一个简单但非优化的副本放置策略是,把副本分别放在不同机架 ...

  3. Hadoop--Hadoop的机架感知

    Hadoop的机架感知 Hadoop有一个“机架感知”特性.管理员可以手工定义每个slave数据节点的机架号.为什么要做这么麻烦的事情?有两个原因:防止数据丢失和提高网络性能.     为了防止数据丢 ...

  4. hadoop配置机架感知

    接着上一篇来说.上篇说了hadoop网络拓扑的构成及其相应的网络位置转换方式,本篇主要讲通过两种方式来配置机架感知.一种是通过配置一个脚本来进行映射:另一种是通过实现DNSToSwitchMappin ...

  5. 【转载】Hadoop机架感知

    转载自http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843015.html 背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机 ...

  6. hadoop机架感知

    背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.机架内的机器之间的网络速度通常都会高于跨机架 ...

  7. 【原创】Hadoop机架感知对性能调优的理解

    Hadoop作为大数据处理的典型平台,在海量数据处理过程中,其主要限制因素是节点之间的数据传输速率.因为集群的带宽有限,而有限的带宽资源却承担着大量的刚性带宽需求,例如Shuffle阶段的数据传输不可 ...

  8. ZooKeeper学习之路 (十)Hadoop的HA集群的机架感知

    一.背景 Hadoop 的设计目的:解决海量大文件的处理问题,主要指大数据的存储和计算问题,其中, HDFS 解决数据的存储问题:MapReduce 解决数据的计算问题 Hadoop 的设计考虑:设计 ...

  9. hadoop之 hadoop 机架感知

    1.背景 Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份.这样如果本地数据损坏,节点可以从同一机 ...

随机推荐

  1. 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点

    题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...

  2. 0425 os模块 ,模块和包

    os模块 *os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd o ...

  3. <再看TCP/IP第一卷>关于网络层及协议细节---ICMP协议几个要注意的地方

    在TCP/IP协议族中,ICMP协议是一个介于网络层和传输层中间的一个协议,许多材料都会认为ICMP是网络层的一个部分,但是ICMP协议的报头是被包裹在IP协议之中的,而UDP协议又可以被ICMP协议 ...

  4. Docker学习(二)

    docker run ubuntu /bin/echo 'Hello world' docker run -t -i ubuntu /bin/bash docker run  命令运行一个容器 -t ...

  5. kmplayer音轨切换(换配音)

    ZZ:kmplayer怎么换音轨 kmplayer音轨切换方法 - 当下软件园.html(http://www.downxia.com/zixun/4425.html) kmplayer怎么换音轨 1 ...

  6. linux学习-文件打包与压缩

  7. js文件报错Syntax error on token "Invalid Regular Expression Options", no accurate correction

    Syntax error on token "Invalid Regular Expression Options", no accurate correction 1.选中报错的 ...

  8. java:Map借口及其子类HashMap五,identityHashMap子类

    java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...

  9. 分享知识-快乐自己:Liunx 安装 Zookeeper

    Zookeeper可以安装在windows中也可以安装在linux中! 但是我们的服务器基本都是在linux之上 安装我们的 zookeeper 注册中心! 安装成功之后  修改 nat 模式对应的端 ...

  10. gcc 4.8.5安装

    在利用张乐博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)和条件随机场的经典工具包CRF++(CRF++: Yet An ...