 WSL 2 安裝 Hadoop 3.1.3 單機(jī)環(huán)境完整指南)
1. 項(xiàng)目概述為什么要在Windows上折騰Hadoop如果你和我一樣主要工作環(huán)境是Windows但又需要學(xué)習(xí)、測(cè)試或者開(kāi)發(fā)基于Hadoop的大數(shù)據(jù)應(yīng)用那么直接在Windows上安裝一個(gè)單機(jī)版的Hadoop就成了一個(gè)繞不開(kāi)的“必修課”。很多人一聽(tīng)到Hadoop第一反應(yīng)就是Linux集群覺(jué)得在Windows上搞這個(gè)純屬自找麻煩。但說(shuō)實(shí)話(huà)對(duì)于絕大多數(shù)開(kāi)發(fā)者、學(xué)生或者數(shù)據(jù)分析師來(lái)說(shuō)我們需要的并不是一個(gè)生產(chǎn)級(jí)別的、多節(jié)點(diǎn)的高可用集群而是一個(gè)能在本機(jī)快速搭建、用于代碼調(diào)試、功能驗(yàn)證和學(xué)習(xí)原理的沙箱環(huán)境。Hadoop 3.1.3是一個(gè)比較經(jīng)典的穩(wěn)定版本雖然現(xiàn)在有更新的3.2.x、3.3.x但3.1.3的文檔和社區(qū)資源非常豐富踩坑時(shí)更容易找到解決方案對(duì)于入門(mén)和日常開(kāi)發(fā)測(cè)試來(lái)說(shuō)完全夠用。在Windows上安裝它核心目的就是模擬一個(gè)完整的Hadoop運(yùn)行環(huán)境讓你能夠運(yùn)行MapReduce程序、操作HDFS文件系統(tǒng)甚至跑一跑Hive、Spark on YARN等上層應(yīng)用而無(wú)需額外準(zhǔn)備Linux服務(wù)器或虛擬機(jī)極大提升了學(xué)習(xí)和開(kāi)發(fā)前期的效率。當(dāng)然Windows并非Hadoop的原生支持平臺(tái)所以整個(gè)過(guò)程會(huì)涉及到一些“非標(biāo)準(zhǔn)”操作比如需要借助一些工具來(lái)提供Linux環(huán)境下的基礎(chǔ)服務(wù)。別擔(dān)心我會(huì)把每一步的原理、可能遇到的坑以及我的解決經(jīng)驗(yàn)都詳細(xì)拆解出來(lái)。只要你跟著步驟走保持耐心在Windows 10或Windows 11上成功跑起Hadoop 3.1.3是完全可以實(shí)現(xiàn)的。整個(gè)過(guò)程我們追求的不是極致的性能而是環(huán)境的可用性、穩(wěn)定性和可復(fù)現(xiàn)性。2. 核心思路與前置準(zhǔn)備模擬Linux環(huán)境是關(guān)鍵在Linux上安裝Hadoop相對(duì)直接因?yàn)槠涞讓右蕾?lài)如Shell環(huán)境、文件系統(tǒng)權(quán)限、原生庫(kù)都是現(xiàn)成的。而在Windows上我們需要一個(gè)“橋梁”來(lái)滿(mǎn)足這些依賴(lài)。主流方案有兩種使用Cygwin或使用Windows Subsystem for Linux (WSL)。我這里強(qiáng)烈推薦并詳細(xì)講解基于WSL的方案因?yàn)樗咏鶯inux性能損耗小且與Windows系統(tǒng)集成度更高管理起來(lái)更方便。2.1 方案選型為什么是WSL而不是CygwinCygwin是一個(gè)在Windows上模擬POSIX兼容環(huán)境的大型工具集它通過(guò)一個(gè)兼容層cygwin1.dll將Linux API調(diào)用翻譯成Windows API。早期很多在Windows上運(yùn)行Hadoop的教程都基于Cygwin。但它有幾個(gè)明顯缺點(diǎn)性能開(kāi)銷(xiāo)兼容層帶來(lái)了額外的性能損耗。路徑問(wèn)題Cygwin的路徑如/cygdrive/c/Users與Windows路徑C:\Users需要轉(zhuǎn)換在配置Hadoop時(shí)容易混淆。環(huán)境復(fù)雜安裝包龐大需要手動(dòng)選擇很多開(kāi)發(fā)包對(duì)新手不友好。WSLWindows Subsystem for Linux則是微軟官方提供的、在Windows內(nèi)核之上運(yùn)行一個(gè)完整的Linux兼容層。WSL 2更是基于輕量級(jí)虛擬機(jī)技術(shù)提供了完整的Linux內(nèi)核。它的優(yōu)勢(shì)在于近乎原生性能文件I/O、網(wǎng)絡(luò)等性能接近原生Linux。無(wú)縫交互可以直接在Windows資源管理器中訪(fǎng)問(wèn)Linux文件系統(tǒng)\\wsl$也可以在Linux中通過(guò)/mnt/c訪(fǎng)問(wèn)Windows盤(pán)符路徑處理清晰。系統(tǒng)集成好通過(guò)wsl命令在Windows終端如Windows Terminal中直接啟動(dòng)Linux Shell體驗(yàn)流暢。因此我們的核心思路就是在Windows上啟用WSL 2并安裝一個(gè)Linux發(fā)行版如Ubuntu然后在這個(gè)Linux子系統(tǒng)中安裝和配置Hadoop。這樣Hadoop實(shí)際上是運(yùn)行在一個(gè)“真正的”Linux環(huán)境中只是這個(gè)環(huán)境被Windows托管了。2.2 準(zhǔn)備工作清單在開(kāi)始安裝Hadoop之前我們需要確保Windows環(huán)境就緒。請(qǐng)按順序完成以下檢查與安裝操作系統(tǒng)版本確保你的Windows 10版本為2004及以上內(nèi)部版本19041及以上或者Windows 11。這是支持WSL 2的最低要求??梢栽凇霸O(shè)置”-“系統(tǒng)”-“關(guān)于”中查看。啟用WSL功能以管理員身份打開(kāi)Windows PowerShell或命令提示符運(yùn)行以下命令。這會(huì)啟用“適用于Linux的Windows子系統(tǒng)”和“虛擬機(jī)平臺(tái)”兩個(gè)可選功能。dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart執(zhí)行后務(wù)必重啟電腦使更改生效。設(shè)置WSL 2為默認(rèn)版本重啟后再次以管理員身份打開(kāi)PowerShell運(yùn)行wsl --set-default-version 2如果提示W(wǎng)SL 2需要內(nèi)核更新請(qǐng)根據(jù)提示鏈接下載并安裝“WSL2 Linux內(nèi)核更新包”。安裝Linux發(fā)行版打開(kāi)Microsoft Store搜索“Ubuntu”。建議選擇最新的LTS版本例如“Ubuntu 22.04 LTS”。點(diǎn)擊獲取并安裝。安裝完成后從開(kāi)始菜單啟動(dòng)Ubuntu它會(huì)完成初始設(shè)置要求你創(chuàng)建用戶(hù)名和密碼。這個(gè)用戶(hù)名和密碼很重要后續(xù)會(huì)頻繁使用。驗(yàn)證WSL版本安裝好Ubuntu后在Windows PowerShell中運(yùn)行wsl -l -v你應(yīng)該能看到安裝的發(fā)行版如Ubuntu-22.04及其版本VERSION列應(yīng)為2。注意如果你的網(wǎng)絡(luò)環(huán)境訪(fǎng)問(wèn)Microsoft Store有困難也可以手動(dòng)下載Linux發(fā)行版的Appx包進(jìn)行離線(xiàn)安裝。但通過(guò)Store安裝是最簡(jiǎn)單的方式。至此你的Windows已經(jīng)擁有了一個(gè)完整的Linux運(yùn)行環(huán)境。接下來(lái)所有的操作除非特別說(shuō)明都將在WSL中的Ubuntu終端里進(jìn)行。3. 詳細(xì)安裝與配置步驟實(shí)錄現(xiàn)在我們進(jìn)入WSL的Ubuntu環(huán)境開(kāi)始Hadoop的安裝之旅。打開(kāi)Windows Terminal推薦或PowerShell輸入wsl或ubuntu命令即可進(jìn)入U(xiǎn)buntu命令行。3.1 基礎(chǔ)環(huán)境配置用戶(hù)、SSH與JavaHadoop分布式運(yùn)行需要SSH免密登錄即使單機(jī)模式某些腳本也會(huì)檢查SSH服務(wù)。同時(shí)Hadoop是Java編寫(xiě)的所以JDK是必須的。3.1.1 更新系統(tǒng)與創(chuàng)建Hadoop專(zhuān)用用戶(hù)雖然可以使用安裝時(shí)創(chuàng)建的個(gè)人用戶(hù)但為了環(huán)境隔離和避免權(quán)限問(wèn)題我習(xí)慣為Hadoop創(chuàng)建一個(gè)專(zhuān)用用戶(hù)。# 首先更新軟件包列表 sudo apt update sudo apt upgrade -y # 創(chuàng)建名為 hadoop 的用戶(hù)并設(shè)置密碼按提示輸入 sudo adduser hadoop系統(tǒng)會(huì)提示你設(shè)置密碼和填寫(xiě)一些信息密碼可以簡(jiǎn)單點(diǎn)如hadoop其他信息可以直接回車(chē)跳過(guò)。接下來(lái)我們需要給這個(gè)新用戶(hù)添加sudo權(quán)限方便后續(xù)安裝軟件sudo usermod -aG sudo hadoop然后切換到hadoop用戶(hù)進(jìn)行操作su - hadoop輸入你剛才設(shè)置的密碼。你會(huì)發(fā)現(xiàn)命令行提示符的用戶(hù)名變成了hadoop。3.1.2 配置SSH免密登錄Hadoop的啟動(dòng)腳本如start-dfs.sh,start-yarn.sh需要通過(guò)SSH連接到各個(gè)節(jié)點(diǎn)包括本地來(lái)啟動(dòng)守護(hù)進(jìn)程。配置免密登錄后這些腳本才能無(wú)干預(yù)運(yùn)行。# 1. 安裝SSH服務(wù)器和客戶(hù)端 sudo apt install openssh-server openssh-client -y # 2. 生成SSH密鑰對(duì)。一路回車(chē)使用默認(rèn)位置和不設(shè)置密碼。 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 3. 將公鑰追加到授權(quán)密鑰文件并設(shè)置正確的權(quán)限 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys # 4. 測(cè)試SSH連接到本機(jī)是否不需要密碼 ssh localhost第一次SSH連接時(shí)會(huì)詢(xún)問(wèn)是否將主機(jī)加入已知主機(jī)列表輸入yes。如果配置成功你應(yīng)該能直接登錄到本機(jī)而不需要輸入密碼。執(zhí)行exit命令退出SSH會(huì)話(huà)回到原來(lái)的終端。實(shí)操心得如果ssh localhost仍然要求輸入密碼99%的原因是~/.ssh目錄或authorized_keys文件的權(quán)限不對(duì)。確保.ssh目錄權(quán)限為700 (chmod 700 ~/.ssh)authorized_keys文件權(quán)限為600。3.1.3 安裝Java (JDK 8)Hadoop 3.1.3官方兼容JDK 8。雖然更高版本也可能工作但為了最大程度避免兼容性問(wèn)題我們安裝OpenJDK 8。sudo apt install openjdk-8-jdk -y安裝完成后驗(yàn)證安裝java -version你應(yīng)該看到類(lèi)似openjdk version 1.8.0_392的輸出。接下來(lái)需要配置JAVA_HOME環(huán)境變量。首先找到JDK的安裝路徑update-alternatives --config java記下路徑例如/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java。那么JAVA_HOME就是其上級(jí)目錄的上級(jí)目錄/usr/lib/jvm/java-8-openjdk-amd64。編輯hadoop用戶(hù)的bash配置文件nano ~/.bashrc在文件末尾添加以下行請(qǐng)根據(jù)你實(shí)際查到的路徑修改export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin保存退出CtrlX然后按Y再回車(chē)。讓配置立即生效source ~/.bashrc驗(yàn)證JAVA_HOMEecho $JAVA_HOME應(yīng)該正確輸出你設(shè)置的路徑。3.2 Hadoop 3.1.3 安裝與核心配置3.2.1 下載與解壓我們切換到hadoop用戶(hù)的家目錄進(jìn)行操作。cd ~使用wget從Apache鏡像下載Hadoop 3.1.3二進(jìn)制包。如果下載速度慢可以先用瀏覽器從 Apache Hadoop官網(wǎng) 找到下載鏈接然后在WSL里用wget加鏈接下載。wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz下載完成后解壓并移動(dòng)到合適的目錄。我習(xí)慣放在/usr/local下但為了權(quán)限方便我們先解壓到當(dāng)前用戶(hù)目錄然后建立軟鏈接或直接配置環(huán)境變量。tar -xzvf hadoop-3.1.3.tar.gz mv hadoop-3.1.3 ~/hadoop # 重命名并移動(dòng)到用戶(hù)目錄下方便管理現(xiàn)在Hadoop的主目錄就是/home/hadoop/hadoop。3.2.2 配置環(huán)境變量同樣編輯~/.bashrc文件nano ~/.bashrc在文件末尾添加Hadoop相關(guān)環(huán)境變量export HADOOP_HOME/home/hadoop/hadoop export HADOOP_INSTALL$HADOOP_HOME export HADOOP_MAPRED_HOME$HADOOP_HOME export HADOOP_COMMON_HOME$HADOOP_HOME export HADOOP_HDFS_HOME$HADOOP_HOME export YARN_HOME$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR$HADOOP_HOME/lib/native export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin保存退出并使其生效source ~/.bashrc驗(yàn)證輸入hadoop version應(yīng)該能看到Hadoop 3.1.3的版本信息。3.2.3 修改Hadoop配置文件最關(guān)鍵的一步Hadoop的配置文件位于$HADOOP_HOME/etc/hadoop/目錄下。我們需要修改以下幾個(gè)核心文件。請(qǐng)務(wù)必仔細(xì)核對(duì)每項(xiàng)配置。1.hadoop-env.sh配置Hadoop運(yùn)行環(huán)境。cd $HADOOP_HOME/etc/hadoop nano hadoop-env.sh找到export JAVA_HOME這一行取消注釋并設(shè)置為我們之前找到的JDK路徑export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64還可以在同一文件中設(shè)置Hadoop的日志目錄等但默認(rèn)即可。2.core-site.xmlHadoop核心配置定義文件系統(tǒng)默認(rèn)的URI和臨時(shí)目錄。nano core-site.xml在configuration標(biāo)簽內(nèi)添加configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value descriptionHDFS的默認(rèn)訪(fǎng)問(wèn)地址和端口/description /property property namehadoop.tmp.dir/name value/home/hadoop/hadoopdata/tmp/value descriptionHadoop臨時(shí)文件存儲(chǔ)目錄非常重要NameNode和DataNode的數(shù)據(jù)目錄會(huì)基于此生成。/description /property /configuration注意hadoop.tmp.dir的路徑需要提前創(chuàng)建并且hadoop用戶(hù)要有讀寫(xiě)權(quán)限。我們稍后創(chuàng)建。3.hdfs-site.xmlHDFS相關(guān)配置如副本數(shù)、數(shù)據(jù)存儲(chǔ)路徑。nano hdfs-site.xml在configuration標(biāo)簽內(nèi)添加。因?yàn)槭菃螜C(jī)模式我們把副本數(shù)設(shè)為1并明確指定NameNode和DataNode的數(shù)據(jù)存儲(chǔ)目錄。configuration property namedfs.replication/name value1/value description數(shù)據(jù)塊副本數(shù)量單機(jī)模式設(shè)為1/description /property property namedfs.namenode.name.dir/name valuefile:///home/hadoop/hadoopdata/dfs/name/value descriptionNameNode元數(shù)據(jù)存儲(chǔ)路徑/description /property property namedfs.datanode.data.dir/name valuefile:///home/hadoop/hadoopdata/dfs/data/value descriptionDataNode數(shù)據(jù)塊存儲(chǔ)路徑/description /property /configuration4.mapred-site.xmlMapReduce框架配置指定使用YARN作為資源調(diào)度器。nano mapred-site.xmlconfiguration property namemapreduce.framework.name/name valueyarn/value description指定MapReduce作業(yè)運(yùn)行在YARN框架上/description /property /configuration5.yarn-site.xmlYARN資源管理器配置。nano yarn-site.xmlconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value descriptionNodeManager上運(yùn)行的附屬服務(wù)MapReduce需要shuffle服務(wù)/description /property property nameyarn.nodemanager.aux-services.mapreduce_shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property property nameyarn.resourcemanager.hostname/name valuelocalhost/value descriptionResourceManager運(yùn)行的主機(jī)名/description /property /configuration3.2.4 創(chuàng)建必要的目錄并設(shè)置權(quán)限根據(jù)配置文件中的路徑創(chuàng)建所有需要的目錄mkdir -p ~/hadoopdata/tmp mkdir -p ~/hadoopdata/dfs/name mkdir -p ~/hadoopdata/dfs/data確保hadoop用戶(hù)擁有這些目錄的所有權(quán)chown -R hadoop:hadoop ~/hadoopdata chmod -R 755 ~/hadoopdata4. 啟動(dòng)、驗(yàn)證與基礎(chǔ)操作經(jīng)過(guò)漫長(zhǎng)的配置終于到了激動(dòng)人心的啟動(dòng)時(shí)刻。4.1 格式化HDFS這是第一次啟動(dòng)前必須且只能執(zhí)行一次的操作它會(huì)初始化NameNode的元數(shù)據(jù)存儲(chǔ)目錄。如果后續(xù)啟動(dòng)失敗需要重新格式化務(wù)必先徹底刪除~/hadoopdata/dfs/name和~/hadoopdata/dfs/data目錄下的所有內(nèi)容否則可能導(dǎo)致數(shù)據(jù)不一致。hdfs namenode -format看到類(lèi)似 “Storage directory /home/hadoop/hadoopdata/dfs/name has been successfully formatted” 的提示說(shuō)明格式化成功。4.2 啟動(dòng)Hadoop守護(hù)進(jìn)程Hadoop提供了便捷的腳本啟動(dòng)所有服務(wù)。我們先啟動(dòng)HDFS。start-dfs.sh這個(gè)腳本會(huì)啟動(dòng)NameNode、DataNode和SecondaryNameNode。你會(huì)看到一些啟動(dòng)日志。用jps命令Java進(jìn)程查看工具來(lái)檢查是否啟動(dòng)成功jps你應(yīng)該能看到至少包含NameNode,DataNode,SecondaryNameNode的進(jìn)程列表。接下來(lái)啟動(dòng)YARNstart-yarn.sh再次運(yùn)行jps應(yīng)該會(huì)多出ResourceManager和NodeManager進(jìn)程。4.3 驗(yàn)證服務(wù)與Web UI訪(fǎng)問(wèn)Hadoop各個(gè)組件都提供了Web管理界面這是驗(yàn)證服務(wù)是否正常運(yùn)行的直觀(guān)方式。HDFS NameNode UI: 在Windows的瀏覽器中打開(kāi)http://localhost:9870。注意Hadoop 3.x 默認(rèn)NameNode的Web端口從50070改為了9870。如果頁(yè)面能打開(kāi)并顯示Overview、Datanodes等信息說(shuō)明HDFS啟動(dòng)成功。YARN ResourceManager UI: 打開(kāi)http://localhost:8088。這里可以查看集群資源使用情況和提交的作業(yè)。重要提示由于Hadoop服務(wù)運(yùn)行在WSL的Linux環(huán)境中而瀏覽器在Windows端localhost能互通是因?yàn)閃SL 2做了網(wǎng)絡(luò)橋接。如果無(wú)法訪(fǎng)問(wèn)請(qǐng)檢查WSL 2的防火墻設(shè)置或者嘗試在WSL內(nèi)部用curl http://localhost:9870測(cè)試服務(wù)是否在監(jiān)聽(tīng)。4.4 基礎(chǔ)HDFS操作體驗(yàn)現(xiàn)在讓我們?cè)诿钚兄畜w驗(yàn)一下HDFS的基本操作感受一下這個(gè)“分布式”文件系統(tǒng)。# 1. 在HDFS上創(chuàng)建一個(gè)用戶(hù)目錄類(lèi)似于Linux的/home hdfs dfs -mkdir -p /user/hadoop # 2. 從本地文件系統(tǒng)上傳一個(gè)文件到HDFS。先創(chuàng)建一個(gè)測(cè)試文件。 echo Hello, Hadoop on Windows with WSL! ~/test.txt hdfs dfs -put ~/test.txt /user/hadoop/ # 3. 查看HDFS上的文件列表 hdfs dfs -ls /user/hadoop # 4. 查看HDFS上文件的內(nèi)容 hdfs dfs -cat /user/hadoop/test.txt # 5. 從HDFS下載文件到本地 hdfs dfs -get /user/hadoop/test.txt ~/test_download.txt cat ~/test_download.txt如果這些命令都能成功執(zhí)行那么恭喜你一個(gè)單機(jī)版的Hadoop已經(jīng)在你的Windows上完美運(yùn)行起來(lái)了4.5 運(yùn)行一個(gè)示例MapReduce作業(yè)Hadoop自帶了一些示例JAR包我們可以運(yùn)行經(jīng)典的WordCount程序來(lái)測(cè)試整個(gè)MapReduce on YARN的流程是否通暢。# 1. 在HDFS上創(chuàng)建輸入目錄并上傳一些文本文件作為輸入。 # 我們可以用Hadoop的配置文件作為輸入源。 hdfs dfs -mkdir /user/hadoop/input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/hadoop/input/ # 2. 運(yùn)行WordCount示例程序。 # hadoop-mapreduce-examples-3.1.3.jar 包含了各種示例。 # 指定輸入目錄和輸出目錄輸出目錄必須不存在。 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/input /user/hadoop/output # 3. 觀(guān)察YARN Web UI (http://localhost:8088)你會(huì)看到一個(gè)新的應(yīng)用被提交和運(yùn)行。 # 等待作業(yè)完成。完成后查看輸出結(jié)果。 hdfs dfs -cat /user/hadoop/output/part-r-00000 | head -20你會(huì)看到各個(gè)單詞及其出現(xiàn)的次數(shù)。至此你的Hadoop環(huán)境已經(jīng)具備了完整的HDFS存儲(chǔ)和MapReduce計(jì)算能力。5. 常見(jiàn)問(wèn)題與故障排查實(shí)錄在WindowsWSL環(huán)境下安裝Hadoop雖然步驟清晰但依然可能遇到一些特有的問(wèn)題。下面是我在多次安裝中總結(jié)的“坑”和解決方案。5.1 WSL相關(guān)網(wǎng)絡(luò)與權(quán)限問(wèn)題問(wèn)題1Hadoop Web UI (9870, 8088) 在Windows瀏覽器中無(wú)法訪(fǎng)問(wèn)。排查首先在WSL內(nèi)部用curl http://localhost:9870測(cè)試。如果WSL內(nèi)能訪(fǎng)問(wèn)說(shuō)明服務(wù)正常是Windows到WSL的網(wǎng)絡(luò)問(wèn)題。解決獲取WSL 2的IP地址在WSL中運(yùn)行ip addr show eth0 | grep inet。你會(huì)看到一個(gè)類(lèi)似172.x.x.x的IP。在Windows瀏覽器中用這個(gè)IP地址替換localhost訪(fǎng)問(wèn)如http://172.x.x.x:9870。更一勞永逸的方法在WSL中編輯Hadoop配置文件將localhost綁定到0.0.0.0或者直接使用WSL的主機(jī)名。但最簡(jiǎn)單還是用IP訪(fǎng)問(wèn)。問(wèn)題2啟動(dòng)腳本報(bào)錯(cuò) “Connection refused” 或 SSH相關(guān)錯(cuò)誤。排查執(zhí)行ssh localhost是否真的免密。檢查~/.ssh目錄權(quán)限必須700authorized_keys文件權(quán)限必須600。解決確保SSH服務(wù)正在運(yùn)行sudo service ssh status。如果沒(méi)運(yùn)行啟動(dòng)它sudo service ssh start。還可以將SSH服務(wù)設(shè)為開(kāi)機(jī)自啟sudo systemctl enable sshWSL 2可能需要額外配置systemd支持。5.2 Hadoop啟動(dòng)與運(yùn)行報(bào)錯(cuò)問(wèn)題3執(zhí)行start-dfs.sh后jps看不到 NameNode 或 DataNode。排查查看日志日志是排錯(cuò)的生命線(xiàn)。Hadoop的日志默認(rèn)在$HADOOP_HOME/logs/目錄下。查看最新的對(duì)應(yīng)日志文件如hadoop-hadoop-namenode-主機(jī)名.log。常見(jiàn)原因與解決端口被占用Hadoop默認(rèn)使用9000、9870、50070等端口。用netstat -tlnp | grep :9000查看。如果被占用可以修改core-site.xml中的fs.defaultFS端口或者停止占用端口的程序。目錄權(quán)限不足確保hadoop.tmp.dir以及HDFS數(shù)據(jù)目錄dfs.namenode.name.dir,dfs.datanode.data.dir的所屬用戶(hù)和組是hadoop并且有讀寫(xiě)權(quán)限。用ls -ld 目錄路徑檢查。多次格式化導(dǎo)致ClusterID不一致如果DataNode的VERSION文件中的clusterID與NameNode的不一致DataNode就無(wú)法啟動(dòng)。解決方法停止所有服務(wù)刪除dfs.name.dir和dfs.data.dir目錄下的所有內(nèi)容重新格式化NameNode (hdfs namenode -format)再啟動(dòng)。問(wèn)題4運(yùn)行MapReduce作業(yè)失敗YARN Web UI顯示作業(yè)狀態(tài)為 FAILED。排查點(diǎn)擊失敗的應(yīng)用ID進(jìn)入應(yīng)用詳情頁(yè)查看Logs鏈接特別是stderr和syslog。常見(jiàn)原因內(nèi)存不足WSL默認(rèn)分配的內(nèi)存可能較小??梢栽赪indows用戶(hù)目錄下的.wslconfig文件如C:\Users\你的用戶(hù)名\.wslconfig中增加內(nèi)存限制[wsl2] memory4GB # 根據(jù)你的機(jī)器情況調(diào)整建議至少4G processors2修改后在PowerShell中執(zhí)行wsl --shutdown關(guān)閉WSL再重新打開(kāi)。本地庫(kù)Native Library問(wèn)題某些Hadoop功能依賴(lài)本地庫(kù)??梢試L試在$HADOOP_HOME/etc/hadoop/hadoop-env.sh中添加export HADOOP_OPTS-Djava.library.path$HADOOP_HOME/lib/native。或者直接忽略對(duì)于基礎(chǔ)WordCount影響不大。5.3 日常使用與維護(hù)技巧停止服務(wù)與啟動(dòng)腳本對(duì)應(yīng)使用stop-yarn.sh和stop-dfs.sh來(lái)優(yōu)雅地停止服務(wù)。重置環(huán)境如果你想從頭再來(lái)最干凈的方式是停止所有Hadoop進(jìn)程。刪除Hadoop數(shù)據(jù)目錄rm -rf ~/hadoopdata刪除Hadoop安裝目錄如果你想重裝rm -rf ~/hadoop重新解壓、配置、格式化、啟動(dòng)。資源清理長(zhǎng)期使用后HDFS會(huì)存儲(chǔ)數(shù)據(jù)MapReduce作業(yè)會(huì)產(chǎn)生中間文件。定期清理不用的數(shù)據(jù)hdfs dfs -rm -r /user/hadoop/output刪除輸出目錄。對(duì)于YARN的作業(yè)歷史日志可以配置日志聚合并設(shè)置保留時(shí)間。在Windows上通過(guò)WSL運(yùn)行Hadoop本質(zhì)上是在一個(gè)高度集成的Linux容器中運(yùn)行它。這帶來(lái)了近乎原生的體驗(yàn)同時(shí)又保留了Windows主系統(tǒng)的便利性。對(duì)于學(xué)習(xí)、開(kāi)發(fā)和輕量級(jí)測(cè)試而言這套方案已經(jīng)非常成熟和可靠。最大的挑戰(zhàn)往往來(lái)自于最初的環(huán)境配置和網(wǎng)絡(luò)設(shè)置一旦跨過(guò)這個(gè)坎后面就是海闊天空。