1. 程式人生 > >Hadoop 機架(集群拓撲)設置

Hadoop 機架(集群拓撲)設置

-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 機架(集群拓撲)設置