TechTalk

Hadoop机架感知功能

字数统计: 420阅读时长: 1 min
2017/09/01

机架感知功能属于Hadoop的数据存储策略功能。
由于在默认情况下Hadoop认为所有的datanode处于同一机架/default-rack中。如果Hadoop集群是跨多个机架或者多个IDC机房,那么数据访问的成本会由于过多的网络传输会增加。
当Hadoop启动机架感知功能后,Hadoop的副本会按照如下策略存放(以3副本为例):

  • 第一个副本存储在client相同的datanode上。(如果数据请求来至于集群外部,那么存储在一个低负载的一个datanode上)。
  • 第二个副本存储在与第一个副本不同的rack的datanode上。
  • 第三个副本存储在另外一个副本相同的rack的datanode上。
  • 如果还有更多的副本,那么继续从集群中随机挑选data node存储

机架感知功能需要在NameNodehadoop-site.xml中配置如下属性:

1
2
3
4
<property>
<name>topology.script.file.name</name>
<value>/path/to/script</value>
</property>

其中value指向一个脚本,该脚本的入参是某一个DataNode的ip地址,该脚本返该ip地址对应的rack名称。当namenode接收到datanode的heartbeat后会调用该脚本进行查询,然后将datanode的ip地址与rack名称保存在一个map中。
Hadoop官方已经给出了该脚本的代码,参考:https://wiki.apache.org/hadoop/topology_rack_awareness_scripts

除了调用上述的shell脚本外,也可以调用python脚本,如下:
https://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/RackAwareness.html

如果需要也可以是java程序,如果是java程序,那么需要设置net.topology.node.switch.mapping.impl属性。

CATALOG