最近發現hdfs的一個問題,每當集羣開啓的時候,有一個節點上的可用空間就一直在減小,而且速度很快,發現是data目錄下的dncp_block_verification.log.curr文件在一直變大,查了日誌沒有發現什麼可疑的緣由,只在datanode的日誌上發現有幾條日誌以下很是可疑:node
2015-11-28 21:35:51,029 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-1219379569-1 92.168.1.50-1445090469366 blk_1073748736_7916 file /home/hadoop/hdfsdisk/data/current/BP-1219379569-192.168.1.50-1445090469366/curren t/finalized/subdir0/subdir27/blk_1073748736 2015-11-28 21:35:51,062 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-1219379569-1 92.168.1.50-1445090469366 blk_1073846979_106183 file /home/hadoop/hdfsdisk/data/current/BP-1219379569-192.168.1.50-1445090469366/curr ent/finalized/subdir1/subdir154/blk_1073846979
好像是namenode發出的刪除請求,可是不知道在刪除什麼apache
因爲暫時沒有找出故障緣由,因此打算將這個節點刪除,而後將節點再添加回來,具體步驟以下:oop
1. 平滑刪除節點spa
1.1 修改hdfd-site.xml文件日誌
首先集羣是開啓的,而後添加代碼以下:code
<property> <name>dfs.hosts.exclude</name> <value>/home/hadoop/hadoop-2.6.0/etc/hadoop/excludes</value> <description> Names a file that contains a list of hosts that are not permitted to connect to the namenode. The full pathnam e of the file must be specified If the value is empty, no hosts are excluded. </description> </property>
其中/home/hadoop/hadoop-2.6.0/etc/hadoop/excludes文件中爲要刪除的機器hostname,示例以下:server
slave8.spark
slave9.spark
1.2 而後執行命令刷新hdfs節點:xml
hadoop dfsadmin -refreshNodes
更新hdfs節點狀態,因爲存在副本的緣由,在後臺會有塊的移動
1.3 運行命令查看hdfs報告
hadoop dfsadmin -report
會顯示以下狀態:
Live datanodes (8): Name: 192.168.1.58:50010 (slave8.spark) Hostname: slave8.spark Decommission Status : Decommission in progress Configured Capacity: 898359930880 (836.66 GB) DFS Used: 844093001728 (786.12 GB) Non DFS Used: 47660601344 (44.39 GB) DFS Remaining: 6606327808 (6.15 GB) DFS Used%: 93.96% DFS Remaining%: 0.74% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 1 Last contact: Sun Nov 29 13:41:48 CST 2015
說明該節點已經被移除,其實應該等到在hdfs內部塊移動結束以後再結束集羣,可是我沒有等到,直接在顯示如上狀態後就關閉了集羣,而後將slaves中的該節點hostname刪除後啓動了集羣,啓動後hdfs又開始了移動塊,可是很慢,會等很長時間,可是若是集羣一直要用沒法關閉集羣的話,這個過程是很重要的。blog
2. 添加節點ip
添加新節點時須要在slaves配置文件中新增即將添加的節點,而後再進行集羣平衡操做,若是不想進行平衡操做也能夠(不推薦),這樣作只是致使了集羣中每一個節點已佔用空間大小不一致,添加節點也有兩種方式,平滑添加和非平滑添加,具體操做以下:
2.1 平滑添加,須要中止namenode
1.中止namenode
2.修改slaves文件
3.啓動namenode
4.執行hadoop balance命令平衡集羣節點
2.2非平滑添加datanode,不須要中止namenode
1.修改slaves文件,添加須要增長的節點
2.啓動datanode,hadoop-daemon.sh start datanode
3.執行hadoop balance命令平衡集羣節點
執行節點平衡命令爲balance命令,使用示例以下:start-balancer.sh -threshold 8,具體詳細使用方法請查閱。