境搭建實戰(zhàn):從Linux虛擬機到WordCount跑通)
簡介面向大數(shù)據(jù)初學者與高校實驗課程使用者這份實驗指導文檔系統(tǒng)梳理了“熟悉常用的Linux操作和Hadoop操作”的完整流程。內容先交代實驗目的與平臺選型再分模塊講解虛擬機安裝、常用命令操作、偽分布式部署和基礎文件管理。命令部分涉及目錄切換、文件查看、權限修改、壓縮打包、字符串查找等常見場景并配有清晰的執(zhí)行示例與結果說明Hadoop部分重點演示了單機偽分布式環(huán)境的搭建方法以及運行自帶實例驗證是否成功。文檔按實驗步驟逐條展開每個操作都給出輸入命令與預期輸出便于自主練習和排查問題末尾還補充了環(huán)境變量配置與HDFS常用操作能有效降低入門門檻。資源包僅含一個Word文檔壓縮后大小約289KB內容結構緊湊可直接打印作為實驗手冊。目前已有九百七十七人學習下載適合作為大數(shù)據(jù)課程第一次實驗的課前預習、課上對照和課后復習材料也可供教師布置與檢查作業(yè)時參考。1. Hadoop 大數(shù)據(jù)實驗的開端先把 Linux 虛擬機這關過了第一次做大數(shù)據(jù)的同學多半是卡在“裝環(huán)境”這一步Windows 上裝 Hadoop要么 shell 腳本跑不起來要么路徑分隔符和權限問題滿天飛最后發(fā)現(xiàn) Hadoop 在 Linux 上運行才能發(fā)揮最佳性能。于是實驗一的核心就落到了三件事上裝一個 Linux 虛擬機、熟悉常用 Linux 命令、在單機上把 Hadoop 偽分布式環(huán)境搭起來跑通。這篇文章按我實際搭環(huán)境的順序寫從 VirtualBox 6.1.4 裝 Ubuntu 18.04到 Hadoop 3.1.3 的四份配置文件再到最經(jīng)典的 DataNode 起不來問題每一步都給出可復現(xiàn)的命令和參數(shù)說明照著走能省掉大半天的折騰時間。2. 版本選型VirtualBox 6.1.4、Ubuntu 18.04、Hadoop 3.1.3 怎么組合最穩(wěn)2.1 為什么推薦 Ubuntu 18.04 而不是更新版本Hadoop 偽分布式環(huán)境對操作系統(tǒng)沒有硬性限制但在實驗場景里Ubuntu 18.04 搭配 Hadoop 3.1.3 是踩坑最少的組合。18.04 的 glibc 版本和 JDK 8 配合得很好apt 源里直接能裝 openjdk-8-jdk不用折騰 PPA。相對地20.04 和 22.04 默認的 OpenSSH 配置和 Python 版本會讓 start-dfs.sh 的免密登錄環(huán)節(jié)多出一些意外比如 ssh-keygen 生成的密鑰格式不被舊版本接受或者 sshd 默認禁止了空密碼密鑰登錄。Ubuntu 16.04 也能做實驗但系統(tǒng)已經(jīng)進入 EOL 狀態(tài)apt 源默認指向的 archive 地址失效安裝前需要手動把源改成 old-releases對新手來說又多了一道工序。因此建議直接下載 18.04 的桌面版鏡像安裝時選擇“清除整個磁盤并安裝 Ubuntu”虛擬機里不需要雙系統(tǒng)后面所有操作都在虛擬機內完成。若你已經(jīng)裝好了 VMware 加 CentOS 7 的環(huán)境也可以繼續(xù)用只是配置文件路徑和 JDK 安裝方式和本文有差異。Hadoop 3.1.3 在 CentOS 7 上同樣能跑第 5 章的 DataNode 排查部分我會把這個差異單獨講。2.2 VirtualBox 安裝與虛擬機創(chuàng)建參數(shù)VirtualBox 6.1.4 的 Windows 安裝包從官方倉庫下載約 100MB安裝過程一路默認即可不需要額外勾選擴展包。創(chuàng)建虛擬機時有幾個參數(shù)會影響后面的實驗列一張表說明參數(shù)項推薦值說明內存4096 MBHadoop 偽分布式啟動多個 Java 進程2048 MB 會比較緊張磁盤20 GB 動態(tài)分配Hadoop 安裝包加日志數(shù)據(jù)約 5 GB20 GB 留出編譯和快照空間顯存16 MBUbuntu 桌面版顯示足夠網(wǎng)絡NAT Host-OnlyNAT 用于虛擬機上網(wǎng)Host-Only 用于宿主機 SSH 連接CPU 核數(shù)2啟動編譯或跑 MapReduce 時更快磁盤格式選 VDI動態(tài)分配實際占用會隨著數(shù)據(jù)增長變大不用一開始就分滿。網(wǎng)絡部分如果只做實驗NAT 模式默認就能訪問外網(wǎng)虛擬機內部使用 22 端口 SSH 不受影響但如果計劃從 Windows 宿主機直接訪問 Hadoop 的 9870 管理頁面就需要配置端口轉發(fā)規(guī)則這一條在第 5 章踩坑部分會展開。2.3 裝完 Ubuntu 后先補三件套SSH、JDK、apt 源Ubuntu 18.04 安裝完成后我習慣先把系統(tǒng)源和基礎軟件搞定。VM 里打開終端執(zhí)行以下命令sudo apt update sudo apt upgrade -y sudo apt install -y openssh-server openjdk-8-jdk net-tools這一步同時完成三件事更新軟件源、安裝 SSH 服務端、安裝 OpenJDK 8。Hadoop 偽分布式啟動腳本會通過 SSH 連接 localhost 拉起進程SSH 是必須的。OpenJDK 8 是 Hadoop 3.1.3 最兼容的 Java 版本JDK 11 也能運行但某些老教程里的配置會不匹配。裝完 JDK 后確認一下路徑后面配置 JAVA_HOME 要用readlink -f $(which java)常見輸出為 /usr/lib/jvm/java-8-openjdk-amd64/bin/java去掉末尾的 bin/java 就是 JDK 的主目錄。這個路徑在配置 ~/.bashrc 和 hadoop-env.sh 時都會用到記不住也沒關系用命令查出來的最準。3. Linux 命令實操18 個高頻命令和它們的易錯參數(shù)3.1 目錄切換與查看cd、ls、mkdir、rmdir實驗從 cd /usr/local 開始。切換目錄這個操作看著基礎但要注意 cd 和 pwd 的區(qū)別cd 是改變當前目錄pwd 才是查看當前位置。cd .. 回到上一級cd ~ 回到當前用戶的主文件夾也就是 /home/用戶名 這個位置。這三個操作在后續(xù)所有實驗里都會反復用到尤其是 cd ~因為 .bashrc 文件就在主文件夾下。ls /usr 查看 /usr 目錄下的所有文件和目錄不帶 -a 參數(shù)時不會顯示隱藏文件。ls -l 可以看權限和所有者后面 chown 命令的驗證環(huán)節(jié)會用到。mkdir 命令有一個很關鍵的參數(shù) -p創(chuàng)建多級目錄時不加它就會報錯cd /tmp mkdir a mkdir -p a1/a2/a3/a4第一條 mkdir a 在 /tmp 下創(chuàng)建單層目錄沒有問題。第二條 mkdir a1/a2/a3/a4 要求父目錄 a1、a2、a3 都不存在沒有 -p 時系統(tǒng)直接提示 No such file or directory。加了 -p 后命令會遞歸創(chuàng)建整條路徑。這個參數(shù)在寫部署腳本時幾乎是標配比如創(chuàng)建日志目錄 mkdir -p /var/log/app/today。rmdir 刪除空目錄的限制是很多人的第一個絆腳石。rmdir /tmp/a 可以刪除空目錄 a但要刪除 a1/a2/a3/a4 這條鏈直接執(zhí)行 rmdir a1/a2/a3/a4 只會把最內層的 a4 刪掉因為刪除 a4 后 a3 變成空目錄但 a1、a2 仍非空。我一般會直接 rmdir -p a1/a2/a3/a4它會遞歸刪除路徑上所有變?yōu)榭盏母改夸浺徊降轿弧?.2 文件復制、移動與刪除cp、mv、rm 的細節(jié)差別cp 命令最容易翻車的是漏掉 -r 參數(shù)。復制單文件到新位置并改名cp ~/.bashrc /usr/bashrc1這條命令成功的前提是目標位置 /usr 存在且當前用戶有寫權限實際操作中可能遇到 Permission denied因為 /usr 屬于 root普通用戶沒有寫入權限需要 sudo 執(zhí)行。實驗環(huán)境里如果用 hadoop 用戶操作建議先 sudo chown -R hadoop:hadoop /usr 或改用 sudo cp。復制目錄時必須加 -rmkdir /tmp/test cp -r /tmp/test /usr/testcp -r 表示遞歸復制整個目錄樹不加 -r 時系統(tǒng)會提示 omitting directory這是 Linux 命令里出現(xiàn)頻率最高的報錯信息之一。mv 命令同時承擔移動和更名兩個職責mv /usr/bashrc1 /usr/test/bashrc1 mv /usr/test /usr/test2mv 把 bashrc1 從 /usr 移動到 /usr/test 目錄下文件內容不變把 /usr/test 重命名為 /usr/test2原地改名。理解 mv 的規(guī)則就是目標路徑是目錄就移動進去目標路徑不存在或目標路徑帶新名字就是更名。rm 命令的坑主要在目錄刪除上rm /usr/test2/bashrc1 rm -r /usr/test2rm 刪文件不需要參數(shù)rm 刪目錄必須加 -r。很多新手在這一步只輸入 rm /usr/test2系統(tǒng)報錯 Is a directory 后不知所措解決辦法就是加 -r。至于 rm -rf 這個組合實驗里可以用但要養(yǎng)成好習慣敲之前確認路徑變量非空否則一條 rm -rf /usr/local/${DIR}/ 在變量為空時會變成刪根目錄這是運維工程師的血淚教訓。3.3 文件內容查看cat、tac、more、head、tail 全家桶cat ~/.bashrc tac ~/.bashrc more ~/.bashrc head -n 20 ~/.bashrc tail -n 20 ~/.bashrc head -n -50 ~/.bashrc tail -n 50 ~/.bashrccat 正序輸出全文tac 倒序輸出全文兩個命令的拼寫恰好相反。more 適合長文件分頁查看按空格翻頁、按 q 退出它在 bash 腳本里的用處更大。head -n 20 取前 20 行tail -n 20 取最后 20 行這兩個參數(shù)最直觀。head -n -50 表示從文件開頭顯示到倒數(shù)第 50 行之前也就是不顯示最后 50 行tail -n 50 表示從第 50 行開始顯示到文件末尾。這兩個帶正負號的參數(shù)容易記反我的記憶方式是head 管開頭負數(shù)代表去掉尾部tail 管末尾正數(shù)代表從第幾行開始。實驗里要求“后面 50 行不顯示”用 head -n -50“只列出 50 行以后的數(shù)據(jù)”用 tail -n 50兩個場景剛好互補。3.4 屬性修改、文件查找與壓縮touch、chown、find、tar、greptouch /tmp/hello touch -d 5 days ago /tmp/hello chown root:root /tmp/hello find ~ -name .bashrc tar -czvf test.tar.gz /test tar -xzvf test.tar.gz -C /tmp grep examples ~/.bashrctouch 第一次執(zhí)行創(chuàng)建空文件 hello第二次執(zhí)行修改文件時間戳。-d 5 days ago 把修改時間調整為 5 天前。chown root:root 把文件所有者和所屬組都改成 root改完用 ls -l 驗證能看到文件所有者列變成 root。find ~ -name .bashrc 在主目錄下按名稱精確查找文件注意 find 的查找路徑要寫成絕對路徑或相對路徑這里 ~ 會被展開成 /home/用戶名。tar 命令的參數(shù)組合需要逐個拆開理解-c 創(chuàng)建歸檔-z 用 gzip 壓縮-v 顯示處理過程-f 指定歸檔文件名順序固定寫作 -czvf。解壓時用 -xzvf其中 -x 表示解包。最后 -C /tmp 指定解壓目標目錄這個參數(shù)在安裝軟件時很常用把壓縮包解壓到指定位置。grep examples ~/.bashrc 從 ~/.bashrc 里查找包含字符串 examples 的行輸出的每一行都會高亮匹配部分。這個命令在后面看日志、搜配置時是最常用的排查工具第 5 章排查 DataNode 問題時也要靠它定位配置路徑。3.5 環(huán)境變量配置vim 編輯 ~/.bashrc 設置 JAVA_HOMEvim ~/.bashrc在文件末尾追加兩行export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin保存退出后執(zhí)行 source ~/.bashrc 使配置立即生效最后用 echo $JAVA_HOME 驗證source ~/.bashrc echo $JAVA_HOME這一步實驗要求里明確寫了“查看 JAVA_HOME 變量的值”很多同學配置完忘了 source導致 echo 出來是空值以為配置失敗。實際上 vim 編輯后當前 shell 會話不會自動加載新的環(huán)境變量必須 source 或重新登錄。PATH 那行使用 $PATH 追加而非覆蓋這是環(huán)境變量配置的黃金規(guī)則永遠不要寫成 export PATH$JAVA_HOME/bin否則系統(tǒng)原來的命令路徑全丟了連 ls 都會找不到。4. Hadoop 3.1.3 偽分布式安裝解壓、改配置、格式化一次走完4.1 解壓安裝與目錄規(guī)劃從 Hadoop 官網(wǎng)下載 hadoop-3.1.3.tar.gz 后我一般習慣把它解壓到 /usr/local 并改名為 hadoopcd /usr/local sudo tar -xzf hadoop-3.1.3.tar.gz sudo mv hadoop-3.1.3 hadoop sudo chown -R hadoop:hadoop /usr/local/hadoop這里把目錄所有者改成當前實驗用戶避免后續(xù)每次操作都要 sudo因為 Hadoop 集群啟動后會往 logs 和 tmp 目錄寫數(shù)據(jù)如果目錄屬于 root普通用戶的啟動腳本會報權限錯誤。chown -R 遞歸修改整個目錄樹的所有者包括 hadoop-env.sh 等配置文件。解壓后的目錄結構里最需要關注的是 etc/hadoop配置文件、sbin啟動腳本、bin客戶端命令和 shareMapReduce 示例 jar 包。WordCount 示例位于 share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar第 6 章驗證時會用到。4.2 core-site.xml指定 NameNode 地址與臨時數(shù)據(jù)目錄vim /usr/local/hadoop/etc/hadoop/core-site.xml在 configuration 節(jié)點內寫入configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/usr/local/hadoop/tmp/value /property /configurationfs.defaultFS 定義 HDFS 的訪問入口偽分布式模式下使用 hdfs://localhost:9000端口 9000 是 NameNode 內部通信端口。hadoop.tmp.dir 是集群所有臨時數(shù)據(jù)的根目錄NameNode 的元數(shù)據(jù)目錄和 DataNode 的數(shù)據(jù)塊目錄都會自動創(chuàng)建在這個路徑下默認是 /tmp/hadoop-hadoop但 /tmp 目錄在系統(tǒng)重啟時可能被清理所以我總是不厭其煩地建議改成安裝目錄下的固定位置。這個參數(shù)直接影響第 5 章 DataNode 起不來的故障排查必須記住你配置的路徑。4.3 hdfs-site.xml副本數(shù)、NameNode 與 DataNode 存儲目錄vim /usr/local/hadoop/etc/hadoop/hdfs-site.xmlconfiguration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop/tmp/dfs/name/value /property property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop/tmp/dfs/data/value /property /configurationdfs.replication 設置副本數(shù)為 1是因為偽分布式只有一臺物理機數(shù)據(jù)本來只存一份副本數(shù)大于 1 也無意義。dfs.namenode.name.dir 和 dfs.datanode.data.dir 顯式指定元數(shù)據(jù)與數(shù)據(jù)塊的存放位置雖然不寫也會繼承 hadoop.tmp.dir但寫出來有兩個好處一是排查問題時能直接找到關鍵目錄二是避免某些老版本腳本解析路徑時出錯。注意屬性值里的 file: 前綴HDFS 的 URI 格式要求存儲路徑以 file: 開頭少了這個前綴會解析成 HDFS 自身路徑導致啟動時目錄創(chuàng)建失敗。這是一個很容易忽略的格式細節(jié)我在好幾個環(huán)境里都見過因此啟動失敗的案例。4.4 hadoop-env.sh 與格式化啟動vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh找到 JAVA_HOME 那一行取消注釋并改成實際 JDK 路徑export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64hadoop-env.sh 里的 JAVA_HOME 是 Hadoop 各啟動腳本直接讀取的變量。如果你只在 ~/.bashrc 里配了 JAVA_HOMEstart-dfs.sh 依然會報錯 JAVA_HOME is not set因為腳本在通過 SSH 執(zhí)行遠程命令時不會加載交互式 shell 的環(huán)境變量。這個坑的經(jīng)典程度大概僅次于 DataNode 起不來。啟動前先配置 SSH 免密ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ssh localhostssh-keygen 的 -P 表示生成空密碼密鑰-f 指定輸出文件路徑。公鑰追加到 authorized_keys 后chmod 600 設置文件權限SSH 對密鑰文件的權限要求很嚴格權限過寬會直接拒絕加載。最后 ssh localhost 能直接進入 shell 就代表免密生效。格式化與啟動hdfs namenode -format start-dfs.sh jpshdfs namenode -format 指令執(zhí)行時系統(tǒng)會在 NameNode 元數(shù)據(jù)目錄里生成 VERSION 文件里面包含 clusterId。這個 clusterId 是整個集群的身份標識。start-dfs.sh 啟動所有 HDFS 進程jps 查看進程列表。正常狀態(tài)應該看到 NameNode、DataNode、SecondaryNameNode 三個進程。只有看到這三個進程HDFS 才算真正起來了。5. 避坑排查DataNode 起不來與 Cluster-Id 不一致的完整記錄5.1 現(xiàn)象jps 少了 DataNode9870 頁面 LiveNode 為 0我用某模擬項目 X 的實驗環(huán)境部署 Hadoop 3.1.3 時第一次啟動集群一切正常但執(zhí)行了幾次格式化操作后重啟集群發(fā)現(xiàn) jps 輸出里只剩 NameNode 和 SecondaryNameNodeDataNode 進程完全消失。瀏覽器訪問 :9870 端口能看到 NameNode 的 Web 管理頁面但 Live Nodes 數(shù)量是 0。當時第一反應是 start-dfs.sh 有問題反復 stop-all.sh 再 start-all.shDataNode 還是起不來這個問題卡了將近一個小時。5.2 原因多次 namenode -format 導致 clusterId 不一致排查方向轉向日志。Hadoop 的日志都寫在 $HADOOP_HOME/logs 目錄下DataNode 的日志文件名是 hadoop-hadoop-datanode-主機名.log用 tail 看末尾幾十行tail -50 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.log日志里有一句關鍵信息namenode clusterID 與 datanode clusterID 不匹配DataNode 拒絕注冊。原因鏈條很清楚第一次執(zhí)行 hdfs namenode -format 時NameNode 生成一個 clusterId寫入 dfs/name 目錄的 VERSION 文件DataNode 啟動時在 dfs/data 目錄也會生成一份帶 clusterId 的 VERSION。如果之后再次執(zhí)行 namenode -formatNameNode 會生成一個全新的 clusterId但 DataNode 數(shù)據(jù)目錄里還是舊 clusterId。兩邊對不上DataNode 就只能不斷重試、最終放棄啟動。這個問題的誘因很常見實驗中途遇到進程異常想當然地重新格式化以為 format 是萬能后悔藥結果反而制造了新故障。格式化操作在集群已經(jīng)初始化過后不應該重復執(zhí)行除非確認要清空所有數(shù)據(jù)。5.3 解決刪除指定數(shù)據(jù)目錄并重新格式化解決辦法是清除所有舊的元數(shù)據(jù)和數(shù)據(jù)目錄讓兩個節(jié)點的 clusterId 重新一致stop-all.sh rm -rf /usr/local/hadoop/tmp/dfs hdfs namenode -format start-all.sh jps執(zhí)行前先確認數(shù)據(jù)目錄到底在哪因為正常配置過的 core-site.xml 通常會指定 hadoop.tmp.dir數(shù)據(jù)路徑往往是 $HADOOP_HOME/tmp 或你自定義的目錄。用 grep 在配置里查一下最穩(wěn)grep -A 1 hadoop.tmp.dir /usr/local/hadoop/etc/hadoop/core-site.xml我當時的 core-site.xml 里配的是 /usr/local/hadoop/tmp所以執(zhí)行 rm -rf /usr/local/hadoop/tmp/dfs 刪除整個 dfs 子目錄包括 name 和 data。重新 format 后NameNode 生成新的 clusterIdDataNode 啟動時發(fā)現(xiàn)本地 data 目錄不存在會創(chuàng)建新目錄并接受 NameNode 的 clusterId兩邊一致進程就恢復正常了。如果你用 VMware 里的 CentOS 7 做實驗且配置的路徑是 /opt/module/hadoop-3.1.3/data那就要刪 /opt/module/hadoop-3.1.3/data 整個目錄原理完全一樣。當時實驗報告里記錄的問題解決方法就是刪除 core-site.xml 中指定的緩存數(shù)據(jù)路徑然后重新格式化用 stop-all.sh 和 start-all.sh 重啟集群解決。5.4 另外三個高頻坑卡密碼、端口不通、JAVA_HOME 沒寫進文件現(xiàn)象一start-dfs.sh 執(zhí)行到 localhost 時卡住提示輸入密碼。原因SSH 免密沒有配置成功多半是 authorized_keys 文件權限不對或者公鑰沒有正確追加。解決方式確認 ~/.ssh 目錄權限是 700authorized_keys 權限是 600然后手動執(zhí)行 ssh localhost 看是否能直接登錄如果還需要密碼就重新執(zhí)行 ssh-keygen 和追加公鑰的流程?,F(xiàn)象二宿主機瀏覽器訪問虛擬機 9870 頁面打不開。原因VirtualBox NAT 模式下宿主機無法直接訪問虛擬機內的端口KVM 或 VMware 的 NAT 也一樣需要轉發(fā)規(guī)則。解決方式在 VirtualBox 設置中配置端口轉發(fā)規(guī)則把宿主機的 9870 端口映射到虛擬機 IP 的 9870 端口或者在虛擬機內用 curl http://localhost:9870 先驗證服務本身正常排除服務端問題后再處理網(wǎng)絡映射。現(xiàn)象三執(zhí)行 start-dfs.sh 報錯 JAVA_HOME is not set and could not be found。原因只在 ~/.bashrc 配了環(huán)境變量hadoop-env.sh 文件里的 JAVA_HOME 還是空值。解決方式編輯 etc/hadoop/hadoop-env.sh把 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 寫到文件里注意不要加空格和引號重啟集群后生效。6. 驗證跑通WordCount 實例與 HDFS 文件操作檢查6.1 用自帶 WordCount 驗證 MapReduce 鏈路集群啟動后最可靠的驗證方式不是只看 jps而是真正跑一個 MapReduce 作業(yè)。Hadoop 3.1.3 自帶 wordcount 示例位于 share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar。先創(chuàng)建 HDFS 測試目錄并上傳文件hdfs dfs -mkdir -p /user/hadoop/test hdfs dfs -put ~/.bashrc /user/hadoop/test/ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/test /user/hadoop/output hdfs dfs -cat /user/hadoop/output/part-r-00000hdfs dfs -mkdir -p 在 HDFS 上遞歸創(chuàng)建目錄-put 將本地文件上傳到 HDFS。hadoop jar 命令提交 WordCount 作業(yè)參數(shù)依次是 jar 包路徑、示例類名、輸入目錄和輸出目錄。作業(yè)執(zhí)行完畢后輸出目錄下會生成 part-r-00000 文件用 hdfs dfs -cat 查看內容能看到 .bashrc 里每個單詞及其出現(xiàn)次數(shù)說明整個 HDFS 加 MapReduce 的鏈路是通的。6.2 HDFS 文件操作驗證清單實驗要求里有一組 HDFS 操作按順序跑一遍即可確認環(huán)境沒有問題hdfs dfs -ls /user/hadoop/test hdfs dfs -cp /user/hadoop/test/.bashrc /user/hadoop/test/bashrc_copy hdfs dfs -get /user/hadoop/test/bashrc_copy /usr/local/hadoop/-ls 查看目錄列表對比本地文件系統(tǒng)HDFS 的路徑以 /user/hadoop 開頭。-cp 在 HDFS 內部復制文件驗證副本寫入能力。-get 將 HDFS 文件下載到本地 /usr/local/hadoop 目錄對應實驗要求里“將 HDFS 文件夾 test 復制到 Linux 系統(tǒng)本地”的步驟。最后再用 jps 和 9870 頁面確認一遍進程狀態(tài)WordCount 的輸出文件和下載到本地的 bashrc_copy 都驗證了 HDFS 的讀寫能力。從那以后我每次搭建 Hadoop 環(huán)境都會強制走完這一整套流程jps 查進程、9870 看 LiveNode、WordCount 跑一個真實作業(yè)再執(zhí)行一輪 HDFS 文件上傳下載。這套驗證流程把環(huán)境問題擋在實驗開始之前希望幫到你。本文還有配套的精品資源點擊獲取