码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop 机架(集群拓扑)设置

时间:2019-01-09 15:08:36      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:targe   开头   字符   col   import   pos   输出流   基本   ack   

本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_rack_awareness

Hadoop会通过集群的拓扑(节点在交换机的连接形式)优化文件的存储,降低跨交换机的数据通信,使副本跨交换机以保证数据安全。

但Hadoop没有默认的集群拓扑识别机制,需要使用额外的java类或脚本两种形式设置。

官网上给了集群拓扑的基本说明(!(Rack Awareness)[https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/RackAwareness.html]),给出来的那两段脚本看得有点懵,就自己试了一下,写了个更简单的。

其实只是Hadoop会调用脚本,将多个Datanode的ip作为输入,每次最多输入的ip数设置在net.topology.script.number.args,将输入的ip转换成/rack-num的形式(以/开头的字符串),用标准输出流(如Python的print)输出结果。

具体操作

编写脚本

下面的脚本在输入

192.168.3.1
192.168.3.4

时,会输出

/rack1
/rack4
#!/bin/python3
import sys

# 第一个参数是脚本路径,直接pop掉
sys.argv.pop(0)

# 0-3  rack0
# 4-7  rack1
# 8-11  rack2
# ...

# 其它的参数里每个参数都是一个ip,此处直接取ip的最后一位除以4作为Racknum
# 实践上可以读文件确定ip的对应关系
for ip in sys.argv:      
    hostNum = int(ip.split(".")[3])
    print("/rack" + str(int(hostNum/4)))

设置配置参数

<property>
  <name>net.topology.script.file.name</name>
  <value>/home/sparkl/hadoop/etc/hadoop/topology.py</value>
</property>

重启集群即可

验证结果

以下命令能够直接获取某一个文件的分布状态,以及总的rack数量:

hdfs fsck /readme.md -files -blocks -racks

貌似没有直接以树状的形式输出集群拓扑的命令,namenode的日志中能看到datanode在连接时的拓扑位置。

Hadoop 机架(集群拓扑)设置

标签:targe   开头   字符   col   import   pos   输出流   基本   ack   

原文地址:https://www.cnblogs.com/fly2wind/p/10244107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!