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。

具體操作

  1. 需要退役的機器列表加入dfs.hosts.exclude文件
  2. hadoop dfsadmin -refreshNodes
  3. 等待一段時間,這些datanode的狀態由in service->Decommission
  4. dfs.hosts文件剔除這批datanode
  5. 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。

Tags: