EMR入門學習之HDFS的運維操作(十三)
- 2019 年 11 月 22 日
- 筆記
一、查看HDFS文件系統健康狀況
前言
HDFS是分散式文件系統。HDFS支援fsck命令來檢查系統中的各種不一致狀況。我們可以使用fsck 來查看當前文件系統的狀態。該命令提供了若干選項,不同選項完成不同的功能。
登錄EMR集群的Master節點,我們通過ps aux | grep namenode 可以看到HDFS的超級用戶是Hadoop。

所以我們在Master節點su hadoop,執行hdfs fsck -h輸出如下:
Usage: hdfs fsck [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]] [-includeSnapshots] [-storagepolicies] [-blockId ] start checking from this path -move move corrupted files to /lost+found -delete delete corrupted files -files print out files being checked -openforwrite print out files opened for write -includeSnapshots include snapshot data if the given path indicates a snapshottable directory or there are snapshottable directories under it -list-corruptfileblocks print out list of missing blocks and files they belong to -blocks print out block report -locations print out locations for every block -racks print out network topology for data-node locations -storagepolicies print out storage policy summary for the blocks -blockId print out which file this blockId belongs to, locations (nodes, racks) of this block, and other diagnostics info (under replicated, corrupted or not, etc)
參數 | 說明 |
|---|---|
<path> | 檢查的起始目錄 |
-move | 將損壞的文件移到到/lost+found |
-delete | 刪除損壞的文件 |
-files | 列印出所有被檢查的文件 |
-openforwrite | 列印出正在寫的文件 |
-list-corruptfileblocks | print out list of missing blocks and files they belong to |
-blocks | 列印出block報告 |
-locations | 列印出每個block的位置 |
-racks | 列印出datanode的網路拓撲結構 |
默認情況下,fsck會忽略正在寫的文件,使用-openforwrite可以彙報這種文件
注意事項:當輸入的 在namenode中文件數量大的時候,要慎重使用fsck命令,會對hdfs系統造成較大性能影響。 通常,推薦在文件系統負載低峰期時候執行該命令,作健康檢查。
操作
示例1:對整個文件系統進行監控檢查
hdfs fsck /

示例2:將某個目錄中損壞的文件刪除

示例3:列印被檢查的文件資訊

二、HA集群查看NameNode狀態
前言
在運維HDFS集群,或排查問題的過程中,我們需要確定某個NameNode節點的服務狀態。HDFS提供了haadmin工具來查看該資訊。
操作命令
同樣在Master節點hadoop用戶下,使用hdfs haadmin -getAllServiceState 如下:

或者使用hdfs haadmin -getServiceState nn1 如下

則NameNode nn1 是active 狀態,則輸出active;否則,輸出standby。
HA集群切換NameNode
操作命令
示例:hdfs haadmin -failover nn1 nn2
輸出: Failover to NameNode at *.*.*.* successful
三、hdfs dfsadmin
hdfs 使用情況,節點資訊查詢
前言
HDFS是分散式文件系統。HDFS支援使用dfsadmin來查看各個節點的情況,以及集群存儲使用情況。
操作命令
hdfs dfsadmin -report [-live] [-dead] [-decommissioning]
說明
列印 hdfs文件系統的資訊和各節點的統計資訊. 如果加上可選參數,則只列印對應狀態的節點資訊。 比如,hdfs dfsadmin -report -live, 只列印存活的節點資訊。
hdfs 添加/刪除/更新節點
前言
需要添加/刪除一些節點, (不建議手動操作,如果需要擴縮容,請通過emr中控台提供的操作介面來操作)
操作命令
hdfs dfsadmin -refreshNodes
說明
刷新節點。 重新讀取 hosts 和exclude 文件,更新哪些datanode可以連接到NameNode,以及哪些datanode應該是decommissioned或recommissioned。
具體操作
- 需要退役的機器列表加入dfs.hosts.exclude文件
- hadoop dfsadmin -refreshNodes
- 等待一段時間,這些datanode的狀態由in service->Decommission
- dfs.hosts文件剔除這批datanode
- hadoop dfsadmin -refreshNodes
四、HDFS集群數據均衡操作
前言
隨著時間推移,運行中的HDFS集群數據節點datanode負載的數據量越來越不均衡。這將破壞數據本地性特徵,導致部分數據節點異常繁忙,影響整個集群性能。
命令介紹
hdfs balancer [-threshold <threshold>] [-policy <policy>] [-exclude [-f <hosts-file> | <comma-separated list of hosts>]] [-include [-f <hosts-file> | <comma-separated list of hosts>]] [-idleiterations <idleiterations>]
參數 | 說明 |
|---|---|
-policy <policy> | 策略取值: datanode, blockpool 。表示balancing將基於datanode級別;「blockpool」只能在Federation架構下有效,balancer級別為「blockpool」表示每個datanode上每個blockpool的blocks個數分布均衡。建議保持默認。 |
-threshold <threshold> | 磁碟容量百分比,當參與數據均衡的節點之間容量佔比差值小於該值時,均衡操作停止。 |
-exclude -f <hosts-file> | <comma-separated list of hosts> | 排除某些節點參與數據均衡操作。 |
-include -f <hosts-file> | <comma-separated list of hosts> | 指定某些節點參與數據均衡操作。 |
-idleiterations <iterations> | 最大迭代次數,默認值5 |
注意:因為涉及到數據遷移,遷移速度通過hdfs-site.xml 文件中的dfs.datanode.balance.bandwidthPerSec指定,單位位元組/sec。

