hadoop配置机架感知知 可以提升多少性能

Hadoop学习:HDFS 机架感知_服务器应用_Linux公社-Linux系统门户网站
你好,游客
Hadoop学习:HDFS 机架感知
来源:Linux社区&
作者:tgzhu
client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响。一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC,这样可以防止整个机架、甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间、甚至IDC之间传输,增加了副本写的代价,是否有较优的方案来解决这个问题呢?
常用策略:
hdfs 在缺省配置下副本数是3个,通常的策略是:
第一个副本放在和Client相同机架的Node里(如果Client不在集群范围,第一个Node是随机选取不太满或者不太忙的Node)
第二个副本放在与第一个Node不同的机架中的Node
第三个副本放在与第二个Node所在机架里不同的Node. 示例图如下:
默认情况下,机架感知是没有启用的,这时任何一台 DN 机器,不管物理上是否属于同一个机架,NN 都会默认将他们默认为在/default-rack下, 此时,就很容易出现之前提到的增添机架间网络负载的情况,如我们前面单节介绍基于 hdp2.4安装的集群就没指定rack, 如下图所示。
机架配置:
hdfs 的机架感知功能需要在NN机器的hadoop下 core-site.xml里配置net.topology.script.file.name选项,这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值
接受的参数通常为datanode机器的ip地址,而输出的值通常为该ip地址对应的datanode所在的rackID
Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置,此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的heartbeat时,将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中
脚本的编写,参见Hadoop官方给出的脚本:
在 hdp2.4 安装后的 hadoop 目录下的配置文件中, 查看 hadoop的 core-site.xml 文件,已经设置了此选项,如下图
查看 topology_script.py 脚本,里面使用的文件是 topology_mappings.data,用vim编辑此文件,换成真实的网络拓扑,如下
[network_topology]
hdp2=/rack1
192.168.2.2=/rack2
hdp3=/rack2
192.168.2.99=/rack1
&手工修改配置文件,重启服务后修改内容会被冲掉,所以用我们在 ambaria 上去修改,选择 "host" -& "Action" -& "Selected hosts" -& "hosts" --& "set&Rack"&修改每台host对应的rack,&保存修改,重启因修改配置而受影响的组件服务,成功后示例如下,这时再去看 topology_mappings.data 的内容已经修改成功:
分配原理:
有了机架感知,NameNode就可以画出下图所示的datanode网络拓扑图,
最底层是Hx是 datanode, 则H1的rackid=/D1/R1/H1,H1的parent是R1,R1的是D1,有了这些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
&写文件时根据策略输入 dn 节点列表,读文件时按与client由近到远距离返回 dn 列表
下面关于Hadoop的文章您也可能喜欢,不妨看看:
14.04下Hadoop2.4.1单机/伪分布式安装配置教程&
安装和配置Hadoop2.2.0&
Ubuntu 13.04上搭建Hadoop环境
Ubuntu 12.10 +Hadoop 1.2.1版本集群配置
Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)
Ubuntu下Hadoop环境的配置
单机版搭建Hadoop环境图文教程详解
更多Hadoop相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
& (09月04日)
& (07月28日)
& (09月04日)
& (08月10日)
& (03月23日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款后使用快捷导航没有帐号?
查看: 1047|回复: 8
个人猜想:机架感知实现原理
金牌会员, 积分 2812, 距离下一级还需 188 积分
论坛徽章:12
刚看完虎皇的视频,突发奇想,发帖一篇:
tracert命令可以跟踪到达目的地之间的路由器/交换机,机架感知也可以基于此原理实现,步骤如下:
1.从任意节点开始,往所有其它节点发类似于tracert命令的请求,并记录沿途经过的路由/交换机数量,所有跳转数为0的节点均在同一机架;
2.向同一机架的节点发消息告知他们“同胞关系”
3.从纳入已知“同胞关系”的节点之外剩余节点中任意一节点开始重复上述过程,直至所有节点都找到“同胞”
论坛徽章:529
在交换机级别的连接,tracert没啥用吧
论坛徽章:16
传说中很牛逼的机架感知在hadoop中是靠配置文件实现的
金牌会员, 积分 2812, 距离下一级还需 188 积分
论坛徽章:12
原来不是自动化感知啊,求依据
论坛徽章:2
tracert 是撒原理呢,讲解下!
论坛徽章:25
回头研究下 哈哈
论坛徽章:11
学习了& &啊
高级会员, 积分 821, 距离下一级还需 179 积分
论坛徽章:3
可以划分网段实现吧
扫一扫加入本版微信群1.自定义实现类
&&package com.it18zhang.hdfs.
&&import org.apache.hadoop.net.DNSToSwitchM
&&import java.util.ArrayL
&&import java.util.L
&& *机架感知类
&&public class MyRackAware implements DNSToSwitchMapping {
&&&public List&String& resolve(List&String& names) {
&&&&List&String& list =& new ArrayList&String&();
&&&&for(String str : names){
&&&&&//输出原来的信息,ip地址(主机名)
&&&&&System.out.println(str);
&&&&&if(str.startsWith(&192&)){
&&&&&&//192.168.133.202
&&&&&&String ip = str.substring(str.lastIndexOf(&.&) + 1);
&&&&&&if(Integer.parseInt(ip) &= 203) {
&&&&&&&list.add(&/rack1/& + ip);
&&&&&&else{
&&&&&&&list.add(&/rack2/& + ip);
&&&&&else if(str.startsWith(&s&)){
&&&&&&String ip = str.substring(1);
&&&&&&if (Integer.parseInt(ip) &= 203) {
&&&&&&&list.add(&/rack1/& + ip);
&&&&&&} else {
&&&&&&&list.add(&/rack2/& + ip);
&&&public void reloadCachedMappings() {
&&&public void reloadCachedMappings(List&String& names) {
&2.配置core-site.xml
&&&?xml version=&1.0& encoding=&UTF-8&?&
&&&?xml-stylesheet type=&text/xsl& href=&configuration.xsl&?&
&&&configuration&
&&&&&property&
&&&&&&&name&fs.defaultFS&/name&
&&&&&&&value&hdfs://192.168.133.201/&/value&
&&&&&/property&
&&&&&property&
&&&&&&&name&hadoop.tmp.dir&/name&
&&&&&&&value&/home/centos/hadoop&/value&
&&&&&/property&
&&&&&property&
&&&&&&&name&topology.node.switch.mapping.impl&/name&
&&&&&&&value&com.hdfs.rackaware.MyRackAware&/value&
&&&&&/property&
&&&/configuration&
&3.导出jar包
&4.复制jar到/soft/hadoop/shared/hadoop/common/lib
&5.分发jar.(可以不做)
&&实际上不需要分发,只在名称节点上运行。
&6.重启名称节点
&&$&hadoop-daemon.sh stop namenode
&&$&hadoop-daemon.sh start namenode
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:983次
排名:千里之外
原创:35篇
转载:22篇
(22)(1)(8)(27)hadoop(24)
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脚本
参考这里:
hadoop集群的机架感知功能是提高hadoop集群网络性能的重要参数,配置hadoop机架感知功能的步骤如下:
&&&&& 1)修改core-site.xml文件,添加以下配置项:
&&& 2)编写 RackAware.py 脚本:
&&&&&&& 由于没有找到确切的文档说明 到底是主机名还是ip地址会被传入到脚本,所以在脚本中最好兼容主机名和ip地址,如果机房架构比较复杂的话,脚本可以返回如:/dc1/rack1 类似的字符串。
&&&&&& 3)执行命令:chmod +x RackAware.py
&&&&&& 4)重启namenode
&&&&&&&&&&& 如果配置成功,namenode启动日志中会输出:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:299493次
积分:5774
积分:5774
排名:第3824名
原创:265篇
转载:169篇
评论:11条
(12)(10)(2)(3)(2)(2)(6)(21)(1)(2)(1)(2)(1)(1)(2)(10)(4)(11)(19)(6)(4)(3)(3)(3)(7)(6)(18)(8)(4)(22)(4)(21)(22)(26)(16)(149)(1)}

我要回帖

更多关于 hadoop机架感知 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信