本文主要是介绍hadoop 配置 机架感知 rack awareness,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Rack awareness 机架感知
1、什么是机架感知,hadoop的策略是什么
这是Hadoop的机架感知机制。
机架感知(RackAwareness)
通常,大型Hadoop集群会分布在很多机架上。在这种情况下,
-- 希望不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架。
-- 为了提高容错能力,名称节点会尽可能把数据块的副本放到多个机架上。
综合考虑这两点的基础上Hadoop设计了机架感知功能。
机架感知设计思想
首先,一个重要的假设前提是HDFS运行于一个具有树状网络拓扑结构的集群上。
例如集群由多个数据中心组成,每个数据中心里有多个机架,而每个机架上有多台计算机(数据节点)
网络拓扑(NetworkTopology)
在Hadoop里,以类似于一种文件目录结构的方式来表示节点。
例如,R1的位置可以表示为 /D1/R1,而H12的位置可以表示为 /D2/R4/H12。
当数据节点启动的时候,需要通过一种机制来明确它在集群中的位置,才能构建完整的网络拓扑图。
因此,首先它需要确认它的上级节点(通常也就是机架)的位置。数据节点程序支持选项”-p<id>”或”-parent<id>”从命令行读入上级节点位置。
如果没有指定这个选项,那么会使用一个默认的上级节点。
至于如何获取上级节点信息,由实施Hadoop的机构自行决定。一个常用的做法是使用脚本打印当前机器的上级节点信息到标准输出stdout。
这样数据节点启动的时候就可以获取到上级节点的信息(Hadoop应该是通过接口’DNSToSwitchMapping’来解析这个信息,具体请参考手册的Class说明)。
数据节点会把它的位置信息发给名称节点。
当名称节点收到数据节点的位置信息以后,它会先检查网络拓扑中是否已经有这个数据节点的记录。
如果有,它会把旧的记录删除,加入新的节点位置信息。
副本放置(ReplicaPlacement)
数据块的副本放置策略的目的是在以下两者之间取得平衡:
-- 使数据的可靠性和可用性最大化
-- 使写入数据产生的开销最小化
因此,当一个新的数据块被创建的时候,遵循以下规则:
-- 第1个副本放置于本地节点
-- 第2个副本放置于不同的机架
-- 第3个副本放置于本地机架的不同节点
-- 其余的副本在遵循以下限制的前提下随机放置
-- 1个节点最多放置1个副本
-- 如果副本数少于2倍机架数,不可以在同一机架放置超过2个副本
当重新复制一个数据块的时候,遵循以下规则:
-- 如果已有1个副本,把第2个副本放置在不同的机架
-- 如果已有2个副本且处于同一机架,把第3个副本放置在不同的机架
-- 如果已有2个副本但不处于同一机架,把第3个副本放置在和第1个副本相同的机架
-- 当可用副本数超过2个的时候,随机放置
当发生数据读取的时候,名称节点首先检查客户端是否位于集群中。
如果是的话,就可以按照由近到远的优先次序决定由哪个数据节点向客户端发送它需要的数据块。
也就是说,对于拥有同一数据块副本的节点来说,在网络拓扑中距离客户端近的节点会优先响应2、编辑hadoop的配置文件 core-site.xml
<property><name>net.topology.script.file.name</name>
<value>/home/hadoop/hadoop-2.7.1/rack.py</value>
</property>
其中rack.py可以采有其它编程语言,例如shell,c等,路径也可改变,但要注意权限问题
3、在指定目录下编辑rack.py
#!/usr/bin/python
import sys
if sys.argv[1]=="192.168.137.13":
print "/hadoop-rackA"
elif sys.argv[1]=="192.168.137.14":
print "/hadoop-rackB"
elif sys.argv[1]=="192.168.137.15":
print "/hadoop-rackB"
else:
print "/default-rack"
保存后,加上执行权限
4、测试
stop-dfs.sh
start-dfs.sh
hdfs dfsadmin -printTopology
[hadoop@hadoop-namenode hadoop]$ hdfs dfsadmin -printTopology
Rack: /hadoop-rackA
192.168.137.13:50010 (hadoop-datanode1)
Rack: /hadoop-rackB
192.168.137.14:50010 (hadoop-datanode2)
192.168.137.15:50010 (hadoop-datanode3)
这篇关于hadoop 配置 机架感知 rack awareness的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!