在我們使用hadoop集群的時(shí)候 憔儿,由于 日志 數(shù)據(jù)不斷流入寫(xiě)入到hdfs上肩钠,而且 算法人員 不斷的清洗 數(shù)據(jù)做特征工程 又會(huì)產(chǎn)生 新的中間數(shù)據(jù) 挡鞍,而且量一點(diǎn)都不小榆俺。
這個(gè)時(shí)候 hadoop 集群 就要面臨著 hdfs 空間擴(kuò)容 和 數(shù)據(jù)的 rebalance
hdfs 的擴(kuò)容 和磁盤(pán) 擴(kuò)容 有關(guān)售躁,在我上一片文章介紹了磁盤(pán) 擴(kuò)容 坞淮,集群各個(gè)節(jié)點(diǎn) 添加新的磁盤(pán) volume disk,然后把這些 格式化的disk 修改權(quán)限 添加到hadoop 的 hdfs yarn 的配置文件中陪捷,重啟hadoop 集群就可以了回窘。
但是 數(shù)據(jù)的rebalance 其實(shí)分好幾種 情況 ,如果我們 理解錯(cuò)誤了市袖,只能是浪費(fèi)時(shí)間啡直,不斷 在原地打轉(zhuǎn)
首先 rebalance policy 就分三種 ,主要還是 針對(duì)的粒度
A.DataNode級(jí)別的rebalance
B.BlockPool 級(jí)別的rebalance
C.Volume & Disk 級(jí)別的rebalance
在 hadoop 2.X 版本 只支持 A,B ,而 hadoop 3.0版本 支持 A,B,C,
不過(guò) 對(duì)于勤勞 勇敢的大數(shù)據(jù) 管理者來(lái)說(shuō)苍碟,可以迂回實(shí)現(xiàn) hadoop 2.X 版本 對(duì)C 的支持
首先 我們要 對(duì) 集群擴(kuò)容 也要客觀分三種種情況
D. 一種是 添加節(jié)點(diǎn) 酒觅,比如 原來(lái)的機(jī)器 一共有 1個(gè) NameNode 4個(gè) DataNode,突然 又添加了6個(gè)新的 DataNode微峰,這樣一來(lái)總共就有了 10個(gè)DataNode舷丹,
E. 一種 是在原來(lái)的節(jié)點(diǎn) 添加 磁盤(pán),比如 原來(lái)的機(jī)器 一共有 1個(gè) NameNode 4個(gè) DataNode蜓肆,其中每個(gè)DataNode 原來(lái)有5個(gè) 作為 DataNode的掛載磁盤(pán) volume颜凯,每一個(gè)磁盤(pán) 都是2T,這樣一來(lái)仗扬,整體的hdfs的總?cè)萘烤褪? 2T x5x4=40T症概,然后突然 為每個(gè)DataNode節(jié)點(diǎn)再各添加 兩個(gè)3T的 volume,這樣一來(lái) hdfs 的新的總?cè)萘烤褪?br>
2Tx5x4 +3Tx2x4=64T早芭,
F. 最后一種就是 D E 的結(jié)合體 彼城,即 增加DataNode 節(jié)點(diǎn)數(shù)量又增添每個(gè)DataNode的磁盤(pán)掛載量。
在 hadoop 2.X 版本的默認(rèn)只支持 A B退个,如果不同DataNode節(jié)點(diǎn)的 各個(gè)掛載的總磁盤(pán)量 發(fā)生了 不平衡精肃,可以通過(guò) start-balance.sh 或者 hdfs balancer 兩種 方式 啟動(dòng) balance
程序,如果 不同 blockpool 不平衡 就啟動(dòng) -policy blockpool 形式的 即可帜乞。
對(duì)于 A B 參考 http://blog.csdn.net/jiangshouzhuang/article/details/51879102
https://www.cloudera.com/documentation/enterprise/5-6-x/topics/admin_hdfs_balancer.html
但是一定要注意的 就是 在 一個(gè)DataNode 內(nèi)部 司抱,如果 出現(xiàn)了 掛載的多個(gè)磁盤(pán) 寫(xiě)入量百分比 差別巨大,hdfs-balancer 是無(wú)能無(wú)力的黎烈,即使啟動(dòng)了习柠,還是會(huì)沒(méi)有報(bào)錯(cuò)的退出,因?yàn)?hadoop balancer 無(wú)法偵查到這種 單個(gè)DataNode 的 disk 之間數(shù)據(jù)不平衡照棋,如果所有節(jié)點(diǎn)的 DataNode的總磁盤(pán)寫(xiě)入都差不多的話资溃,hadoop 認(rèn)為 你的集群是平衡狀態(tài)的,麻蛋烈炭,就是這么任性溶锭。不管你怎么 調(diào)整參數(shù) 他都是無(wú)動(dòng)于衷的。
但是hadoop 2.x 也是可以可以迂回實(shí)現(xiàn) disk 級(jí)別的rebalance 就是 在 hdfs-site.xml中設(shè)置 每塊磁盤(pán)的預(yù)留空間符隙,比如當(dāng)你設(shè)置預(yù)留 30G,當(dāng)某塊磁盤(pán) 快只剩下30G的時(shí)候趴捅,DataNode在寫(xiě)入的時(shí)候就會(huì)忽略掉他垫毙,去 寫(xiě)到別的掛載磁盤(pán)上,這個(gè)其實(shí)還是不夠友好拱绑,萬(wàn)一 一個(gè)DataNode 掛載的好幾款不同大小的磁盤(pán)综芥,有50G 500G 1T 2T 3T,設(shè)置 30G,顯然對(duì)50G影響是最大的,如果是百分比才是比較現(xiàn)實(shí)的選項(xiàng)猎拨,另外磁盤(pán)按道理一定要預(yù)留空間是有原因的膀藐,如果 沒(méi)有空間了,你連 mapreduce job 都 跑不了了红省,必須的额各,詳勘我之前寫(xiě)的 job 卡死的原因
<property>
<name>dfs.datanode.du.reserved</name>
<value>82212254720</value>
</property>
另外就是啟動(dòng) 磁盤(pán)的自 我 banlancer ,其實(shí)這個(gè)按道理在hadoop 2.x不會(huì)生效的屬性吧恃,但是在hadoop 3.x 是支持的啊臊泰,求安慰吧,萬(wàn)一hadoop 2.x你寫(xiě)上了有點(diǎn)作用呢
<property>
<name>dfs.disk.balancer.enabled</name>
<value>true</value>
</property>
這些就是hadoop 2.x 的迂回策略 rebalance 蚜枢,對(duì)于 DataNode 級(jí)別在 D F 情況下是肯定會(huì)起作用的缸逃, 肯定DataNode的磁盤(pán)使用量是有區(qū)別,前提是 達(dá)到我說(shuō)的 需要 balancer的閾值了 在 -threshould 中你可以設(shè)置閾值厂抽,達(dá)到閾值后 hadoop 就會(huì)認(rèn)為 整個(gè)集群的DataNode是已經(jīng)平衡了
對(duì)于hadoop 3.x 版本的 DataNode blockPool policy rebalance 和2.x 應(yīng)該是相同的需频,額外的選項(xiàng)是多了 diskbalancer 的命令 這個(gè)命令的執(zhí)行 也是挺講究的
需要先做plan 然后 excute 最后query
大家可以參考 這篇 https://www.iteblog.com/archives/1905.html
http://blog.csdn.net/jsjsjs1789/article/details/73997497
當(dāng)然 我說(shuō)的磁盤(pán)均衡和 rebalance 是 一個(gè) 治病的過(guò)程 ,如果不生病是 最好的筷凤,所以就要未雨綢繆 昭殉,預(yù)防為主,盡量讓 hdfs 自愈就更好不過(guò)了 藐守,當(dāng)然也是有方法的挪丢, 比如 讓hdfs 優(yōu)先往新盤(pán) 寫(xiě)入數(shù)據(jù) ,改變 hdfs 的默認(rèn)寫(xiě)入策略卢厂,監(jiān)控 各個(gè)磁盤(pán)寫(xiě)入差額 啟動(dòng)自平衡乾蓬。
<property>
<name>dfs.datanode.fsdataset.volume.choosing.policy</name>
<value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property>
<property>
<name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold</name>
<value>20737418240</value> <!-- 20 GB -->
</property>
<property>
<name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction</name>
<value>1.0f</value>
</property>
balance 源代碼的研究 http://blog.csdn.net/tracymkgld/article/details/18358455
http://blog.csdn.net/xinganshenguang/article/details/55810047
另外 阿里云的 rebalance
https://yq.aliyun.com/articles/60406
https://yq.aliyun.com/articles/183113
https://yq.aliyun.com/articles/100912