從Hadoop集羣中移除一塊磁盤的操做

背景
因爲歷史緣由,CDH的hadoop的每一個DataNode節點下掛載了多個磁盤,後要對一些配置差的磁盤要用配置較好的新磁盤進行替換,這時候就須要撤出舊磁盤,並保證數據不丟失的狀況下更換磁盤。node

在更換磁盤的過程可能會遇到以下狀況,有些磁盤的使用量特別大,已經塊佔滿,而有些磁盤的使用量較少,可是hdfs在寫入數據時默認仍是向使用量比較的磁盤中寫入數據,這樣就會致使有些磁盤會提早爆滿的現象;對於這樣的問題,能夠從以下兩個角度解決問題,第一,在掛載磁盤的時候,給每一個磁盤都設置預留空間;第二,經過修改hdfs使用磁盤的規則,使用hdfs優先使用磁盤空間較大的磁盤。
 
方案
移除的動做不能直接從集羣中移除,由於數據還存放在這些磁盤中。咱們知道,hadoop默認是3份副本,移除一塊或者兩塊磁盤,數據是不會丟失的。爲了保險起見,咱們一塊一塊操做,移除一塊以後,會有若干副本丟失。
 
步驟
1.   中止CDH集羣
2. 先從一個節點開始,好比從slave-01上,先將dfs.data.dir, dfs.datanode.data.dir這個配置中,刪除/data/dfs/dn, 只保留/data1/dfs/dn和/data2/dfs/dn
3. 重啓集羣
4. 打開網頁http://master-02:50070/fsck, 會開始檢查數據副本的狀況。最後有一個檢查報告,提示block損壞的狀況,和副本的丟失狀況。由於已經刪除一個磁盤,可能會有不少數據只有2個副本。有的臨時的jar文件,因爲副本數被設置爲1,因此會丟失,不過這些是Mapreduce臨時生成的文件,不影響數據的完整性。
5. 運行hadoop fs -setrep -w 3 -R /, 從新生成副本, 若是中途出現out of memory,則從新運行該命令便可
6. 查看檢查報告看看有哪些目錄的數據丟失,是否無關數據,刪除這些無關數據:hadoop fsck <目錄> -delete
7. 重複步驟2-6oop

相關文章
相關標籤/搜索