Hadoop 3中的磁盤管理大招解密
1、前言
本文深入研究 HDFS 磁盤平衡的新特性,這是 Hadoop3 中加入的一個特性。
HDFS 現(xiàn)在包括(在 CDH 5. 8. 2 和更高版本中發(fā)布)用于跨節(jié)點移動數(shù)據(jù)的全面的存儲容量管理方法。
在 HDFS 中,DataNode 將數(shù)據(jù)塊分散到本地文件系統(tǒng)目錄中,這可以使用 hdfs-site.xml 文件的 dfs.datanode.data.dir 參數(shù)指定。
在典型的安裝中,每個目錄(在 HDFS 術(shù)語中稱為卷)位于不同的設(shè)備上(例如,在單獨的 HDD 和 SSD 上)。
當向 HDFS 寫入新塊時,DataNode 使用卷選擇策略為塊選擇磁盤。
當前支持兩種此類策略類型:
- 輪詢(round-robin)
- 可用空間(available space)(HDFS-1804)
簡而言之,如圖1所示,輪詢策略在可用磁盤上均勻分布新塊,而可用空間策略優(yōu)先將數(shù)據(jù)寫入具有***可用空間(按百分比)的磁盤。
圖1
默認情況下,DataNode 使用基于輪詢的策略寫入新塊。但是,在長期運行的集群中,由于 HDFS 中大規(guī)模文件刪除或通過磁盤熱交換特性添加新 DataNode 磁盤等事件,DataNode 仍然可能創(chuàng)建了顯著不平衡的卷。
即使您使用基于可用空間的卷選擇策略,卷不平衡仍然可能導致效率較低的磁盤 I / O。
例如:每個新寫入將轉(zhuǎn)到新添加的空磁盤,而其他磁盤在此期間是空閑的,這會在新磁盤造成瓶頸。
最近,Apache Hadoop 社區(qū)開發(fā)了服務器離線腳本(在 HDFS-1312,dev@ mailing list 和 GitHub 中所討論的),以緩解數(shù)據(jù)不平衡問題。
但是,由于處于 HDFS 代碼庫之外,這些腳本要求 DataNode 在磁盤之間移動數(shù)據(jù)之前脫機。
因此,HDFS-1312 還引入了一種在線磁盤平衡器,旨在根據(jù)各種指標重新平衡正在運行的 DataNode 上的卷。
與 HDFS 平衡器類似,HDFS 磁盤平衡器作為 DataNode 中的線程運行,以便在具有相同存儲類型的卷之間移動塊文件。
在本文的剩余部分,您將了解為什么以及如何使用此新特性。
2、如何使用磁盤平衡器?
讓我們通過一個例子逐步探討這個有用的特性。
首先,確認在所有 DataNode 上配置 dfs.disk.balancer.enabled 設(shè)置為 true。
從 CDH 5.8.2 起,用戶可以通過 Cloudera Manager 中的 HDFS 安全閥片段指定此配置:
在此示例中,我們將向預加載的 HDFS DataNode 添加一個新磁盤(/mnt/disk1),并將新磁盤掛載到 /mnt/disk2。
在 CDH 中,每個 HDFS 數(shù)據(jù)目錄位于單獨的磁盤上,因此可以使用 df 顯示磁盤使用情況:
顯然,是時候讓磁盤平衡了!
典型的磁盤平衡器任務涉及三個步驟(通過 HDFS diskbalancer 命令實現(xiàn)):計劃,執(zhí)行和查詢。
在***步中,HDFS 客戶端從 NameNode 讀取關(guān)于指定的 DataNode 的必要信息,以生成執(zhí)行計劃:
從輸出中可以看出,HDFS 磁盤平衡器使用計劃器來計算指定 DataNode 上數(shù)據(jù)移動計劃的步驟,這是通過使用 DataNode 向 NameNode 報告的磁盤使用信息來完成的。
每個步驟指定要移動數(shù)據(jù)的源卷和目標卷,以及預計移動的數(shù)據(jù)量。
在編寫本文時,HDFS 支持的唯一計劃器是 GreedyPlanner ,它不斷將數(shù)據(jù)從最常用的設(shè)備移動到最少使用的設(shè)備,直到全部數(shù)據(jù)均勻分布在所有設(shè)備上。
用戶還可以在計劃命令中指定空間利用率的閾值;因此,如果空間利用率的差異低于閾值,則計劃器認為磁盤是平衡的。
另一個值得注意的選項是通過在計劃過程中指定— bandwidth 來限制磁盤平衡器任務 I/O,以便磁盤平衡器 I/O 不會影響前臺工作。
磁盤平衡器執(zhí)行計劃生成為存儲在 HDFS 中的 JSON 文件。
默認情況下,計劃文件保存在 /system/diskbalancer 目錄下:
要在 DataNode 上執(zhí)行計劃,請運行:
此命令將 JSON 計劃文件提交給 DataNode,DataNode 在后臺 BlockMover 線程中執(zhí)行它。
檢查 DataNode 上磁盤平衡器任務的狀態(tài),請使用 query 命令:
輸出(PLAN_DONE)表示磁盤平衡任務已完成。要驗證磁盤平衡器的有效性,請再次使用 df -h 查看跨兩個本地磁盤的數(shù)據(jù)分布:
輸出確認磁盤平衡器成功地將卷之間的磁盤空間使用率差異降低到10%以下。任務完成!
要閱讀有關(guān) HDFS 磁盤均衡器的更多詳細信息,請閱讀 Cloudera 文檔和上游文檔。
3、總結(jié)
隨著 HDFS-1312 中引入期待已久的內(nèi)部 DataNode 磁盤平衡器特性,CDH 5.8.2 及更高版本中帶來的 HDFS 版本提供了一個全面的存儲容量管理解決方案,可以實現(xiàn)以下3種數(shù)據(jù)移動:跨節(jié)點(平衡器)、存儲類型(Mover)和單個 DataNode 中的磁盤(磁盤平衡器)。