Hadoop 機架(集群拓撲)設置
阿新 • • 發佈:2019-01-09
-c ref lan nta container size 數據 自動 配置 本文通過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 機架(集群拓撲)設置