指南)
1. 從單機到分布式為什么我們需要HDFS集群如果你已經(jīng)玩過Hadoop的單機模式把幾個文件扔進Hdfs跑過幾個MapReduce任務(wù)可能會覺得“分布式”不過如此。但當你真正面對一個需要處理TB甚至PB級別數(shù)據(jù)并且要求高可靠、高吞吐的業(yè)務(wù)場景時單機模式那點性能就成了玩具。這時候一個真正意義上的“完全分布式”HDFS集群就從“可選項”變成了“必選項”。所謂“完全分布式”核心在于“完全”二字。它意味著HDFS的各個核心服務(wù)組件——NameNode、DataNode、SecondaryNameNode等——都運行在獨立的物理或虛擬服務(wù)器上通過網(wǎng)絡(luò)協(xié)同工作。這與“偽分布式”所有服務(wù)跑在一臺機器上有本質(zhì)區(qū)別。完全分布式集群能帶來的核心價值我總結(jié)為三點數(shù)據(jù)可靠性、橫向擴展能力和計算與存儲分離。數(shù)據(jù)可靠性靠的是副本機制。在完全分布式環(huán)境中一個數(shù)據(jù)塊Block默認會被復(fù)制到集群中三個不同的DataNode上。即便某個節(jié)點硬盤損壞甚至整機宕機數(shù)據(jù)也不會丟失其他副本依然可以提供數(shù)據(jù)服務(wù)。這是單機或偽分布式模式無法提供的保障。橫向擴展能力則是應(yīng)對數(shù)據(jù)增長的法寶。當你的數(shù)據(jù)量從100GB暴漲到10TB單機硬盤和IO瓶頸立刻顯現(xiàn)。而在完全分布式集群中你只需要向集群中添加新的DataNode服務(wù)器HDFS會自動將數(shù)據(jù)均衡地分布到新老節(jié)點上存儲容量和聚合IO帶寬幾乎可以線性增長。這種“加機器就能解決問題”的樸素邏輯在大數(shù)據(jù)領(lǐng)域非常有效。最后計算與存儲分離的架構(gòu)讓HDFS集群可以作為一個獨立的、共享的、海量數(shù)據(jù)存儲池。無論是MapReduce、Spark、Hive還是Flink這些計算框架都可以從同一個HDFS集群中讀取數(shù)據(jù)并將結(jié)果寫回。這避免了數(shù)據(jù)在多個系統(tǒng)間冗余拷貝帶來的存儲成本和一致性難題。所以搭建一個完全分布式HDFS集群不是炫技而是大數(shù)據(jù)處理從“demo”走向“生產(chǎn)”的成人禮。接下來我將以一個典型的3節(jié)點集群1個Master2個Slave為例手把手帶你走完從環(huán)境準備、軟件安裝、配置修改到服務(wù)啟動、驗證測試的全過程并分享我這些年踩過的坑和積累的經(jīng)驗。2. 集群規(guī)劃與環(huán)境準備磨刀不誤砍柴工在動手敲命令之前清晰的集群規(guī)劃和扎實的環(huán)境準備能避免你后期至少80%的“靈異問題”。很多人一上來就急著裝Hadoop結(jié)果卡在SSH連不上、主機名解析失敗、防火墻沒關(guān)這些基礎(chǔ)問題上非常打擊信心。2.1 硬件與網(wǎng)絡(luò)規(guī)劃對于學習和中小規(guī)模生產(chǎn)環(huán)境我建議至少準備三臺服務(wù)器或虛擬機。它們的角色規(guī)劃如下master (192.168.1.101): 作為主控節(jié)點運行HDFS的NameNode和SecondaryNameNode服務(wù)以及YARN的ResourceManager。它是集群的“大腦”。slave1 (192.168.1.102): 作為工作節(jié)點運行HDFS的DataNode和YARN的NodeManager服務(wù)。它是存儲和計算的“苦力”。slave2 (192.168.1.103): 同slave1作為另一個工作節(jié)點。注意在生產(chǎn)環(huán)境中NameNode是絕對的單點故障SPOF。為了解決這個問題需要部署HDFS HA高可用模式通常使用兩個NameNode組成主備并通過ZooKeeper進行故障切換。本篇聚焦于基礎(chǔ)完全分布式搭建HA模式是下一個進階話題。網(wǎng)絡(luò)方面確保所有節(jié)點在同一個局域網(wǎng)段并且網(wǎng)絡(luò)穩(wěn)定、延遲低。大數(shù)據(jù)傳輸對網(wǎng)絡(luò)帶寬要求很高千兆網(wǎng)絡(luò)是起步萬兆更佳。虛擬機環(huán)境下請使用“橋接模式”或“Host-Only靜態(tài)IP”來模擬真實網(wǎng)絡(luò)環(huán)境NAT模式可能會帶來復(fù)雜的網(wǎng)絡(luò)問題。2.2 系統(tǒng)環(huán)境初始化以下操作需要在所有三臺節(jié)點上執(zhí)行。一致性是分布式系統(tǒng)的生命線。1. 配置靜態(tài)IP與主機名映射避免使用動態(tài)IP重啟后IP變化會導(dǎo)致集群通信失敗。編輯/etc/hosts文件添加所有節(jié)點的IP和主機名映射。# 在所有節(jié)點的 /etc/hosts 文件末尾添加 192.168.1.101 master 192.168.1.102 slave1 192.168.1.103 slave2同時修改每臺機器自己的主機名/etc/hostname分別設(shè)置為master,slave1,slave2并重啟生效。2. 關(guān)閉防火墻與SELinux在實驗環(huán)境或受信任的內(nèi)網(wǎng)中為了簡化問題通常選擇關(guān)閉防火墻和SELinux。生產(chǎn)環(huán)境需要根據(jù)安全策略開放特定端口。# 關(guān)閉防火墻 (CentOS 7) systemctl stop firewalld systemctl disable firewalld # 關(guān)閉SELinux (需重啟) setenforce 0 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config3. 安裝JDKHadoop是Java編寫的必須安裝JDK。推薦使用Oracle JDK 8或OpenJDK 8更高版本可能存在兼容性問題。我習慣用OpenJDK。yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel安裝后配置環(huán)境變量JAVA_HOME。編輯/etc/profile在末尾添加export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.xxx.x86_64 # 請根據(jù)實際路徑修改 export PATH$PATH:$JAVA_HOME/bin執(zhí)行source /etc/profile使配置生效并用java -version驗證。4. 創(chuàng)建專用用戶不建議直接使用root用戶運行Hadoop。創(chuàng)建一個專門的用戶如hadoop來管理集群更安全也更清晰。useradd hadoop passwd hadoop # 設(shè)置密碼5. 配置SSH免密登錄這是最關(guān)鍵的一步它讓master節(jié)點可以無需密碼就能登錄到所有slave節(jié)點包括自己以便啟動遠程進程。 首先在master節(jié)點上切換到hadoop用戶生成密鑰對su - hadoop ssh-keygen -t rsa # 一路回車使用默認路徑和空密碼然后將公鑰分發(fā)到所有節(jié)點包括master自己ssh-copy-id hadoopmaster ssh-copy-id hadoopslave1 ssh-copy-id hadoopslave2分發(fā)過程中需要輸入對應(yīng)用戶的密碼。完成后測試從masterssh hadoopslave1應(yīng)該可以直接登錄無需密碼。實操心得很多人在配置SSH免密登錄時因為用戶不一致在root下生成密鑰卻想用hadoop用戶免密、文件權(quán)限不對~/.ssh目錄權(quán)限應(yīng)為700authorized_keys文件權(quán)限應(yīng)為600而失敗。務(wù)必確保每一步的用戶和權(quán)限正確。可以用ssh -v hadoopslave1開啟調(diào)試模式查看詳細連接過程能快速定位問題。3. Hadoop軟件部署與核心配置詳解環(huán)境準備好后我們就可以開始部署Hadoop軟件本身了。這里我以Apache Hadoop 3.3.6版本為例它足夠穩(wěn)定且功能完善。3.1 軟件下載與分發(fā)在master節(jié)點上以hadoop用戶操作。# 進入用戶目錄下載Hadoop cd /home/hadoop wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz # 解壓并創(chuàng)建軟鏈接方便后續(xù)版本升級 tar -xzf hadoop-3.3.6.tar.gz ln -s hadoop-3.3.6 hadoop現(xiàn)在Hadoop的主目錄就是/home/hadoop/hadoop。接下來將這個解壓好的目錄整個復(fù)制到兩個slave節(jié)點的相同位置。scp -r /home/hadoop/hadoop-3.3.6 hadoopslave1:/home/hadoop/ scp -r /home/hadoop/hadoop-3.3.6 hadoopslave2:/home/hadoop/在slave1和slave2上同樣創(chuàng)建軟鏈接ln -s /home/hadoop/hadoop-3.3.6 /home/hadoop/hadoop這樣做的好處是所有節(jié)點的Hadoop安裝路徑完全一致后續(xù)配置文件的路徑引用不會出錯。3.2 核心配置文件修改Hadoop的配置集中在$HADOOP_HOME/etc/hadoop/目錄下。我們需要修改以下幾個核心文件。所有配置文件的修改都在master節(jié)點上進行然后同步到slave節(jié)點。1. 配置Hadoop環(huán)境變量 (hadoop-env.sh)編輯$HADOOP_HOME/etc/hadoop/hadoop-env.sh找到JAVA_HOME配置行取消注釋并設(shè)置為正確的路徑。export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.xxx.x86_64你也可以在這里配置其他Hadoop進程的JVM參數(shù)比如堆內(nèi)存大小。對于學習環(huán)境可以先保持默認。2. 核心全局配置 (core-site.xml)這個文件配置Hadoop最核心的、與具體子模塊無關(guān)的屬性。最重要的是定義HDFS的默認文件系統(tǒng)URI和臨時目錄。 編輯$HADOOP_HOME/etc/hadoop/core-site.xml在configuration標簽內(nèi)添加configuration !-- 指定HDFS的NameNode地址為master節(jié)點端口為8020 -- property namefs.defaultFS/name valuehdfs://master:8020/value /property !-- 指定Hadoop運行時產(chǎn)生文件的存儲目錄如日志、臨時文件等 -- property namehadoop.tmp.dir/name value/home/hadoop/data/tmp/value /property /configurationfs.defaultFS是客戶端連接HDFS的入口地址。hadoop.tmp.dir目錄非常重要NameNode和DataNode的元數(shù)據(jù)、數(shù)據(jù)塊存儲的默認路徑都基于它。請確保hadoop用戶對這個目錄有讀寫權(quán)限。3. HDFS專屬配置 (hdfs-site.xml)這個文件專門配置HDFS相關(guān)的參數(shù)。我們需要定義副本數(shù)量、NameNode和DataNode的數(shù)據(jù)存儲路徑。 編輯$HADOOP_HOME/etc/hadoop/hdfs-site.xmlconfiguration !-- 指定HDFS副本數(shù)量我們只有2個DataNode所以設(shè)為2 -- property namedfs.replication/name value2/value /property !-- NameNode元數(shù)據(jù)存儲目錄 -- property namedfs.namenode.name.dir/name valuefile://${hadoop.tmp.dir}/dfs/name/value /property !-- DataNode數(shù)據(jù)塊存儲目錄 -- property namedfs.datanode.data.dir/name valuefile://${hadoop.tmp.dir}/dfs/data/value /property !-- SecondaryNameNode的HTTP服務(wù)器地址和端口 -- property namedfs.namenode.secondary.http-address/name valuemaster:9868/value /property /configuration這里有幾個關(guān)鍵點dfs.replication: 默認是3。因為我們只有2個DataNode如果設(shè)為3HDFS會因找不到足夠的節(jié)點存放副本而報錯。設(shè)為2是合理的。dfs.namenode.name.dir: 這里存儲的是NameNode的“賬本”即文件系統(tǒng)的元數(shù)據(jù)fsimage和編輯日志edits。這個目錄的數(shù)據(jù)極其重要一旦丟失整個HDFS文件系統(tǒng)就“失憶”了。生產(chǎn)環(huán)境必須配置多個路徑用逗號分隔進行冗余。dfs.datanode.data.dir: DataNode實際存儲數(shù)據(jù)塊Block的本地目錄。可以配置多個用逗號分隔以利用多塊磁盤。4. 工作節(jié)點列表 (workers)這個文件Hadoop 3.x之前叫slaves告訴Hadoop哪些機器是DataNode和NodeManager。 編輯$HADOOP_HOME/etc/hadoop/workers清空原有內(nèi)容添加slave1 slave2注意不要把master加進去除非你也想讓master節(jié)點同時承擔DataNode的角色不推薦Master應(yīng)該專注于管理。3.3 配置文件分發(fā)與環(huán)境變量設(shè)置在master節(jié)點上修改完所有配置文件后將它們同步到slave節(jié)點。cd /home/hadoop/hadoop/etc scp -r hadoop/ hadoopslave1:/home/hadoop/hadoop/etc/ scp -r hadoop/ hadoopslave2:/home/hadoop/hadoop/etc/最后在所有節(jié)點上為hadoop用戶配置環(huán)境變量。編輯/home/hadoop/.bashrc添加export HADOOP_HOME/home/hadoop/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HDFS_NAMENODE_USERhadoop export HDFS_DATANODE_USERhadoop export HDFS_SECONDARYNAMENODE_USERhadoop export YARN_RESOURCEMANAGER_USERhadoop export YARN_NODEMANAGER_USERhadoop最后兩行關(guān)于YARN的用戶變量是為后續(xù)可能啟動YARN做準備。執(zhí)行source ~/.bashrc使配置生效。踩坑實錄曾經(jīng)有一次所有配置看起來都正確但啟動DataNode失敗日志提示權(quán)限問題。排查了半天發(fā)現(xiàn)是$HADOOP_HOME目錄及其子目錄的所有者被誤改成了root。Hadoop進程以hadoop用戶運行沒有寫日志文件和pid文件的權(quán)限。務(wù)必確保/home/hadoop/hadoop及其下的logs,data等目錄的所有者是hadoop用戶。可以用chown -R hadoop:hadoop /home/hadoop/hadoop來修正。4. 集群的啟動、驗證與基礎(chǔ)操作配置完成后最激動人心的時刻到了——啟動集群并驗證它是否正常工作。4.1 格式化NameNode與啟動集群1. 格式化NameNode這是第一次啟動HDFS集群前必須且只能執(zhí)行一次的操作。它在dfs.namenode.name.dir指定的目錄下初始化命名空間鏡像fsimage和編輯日志edits的存儲結(jié)構(gòu)。注意格式化會清空所有HDFS數(shù)據(jù)在master節(jié)點上執(zhí)行hdfs namenode -format看到提示 “Storage directory ... has been successfully formatted” 即表示成功。如果后續(xù)啟動失敗需要重新格式化務(wù)必先刪除所有節(jié)點上hadoop.tmp.dir我們設(shè)置的是/home/hadoop/data/tmp目錄下的所有內(nèi)容否則會出現(xiàn)集群ID不一致的錯誤。2. 啟動HDFS集群Hadoop提供了便捷的腳本可以一鍵啟動/停止所有HDFS服務(wù)。 在master節(jié)點上執(zhí)行start-dfs.sh這個腳本會在master節(jié)點啟動NameNode進程。在workers文件列出的所有節(jié)點slave1, slave2上啟動DataNode進程。在master節(jié)點啟動SecondaryNameNode進程。你可以通過jps命令在各個節(jié)點上查看Java進程驗證服務(wù)是否啟動成功。master節(jié)點應(yīng)看到NameNode和SecondaryNameNode。slave1/slave2節(jié)點應(yīng)看到DataNode。如果某個進程沒有啟動首先去對應(yīng)節(jié)點的$HADOOP_HOME/logs/目錄下查看最新的日志文件如hadoop-hadoop-namenode-master.log里面通常有詳細的錯誤信息。4.2 通過Web UI與Shell命令驗證集群1. Web UI可視化監(jiān)控HDFS提供了非常友好的Web管理界面。NameNode狀態(tài)頁在瀏覽器打開http://master:9870。這是Hadoop 3.x的默認端口2.x是50070。在這里你可以看到集群概況、存儲容量、DataNode節(jié)點列表、瀏覽文件系統(tǒng)等。這是驗證集群是否正常運行的首要方式。DataNode狀態(tài)頁每個DataNode也有獨立的頁面例如http://slave1:9864可以查看該節(jié)點的存儲詳情。2. HDFS Shell基礎(chǔ)操作通過命令行與HDFS交互是最基本的技能。所有命令都以hdfs dfs或hadoop fs開頭兩者等價。# 1. 在HDFS根目錄創(chuàng)建一個測試目錄 hdfs dfs -mkdir /test # 2. 查看目錄內(nèi)容 hdfs dfs -ls / # 3. 將本地文件上傳到HDFS echo Hello, HDFS Cluster! ~/test.txt hdfs dfs -put ~/test.txt /test/ # 4. 查看HDFS上的文件內(nèi)容 hdfs dfs -cat /test/test.txt # 5. 從HDFS下載文件到本地 hdfs dfs -get /test/test.txt ~/download.txt # 6. 查看文件在HDFS上的塊信息非常重要 hdfs fsck /test/test.txt -files -blocks -locations最后一條hdfs fsck命令會顯示文件test.txt被切成了幾個塊對于小文件通常只有一個塊以及每個塊的副本分別存儲在哪些DataNode上。這是我們驗證數(shù)據(jù)副本機制是否生效的直接證據(jù)。你應(yīng)該能看到類似這樣的輸出表明這個塊的兩個副本分別存儲在slave1和slave2上。Block replica on datanode: slave1:9866 Block replica on datanode: slave2:98664.3 停止集群與常見問題排查完成測試后優(yōu)雅地停止集群stop-dfs.sh再次使用jps檢查相關(guān)進程應(yīng)該都已消失。在初次搭建過程中你可能會遇到一些典型問題問題現(xiàn)象可能原因排查步驟start-dfs.sh執(zhí)行后DataNode未啟動1. SSH免密登錄失敗。2.workers文件配置錯誤或未同步。3. slave節(jié)點上的Hadoop目錄權(quán)限不對。1. 手動ssh hadoopslave1測試免密。2. 檢查slave節(jié)點上的workers文件。3. 檢查slave節(jié)點$HADOOP_HOME的日志看是否有權(quán)限錯誤。Web UI (9870) 無法訪問1. 防火墻未關(guān)閉。2. NameNode進程啟動失敗。3. 瀏覽器訪問的IP或端口錯誤。1. 確認防火墻已關(guān)閉 (systemctl status firewalld)。2. 在master節(jié)點jps查看NameNode進程并查看其日志。執(zhí)行hdfs dfs命令報Connection refused1. NameNode服務(wù)未啟動。2.core-site.xml中fs.defaultFS配置的地址或端口錯誤。1. 檢查NameNode進程和日志。2. 核對core-site.xml配置確認端口是8020內(nèi)部RPC端口不是9870HTTP UI端口。DataNode啟動后在Web UI上看不到DataNode的集群ID與NameNode不一致。這是最經(jīng)典的問題。原因是多次格式化NameNode或清理舊數(shù)據(jù)不徹底。解決停止集群刪除所有節(jié)點上hadoop.tmp.dir和dfs.namenode.name.dir,dfs.datanode.data.dir指向的所有目錄然后重新格式化并啟動。5. 生產(chǎn)環(huán)境考量與進階配置一個能跑起來的集群只是一個開始。要讓集群穩(wěn)定、高效地服務(wù)于生產(chǎn)還需要考慮更多因素。這里分享幾個關(guān)鍵的進階配置點。5.1 多目錄配置與磁盤選擇默認配置下DataNode把所有數(shù)據(jù)塊都存到一個目錄。如果這臺服務(wù)器有多塊硬盤我們應(yīng)該讓DataNode利用所有硬盤提升IO吞吐和存儲容量。修改hdfs-site.xml中dfs.datanode.data.dir的配置property namedfs.datanode.data.dir/name valuefile:///data1/hadoop/dfs/data,file:///data2/hadoop/dfs/data,file:///data3/hadoop/dfs/data/value /property這里我假設(shè)有三塊數(shù)據(jù)盤掛載在/data1,/data2,/data3。HDFS會以輪詢round-robin的方式將數(shù)據(jù)塊寫入這些目錄。請務(wù)必確保這些目錄存在并且hadoop用戶有讀寫權(quán)限。對于NameNode的元數(shù)據(jù)目錄 (dfs.namenode.name.dir)生產(chǎn)環(huán)境強烈建議配置至少兩個不同物理磁盤的路徑以防止單盤損壞導(dǎo)致元數(shù)據(jù)完全丟失。property namedfs.namenode.name.dir/name valuefile:///disk1/hadoop/dfs/name,file:///disk2/hadoop/dfs/name/value /property5.2 關(guān)鍵參數(shù)調(diào)優(yōu)Hadoop有數(shù)百個配置參數(shù)以下是一些對性能和穩(wěn)定性影響較大的核心參數(shù)你可以在hdfs-site.xml中根據(jù)集群規(guī)模進行調(diào)整。dfs.blocksize: HDFS數(shù)據(jù)塊大小。默認128MB。對于海量大文件如日志、視頻可以適當調(diào)大如256MB或512MB以減少NameNode元數(shù)據(jù)壓力和客戶端尋址開銷。對于小文件眾多的場景調(diào)大塊尺寸意義不大反而應(yīng)考慮歸檔或使用HAR文件。dfs.namenode.handler.count: NameNode用于處理RPC請求的線程數(shù)。默認是10。在大型集群DataNode數(shù)量多或高并發(fā)訪問下需要調(diào)大此值如core數(shù) * 20。dfs.datanode.handler.count: DataNode處理RPC請求的線程數(shù)。默認是10。同樣在高并發(fā)場景下需要增加。dfs.datanode.max.transfer.threads: DataNode用于傳輸數(shù)據(jù)塊的最大線程數(shù)。默認是4096。這個值限制了單個DataNode同時處理數(shù)據(jù)流的能力在萬兆網(wǎng)絡(luò)或高性能磁盤陣列環(huán)境下可以適當調(diào)高。dfs.replication.max: 最大副本數(shù)。默認是512。這是一個安全上限一般不用改。dfs.heartbeat.interval: DataNode向NameNode發(fā)送心跳的間隔。默認3秒。保持默認即可調(diào)小會增加NameNode壓力調(diào)大會影響NameNode感知節(jié)點故障的靈敏度。調(diào)優(yōu)經(jīng)驗不要一開始就盲目修改所有參數(shù)。建議先使用默認值運行通過監(jiān)控如NameNode Web UI的“Summary”和“DataNode”標簽頁觀察集群狀態(tài)。如果發(fā)現(xiàn)RPC隊列長、處理延遲高再考慮調(diào)整handler.count相關(guān)參數(shù)。如果網(wǎng)絡(luò)和磁盤IO利用率很低但吞吐上不去可以檢查max.transfer.threads。調(diào)優(yōu)是一個“觀察-假設(shè)-調(diào)整-驗證”的持續(xù)過程。5.3 基礎(chǔ)監(jiān)控與維護命令集群跑起來后日常維護離不開幾個關(guān)鍵命令集群健康檢查:hdfs dfsadmin -report這個命令會給出集群的概覽包括總?cè)萘俊⒁延每臻g、可用空間、存活DataNode數(shù)、退役DataNode數(shù)等。這是每日巡檢的必備命令。文件系統(tǒng)檢查與修復(fù):hdfs fsck / -files -blocks -locations檢查整個HDFS根目錄下文件的健康狀態(tài)列出缺失塊、損壞塊、副本不足的塊。如果報告有損壞或缺失的塊HDFS會嘗試從其他副本恢復(fù)。但如果是所有副本都丟失數(shù)據(jù)就無法恢復(fù)了。安全模式操作: NameNode啟動時會自動進入安全模式Safe Mode此時只讀不寫等待足夠多的DataNode匯報塊信息。有時安全模式無法自動退出。hdfs dfsadmin -safemode get # 查看安全模式狀態(tài) hdfs dfsadmin -safemode leave # 強制離開安全模式謹慎使用節(jié)點退役Decommission: 當需要下線一臺DataNode時不能直接關(guān)機否則HDFS會認為節(jié)點故障并觸發(fā)副本復(fù)制造成網(wǎng)絡(luò)風暴。正確的做法是“退役”節(jié)點。在dfs.hosts.exclude指定的文件中添加要退役的節(jié)點主機名。執(zhí)行hdfs dfsadmin -refreshNodes。在Web UI上觀察該節(jié)點狀態(tài)會變?yōu)?“Decommission In Progress”。HDFS會將該節(jié)點上的數(shù)據(jù)塊緩慢復(fù)制到其他在線節(jié)點。等待所有塊復(fù)制完成節(jié)點狀態(tài)變?yōu)?“Decommissioned” 后即可安全關(guān)閉該節(jié)點。5.4 與YARN集成搭建計算集群HDFS解決了存儲問題而YARNYet Another Resource Negotiator是Hadoop 2.0引入的資源管理框架負責集群的計算資源CPU、內(nèi)存調(diào)度。一個完整的Hadoop集群通常是HDFS YARN。搭建YARN集群的步驟與HDFS類似配置YARN修改$HADOOP_HOME/etc/hadoop/yarn-site.xml指定ResourceManager主機通常是master等參數(shù)。配置MapReduce修改$HADOOP_HOME/etc/hadoop/mapred-site.xml指定使用YARN作為計算框架。啟動YARN在master節(jié)點運行start-yarn.sh啟動ResourceManager在workers節(jié)點上會自動啟動NodeManager。驗證訪問http://master:8088查看YARN的Web UI并提交一個示例MapReduce任務(wù)如hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 2 5來測試整個Hadoop集群存儲計算是否正常工作。至此一個功能完備的HDFS完全分布式集群就已經(jīng)搭建并配置完成。從環(huán)境準備、軟件部署、配置詳解到啟動驗證和進階考量這個過程幾乎涵蓋了所有基礎(chǔ)環(huán)節(jié)。記住搭建只是第一步后續(xù)的監(jiān)控、調(diào)優(yōu)、擴容和安全加固如Kerberos認證才是更長期的挑戰(zhàn)。但有了這個堅實的基礎(chǔ)你就能自信地在這個集群之上去構(gòu)建更復(fù)雜的數(shù)據(jù)處理應(yīng)用了。