容:新增DN節(jié)點(diǎn))
擴(kuò)容往現(xiàn)有集群增加新 DataNode 存儲(chǔ)節(jié)點(diǎn)如果機(jī)器同時(shí)部署 NodeManager則同時(shí)擴(kuò)容 YARN 計(jì)算資源。擴(kuò)容對(duì)比縮容縮容是遷出數(shù)據(jù)擴(kuò)容是數(shù)據(jù)不會(huì)自動(dòng)遷移新 DN 剛加入是空的已有舊塊不會(huì)自動(dòng)均衡到新節(jié)點(diǎn)需要手動(dòng)執(zhí)行數(shù)據(jù)均衡。一、完整操作步驟1、新機(jī)器環(huán)境準(zhǔn)備操作系統(tǒng)、JDK 版本和集群保持一致主機(jī)名配置 hosts 解析時(shí)間同步。部署 Hadoop 程序包配置和集群完全一致配置文件core?site.xml hdfs?site.xml yarn?site.xml。創(chuàng)建 DataNode 數(shù)據(jù)目錄目錄權(quán)限 hdfs 用戶。chown -R hdfs:hadoop /data/hadoop?datanode2、兩種加入集群方式方式 A允許任意節(jié)點(diǎn)接入大部分生產(chǎn)hdfs?site.xml不配置dfs.hosts新 DN 啟動(dòng)之后自動(dòng)注冊(cè)到 NameNode直接加入集群。方式 B配置白名單 dfs.hosts嚴(yán)格管控集群節(jié)點(diǎn)hdfs?site.xmlproperty namedfs.hosts/name value/etc/hadoop/conf/allow_hosts/value /property把新節(jié)點(diǎn)主機(jī)名寫入allow_hostsNN 執(zhí)行刷新配置hdfs dfsadmin -refreshNodes3、啟動(dòng)新節(jié)點(diǎn)服務(wù)# HDFS systemctl start hadoop?hdfs?datanode # 如果同時(shí)作為YARN計(jì)算節(jié)點(diǎn) systemctl start hadoop?yarn?nodemanager4、驗(yàn)證節(jié)點(diǎn)注冊(cè)成功hdfs dfsadmin -report新節(jié)點(diǎn)狀態(tài)顯示In Service代表成功加入集群。??此時(shí)新 DN 磁盤是空的。歷史舊數(shù)據(jù)塊不會(huì)自動(dòng)跑到新節(jié)點(diǎn)只有新寫入的數(shù)據(jù)才會(huì)分配到新 DN。集群磁盤會(huì)出現(xiàn)老節(jié)點(diǎn)磁盤使用率很高新節(jié)點(diǎn)很空閑磁盤不均衡。5、執(zhí)行 HDFS 數(shù)據(jù)均衡 balancer擴(kuò)容必做Balancer 作用把已有數(shù)據(jù)塊遷移一部分到新 DataNode均衡各個(gè) DN 磁盤使用率。# 啟動(dòng)均衡默認(rèn)閾值10%各個(gè)節(jié)點(diǎn)磁盤使用率相差不超過(guò)10%就停止 hdfs balancer -threshold 10參數(shù)說(shuō)明-threshold磁盤偏差百分比調(diào)小均衡更徹底消耗更多網(wǎng)絡(luò) IO。均衡會(huì)占用集群帶寬業(yè)務(wù)低峰執(zhí)行避開高峰??梢韵拗凭鈳挿乐勾驖M網(wǎng)卡hdfs dfsadmin -setBalancerBandwidth 104857600 # 單位byte100MB/sHadoop3 支持磁盤級(jí)均衡 diskbalancer單臺(tái) DataNode 內(nèi)部多塊磁盤之間做數(shù)據(jù)均衡。hdfs diskbalancer -plan dn?new01 hdfs diskbalancer -execute dn?new01.plan.json二、YARN 側(cè)擴(kuò)容新節(jié)點(diǎn)啟動(dòng) NodeManager 后自動(dòng)注冊(cè) ResourceManagerYARN 資源立刻增加不需要額外均衡。YARN 容器調(diào)度 RM 自動(dòng)分配。三、擴(kuò)容常見坑忘記執(zhí)行 balancer新節(jié)點(diǎn)磁盤空閑老節(jié)點(diǎn)磁盤打滿存儲(chǔ)資源沒(méi)有充分利用。balancer 運(yùn)行很慢數(shù)據(jù)量大調(diào)大帶寬放到凌晨低峰運(yùn)行。balancer 不工作集群處于安全模式先退出安全模式副本數(shù)設(shè)置過(guò)高存在退役中的節(jié)點(diǎn)會(huì)阻塞 balancer。host 解析、時(shí)間不同步DN 注冊(cè)不上 NameNode。四、HDFS 擴(kuò)容 vs 縮容對(duì)比表項(xiàng)目擴(kuò)容新增 DN縮容下線 DN decommission核心動(dòng)作新節(jié)點(diǎn)加入不會(huì)自動(dòng)遷移舊數(shù)據(jù)舊節(jié)點(diǎn)數(shù)據(jù)塊主動(dòng)遷出到其他 DN數(shù)據(jù)遷移觸發(fā)需要手動(dòng)執(zhí)行balancer均衡refreshNodes后 NN 自動(dòng)遷移塊節(jié)點(diǎn)狀態(tài)In ServiceDecommissioning → Decommissioned數(shù)據(jù)風(fēng)險(xiǎn)低新節(jié)點(diǎn)為空高必須等 Decommissioned 完成再關(guān)機(jī)YARN NodeManager啟動(dòng)即注冊(cè)立刻提供資源NM 退役不殺運(yùn)行容器長(zhǎng)任務(wù) (Flink) 需要先停任務(wù)釋放容器關(guān)鍵操作hdfs balancerhdfs dfsadmin -refreshNodes觀察 decommission 狀態(tài)約束無(wú)硬性節(jié)點(diǎn)數(shù)量約束剩余 DN 數(shù) ≥ HDFS 副本數(shù)否則退役無(wú)法完成五、精簡(jiǎn)版HDFS 擴(kuò)容新增 DataNode新機(jī)器環(huán)境、配置文件和集群保持一致如果配置節(jié)點(diǎn)白名單 dfs.hosts需要把新節(jié)點(diǎn)加入白名單并 refreshNodes。啟動(dòng) DataNode同時(shí)部署 NM 則啟動(dòng) NodeManager節(jié)點(diǎn)注冊(cè)到 NN狀態(tài) In?Service 即加入集群。新節(jié)點(diǎn)剛加入不會(huì)自動(dòng)遷移歷史數(shù)據(jù)需要運(yùn)行 hdfs balancer 做數(shù)據(jù)均衡把舊數(shù)據(jù)塊遷移到新 DN平衡各節(jié)點(diǎn)磁盤使用率業(yè)務(wù)低峰執(zhí)行限制帶寬避免影響業(yè)務(wù)。Hadoop3 還支持 diskbalancer 做單節(jié)點(diǎn)內(nèi)磁盤均衡??s容是執(zhí)行 decommission 退役流程N(yùn)N 自動(dòng)遷出待下線節(jié)點(diǎn)的數(shù)據(jù)塊等待 Decommissioned 完成再關(guān)機(jī)如果機(jī)器上有 YARN 長(zhǎng)駐任務(wù)如 Flink要先 stop 任務(wù)釋放容器否則 NM 無(wú)法完成退役。 縮容必須保證剩余 DN 數(shù)量大于等于副本數(shù)否則塊副本無(wú)法滿足退役卡住。六、QA1. 擴(kuò)容完新 DN為什么磁盤使用率很低新節(jié)點(diǎn)只接收新寫入的數(shù)據(jù)歷史存量數(shù)據(jù)不會(huì)自動(dòng)過(guò)來(lái)需要 balancer 遷移。2. balancer 和 decommission 塊遷移區(qū)別decommission把待退役節(jié)點(diǎn)上所有塊全部搬走balancer在全部存活節(jié)點(diǎn)之間部分遷移塊讓磁盤使用率差距在閾值以內(nèi)。