hadoop中的机架感知(Rack aware)

来源:互联网 发布:国际聊天软件 编辑:程序博客网 时间:2024/05/17 12:49

原理

hadoop中声明是有机架感知的功能,能够提高hadoop的性能。

  • hadoop启动时会检查core-site.xml中的一个配置选项:topology.script.file.name,如果这个选项不为空,hadoop就会认为这是一个可运行脚本,于是在每检测到一个slave连接上jobtracker或者namenode时就会把这个slave的hosts或者IP地址作为参数传给这个脚本,然后期待这个脚本的返回值返回这台slave所述的rack名。而这个脚本内部具体是如何决定slave和rack的映射hadoop是不关心的。所以,哪台机器属于那个rack,其实是由写这个脚本的人决定。如果topology.script.file.name没有设定,则每个hosts和IP都会翻译成/default-rack。

实现步骤

  • 在core-site.xml配置文件中加入一下配置选项:
   <property>       <name>topology.script.file.name</name>       <value>/opt/sohuhadoop/conf/rack.sh</value>   </property>
  • 编写rack.sh脚本,为每一个地址输出其所属的rack,由于jobtracker只识别hosts,而namenode只识别IP,所以在配置机架信息时,hosts和IP都得配置

    rack.sh代码如下:

    #!/bin/bash

    HADOOP_CONF=/opt/sohuhadoop/conf

    while [ $# -gt 0 ] ; do
    nodeArg=$1
    exec< ${HADOOP_CONF}/topology.data 
    result="" 
    while read line ; do
    ar=( $line ) 
    if [ "${ar[0]}" = "$nodeArg" ] || [ "${ar[1]}" = "$nodeArg" ]; then
    result="${ar[2]}"
    fi
    done 
    shift 
    if [ -z "$result" ] ; then
    echo -n "/default/rack "
    else
    #echo -n "$result "
    echo "$result "
    fi
    done

    topology.data机架信息如下(只列出部分):

    10.10.69.167 zw-hadoop-slave-69-167. /rack/ZWB1
    10.10.69.168 zw-hadoop-slave-69-168. /rack/ZWB1
    10.10.69.169 zw-hadoop-slave-69-169. /rack/ZWB1
    10.10.69.170 zw-hadoop-slave-69-170. /rack/ZWB3
    10.10.69.171 zw-hadoop-slave-69-171. /rack/ZWB3
    10.10.69.172 zw-hadoop-slave-69-172. /rack/ZWB4
    10.10.69.173 zw-hadoop-slave-69-173. /rack/ZWB4
    10.10.69.174 zw-hadoop-slave-69-174. /rack/ZWB4
    10.10.69.175 zw-hadoop-slave-69-175. /rack/ZWB4
    10.10.69.176 zw-hadoop-slave-69-176. /rack/ZWB4
    10.10.69.177 zw-hadoop-slave-69-177. /rack/ZWB6
  • 重启jobtracker和namenode

  网络拓扑

  

有了机架感知,NameNode就可以画出上图所示的datanode网络拓扑图。D1,R1都是交换机,最底层是datanode。则H1的rackid=/D1/R1/H1,H1的parent是R1,R1的是D1。这些rackid信息可以通过topology.script.file.name配置。有了这些rackid信息就可以计算出任意两台datanode之间的距离。

distance(/D1/R1/H1,/D1/R1/H1)=0  相同的datanode

distance(/D1/R1/H1,/D1/R1/H2)=2  同一rack下的不同datanode

distance(/D1/R1/H1,/D1/R1/H4)=4  同一IDC下的不同datanode

distance(/D1/R1/H1,/D2/R3/H7)=6  不同IDC下的datanode

 

副本放置策略

第一个block副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的,当然系统会尝试不选择哪些太满或者太忙的node)。

第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。 

第三个副本和第二个在同一个机架,随机放在不同的node中。

如果还有更多的副本就随机放在集群的node里。

 

Hadoop的副本放置策略在可靠性(block在不同的机架)和带宽(一个管道只需要穿越一个网络节点)中做了一个很好的平衡。下图是备份参数是3的情况下一个管道的三个datanode的分布情况。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 部队取消番号后之前军人档案怎么办 新疆武警黄金部队新兵改革后怎么办 别人偷了自己的东西没有证据怎么办 家里项链被邻居偷了没有证据怎么办 知道是谁偷钱都是没有证据怎么办 武警驾照开地方车被交警拦了怎么办 双手擦了纤体瘦身膏辣疼怎么办 乳房全切术后切口裂开化脓怎么办 擦了锁水的霜之后出汗怎么办 用完瘦脸霜感觉脸部又痒又烧怎么办 嘴角起好多的小炮泡怎么办快好 DNF龙腾光环领错角色怎么办 海盗来了卡在新手奖励怎么办 海盗来了获得新手奖励卡了怎么办 魔域帐号忘了哪个区的了怎么办 魔域口袋版幻兽栏满了怎么办 苹果平板的密码和邮箱都忘了怎么办 二级报名忘了邮箱和密码怎么办 用身份证买的手机号变成空号怎么办 魔域口袋版背包幻兽满了怎么办? 魔域宝宝转世满了还不变雷怎么办 魔域口袋版家族试炼士气不足怎么办 聚水潭暂存位没有箱号怎么办? 长时间不锻炼运动后浑身酸痛怎么办 体脂称身体年龄比实际年龄大怎么办 分手两天我好难过好想去找他怎么办 宝宝一吃药就哭得很厉害怎么办 比你入职晚的同事比你厉害怎么办 nba篮球大师能力值满了怎么办 做什么都觉得很累没有兴趣怎么办 剧烈运动后头晕恶心想吐怎么办 剧烈运动完头晕恶心想吐怎么办 小孩头部摔到地上想吐头晕怎么办 肺部化疗恶心反胃怎么办吃什么药好 好久没运动一运动全身酸痛怎么办 怀孕两个月了一直吐没体力怎么办 公务员审查六级口语证丢了怎么办 农资经营如果被执法查处了怎么办? 干隧道测量坚持不下去该怎么办 老家房子强拆没钱做没钱补怎么办? 魔兽世界出了两个一样的传说怎么办