工作中不免會有碰到服務器磁盤空間不足,需要另外掛載磁盤上去的時候,這時候問題就來了,怎么能讓datanode將數據寫入新掛載的磁盤呢?
1、配置hdfs-site.xml
<property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///sdb1/dfs/data2</value> </property>
2、數據存放策略
參考大佬博客 https://blog.csdn.net/bigdatahappy/article/details/39992075
默認為輪詢,現在的情況顯然應該用“選擇空間多的磁盤存”模式
配置hdfs-site.xml
<property> <name>dfs.datanode.fsdataset.volume.choosing.policy</name> <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value> </property>
3、開啟 數據均衡
bin/start-balancer.sh –threshold 10
##停止命令
bin/stop-balancer.sh
對於參數10,代表的是集群中各個節點的磁盤空間利用率相差不超過10%,可根據實際情況進行調整。
注意點
在實際運行時發現datanode節點起不來,報錯
org.apache.hadoop.util.DiskChecker$DiskErrorException: Too many failed volumes - current valid volumes: 1, volumes configured: 2, volumes failed: 1, volume failures tolerated: 0
經過檢查,是因為在102(新增硬盤的主機)配置了hdfs-site.xml 后,分發給了其他沒有新增硬盤的主機,啟動時因為沒有檢測到新的硬盤,所以會報錯,這里建議千萬不要分發hdfs-site.xml