DataNode磁盤平衡器[代碼分享] 原 薦

項目地址: disk-balancer-hadoop2.6

關於磁盤數據平衡

當現有HDFS遇到存儲空間瓶頸時,我們可以通過往DN上加磁盤來緩解,而由於DN上的原有磁盤數據快滿,新加的磁盤又是空的,就導致磁盤間的數據不平衡。在Hadoop3.0以下版本里,並沒有提供disk-balancer工具,雖然我們可以通過設置新增數據的磁盤選擇策略(參數 dfs.datanode.fsdataset.volume.choosing.policy)爲 org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy,這樣新來數據會盡量往空閒磁盤上寫,但是它需要一個長時間的過程才能達到平衡。而不平衡帶來的影響就是,數據讀取會比較集中在已滿的磁盤上,導致這些磁盤超負荷工作,同時也影響跑任務

使用方式

編譯好jar之後,拷貝到需要做數據平衡的DN上,停掉該DN然後執行下面命令

hadoop jar /path/to/volume-balancer-<version>.jar org.apache.hadoop.hdfs.server.datanode.VolumeBalancerNew [-threshold=0.1] [-concurrency=1] [-dirs=128]

當數據少的磁盤的可用比與整個DN的磁盤可用比達到設置的閾值範圍時,或當遷移的子目錄數達到 volumes * dirs * 256 時(volumes是DN掛載的HDFS磁盤個數),數據平衡會自動停止

當數據平衡結束,重新啓動DN即可

對於CDH

對於CDH而言,HDFS的配置分爲靜態和動態兩部分,靜態的位於 /etc/conf/hadoop,動態的位於 /{Cloudera_Install_Path}/run/cloudera-scm-agent/process/*-hdfs-DATANODE 下,而磁盤配置(參數 dfs.datanode.data.dir)的文件則位於動態目錄下,所以執行腳本的時候需要加載該目錄下的 hdfs-site.xmlhdfs-site-refreshable.xml,對於CDH,可見 使用src/main/scripts 下的幫助腳本

參數

threshold

默認值爲 0.1,設置磁盤平衡的閾值,該值越小,磁盤越平衡,花的時間越長

concurrency

默認值爲 1,設置數據平衡腳本的並行度,在需要平衡的磁盤比較多時,可適當調大這個值,但並不是越大越好,磁盤數據吞吐是有閾值的,建議值爲2~5

dirs

默認值爲 128,設置最大轉移的子目錄數,從Hadoop2.6開始HDFS採用兩級子目錄的結構,單個磁盤上最大文件夾個數爲 256 * 256,這個值可以設置總的最大轉移子目錄數爲 volumes * dirs * 256

關於項目

此項目fork自bperroud的 volumn-balancer,由於原項目只提供了Hadoop2.6以下版本的DN磁盤平衡 VolumeBalancer,在此基礎上我增加了Hadoop2.6及以上版本的磁盤平衡 VolumeBalancerNew,目前在生產環境使用良好,原磁盤使用率92%,平衡後69%,如下

diskbalancer

歡迎所有人提交PR貢獻您的想法、完善文檔、代碼、補丁、bug或其他特性,助力項目更加完善可靠!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章