hadoop 安裝教程


本教程由廈門大學數據庫實驗室 / 給力星出品,轉載請注明。本教程適合於原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要參考了官方安裝教程,步驟詳細,輔以適當說明,相信按照步驟來,都能順利安裝並運行Hadoop。另外有Hadoop安裝配置簡略版方便有基礎的讀者快速完成安裝。此外,希望讀者們能多去了解一些 Linux 的知識,以后出現問題時才能自行解決。

為了方便學習本教程,請讀者們利用Linux系統中自帶的firefox瀏覽器打開本指南進行學習。
Hadoop安裝文件,可以到Hadoop官網下載,也可以點擊這里從百度雲盤下載,進入該百度雲盤鏈接后,找到Hadoop安裝文件hadoop-2.7.1.tar.gz(本教程也可以用於安裝Hadoop 2.7.1版本)。

 

環境

本教程使用 Ubuntu 14.04 64位 作為系統環境(Ubuntu 12.04,Ubuntu16.04 也行,32位、64位均可),請自行安裝系統(可參考使用VirtualBox安裝Ubuntu)。

如果用的是 CentOS/RedHat 系統,請查看相應的CentOS安裝Hadoop教程_單機偽分布式配置

本教程基於原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下驗證通過,可適合任何 Hadoop 2.x.y 版本,如 Hadoop 2.7.1、2.6.3、2.4.1等。

使用本教程請確保系統處於聯網狀態下,部分高校使用星網銳捷連接網絡,可能導致虛擬機無法聯網,那么建議您使用雙系統安裝ubuntu,然后再使用本教程!

Hadoop版本

Hadoop 有兩個主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比較老的教材上用的可能是 0.20 這樣的版本。Hadoop 2.x 版本在不斷更新,本教程均可適用。如果需安裝 0.20,1.2.1這樣的版本,本教程也可以作為參考,主要差別在於配置項,配置請參考官網教程或其他教程。

新版是兼容舊版的,書上舊版本的代碼應該能夠正常運行(我自己沒驗證,歡迎驗證反饋)。

裝好了 Ubuntu 系統之后,在安裝 Hadoop 前還需要做一些必備工作。

創建hadoop用戶

如果你安裝 Ubuntu 的時候不是用的 “hadoop” 用戶,那么需要增加一個名為 hadoop 的用戶。

首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶 :

  1. sudo useradd -m hadoop -s /bin/bash
Shell 命令

這條命令創建了可以登陸的 hadoop 用戶,並使用 /bin/bash 作為 shell。

sudo命令

本文中會大量使用到sudo命令。sudo是ubuntu中一種權限管理機制,管理員可以授權給一些普通用戶去執行一些需要root權限執行的操作。當使用sudo命令時,就需要輸入您當前用戶的密碼.

密碼

在Linux的終端中輸入密碼,終端是不會顯示任何你當前輸入的密碼,也不會提示你已經輸入了多少字符密碼。而在windows系統中,輸入密碼一般都會以“*”表示你輸入的密碼字符

輸入法中英文切換

ubuntu中終端輸入的命令一般都是使用英文輸入。linux中英文的切換方式是使用鍵盤“shift”鍵來切換,也可以點擊頂部菜單的輸入法按鈕進行切換。ubuntu自帶的Sunpinyin中文輸入法已經足夠讀者使用。

Ubuntu終端復制粘貼快捷鍵

在Ubuntu終端窗口中,復制粘貼的快捷鍵需要加上 shift,即粘貼是 ctrl+shift+v。

接着使用如下命令設置密碼,可簡單設置為 hadoop,按提示輸入兩次密碼:

  1. sudo passwd hadoop
Shell 命令

可為 hadoop 用戶增加管理員權限,方便部署,避免一些對新手來說比較棘手的權限問題:

  1. sudo adduser hadoop sudo
Shell 命令

最后注銷當前用戶(點擊屏幕右上角的齒輪,選擇注銷),返回登陸界面。在登陸界面中選擇剛創建的 hadoop 用戶進行登陸。

更新apt

用 hadoop 用戶登錄后,我們先更新一下 apt,后續我們使用 apt 安裝軟件,如果沒更新可能有一些軟件安裝不了。按 ctrl+alt+t 打開終端窗口,執行如下命令:

  1. sudo apt-get update
Shell 命令

若出現如下 “Hash校驗和不符” 的提示,可通過更改軟件源來解決。若沒有該問題,則不需要更改。從軟件源下載某些軟件的過程中,可能由於網絡方面的原因出現沒法下載的情況,那么建議更改軟件源。在學習Hadoop過程中,即使出現“Hash校驗和不符”的提示,也不會影響Hadoop的安裝。

Ubuntu更新軟件源時遇到Hash校驗和不符的問題Ubuntu更新軟件源時遇到Hash校驗和不符的問題

后續需要更改一些配置文件,我比較喜歡用的是 vim(vi增強版,基本用法相同),建議安裝一下(如果你實在還不會用 vi/vim 的,請將后面用到 vim 的地方改為 gedit,這樣可以使用文本編輯器進行修改,並且每次文件更改完成后請關閉整個 gedit 程序,否則會占用終端):

  1. sudo apt-get install vim
Shell 命令

安裝軟件時若需要確認,在提示處輸入 y 即可。

通過命令行安裝軟件通過命令行安裝軟件

安裝SSH、配置SSH無密碼登陸

集群、單節點模式都需要用到 SSH 登陸(類似於遠程登陸,你可以登錄某台 Linux 主機,並且在上面運行命令),Ubuntu 默認已安裝了 SSH client,此外還需要安裝 SSH server:

  1. sudo apt-get install openssh-server
Shell 命令

安裝后,可以使用如下命令登陸本機:

  1. ssh localhost
Shell 命令

此時會有如下提示(SSH首次登陸提示),輸入 yes 。然后按提示輸入密碼 hadoop,這樣就登陸到本機了。

SSH首次登陸提示SSH首次登陸提示

但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便。

首先退出剛才的 ssh,就回到了我們原先的終端窗口,然后利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:

  1. exit # 退出剛才的 ssh localhost
  2. cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
  3. ssh-keygen -t rsa # 會有提示,都按回車就可以
  4. cat ./id_rsa.pub >> ./authorized_keys # 加入授權
Shell 命令
~的含義

在 Linux 系統中,~ 代表的是用戶的主文件夾,即 “/home/用戶名” 這個目錄,如你的用戶名為 hadoop,則 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注釋,只需要輸入前面命令即可。

此時再用 ssh localhost 命令,無需輸入密碼就可以直接登陸了,如下圖所示。

SSH無密碼登錄SSH無密碼登錄

安裝Java環境

Java環境可選擇 Oracle 的 JDK,或是 OpenJDK,按中說的,新版本在 OpenJDK 1.7 下是沒問題的。為圖方便,這邊直接通過命令安裝 OpenJDK 7。
下面有兩種安裝JDK的方式,可以任選一種,如果第1種失敗,就選擇第2種。推薦直接使用第2種安裝方式。
(1)第1種安裝JDK方式:

  1. sudo apt-get install openjdk-7-jre openjdk-7-jdk
Shell 命令

安裝好 OpenJDK 后,需要找到相應的安裝路徑,這個路徑是用於配置 JAVA_HOME 環境變量的。執行如下命令:

  1. dpkg -L openjdk-7-jdk | grep '/bin/javac'
Shell 命令

該命令會輸出一個路徑,除去路徑末尾的 “/bin/javac”,剩下的就是正確的路徑了。如輸出路徑為 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,則我們需要的路徑為 /usr/lib/jvm/java-7-openjdk-amd64。

接着需要配置一下 JAVA_HOME 環境變量,為方便,我們在 ~/.bashrc 中進行設置(擴展閱讀: 設置Linux環境變量的方法和區別):

  1. vim ~/.bashrc
Shell 命令

在文件最前面添加如下單獨一行(注意 = 號前后不能有空格),將“JDK安裝路徑”改為上述命令得到的路徑,並保存:

  1. export JAVA_HOME=JDK安裝路徑
Shell

如下圖所示(該文件原本可能不存在,內容為空,這不影響):

配置JAVA_HOME變量配置JAVA_HOME變量

接着還需要讓該環境變量生效,執行如下代碼:

  1. source ~/.bashrc # 使變量設置生效
Shell 命令

設置好后我們來檢驗一下是否設置正確:

  1. echo $JAVA_HOME # 檢驗變量值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 與直接執行 java -version 一樣
Shell 命令

如果設置正確的話,$JAVA_HOME/bin/java -version 會輸出 java 的版本信息,且和 java -version 的輸出結果一樣,如下圖所示:

成功配置JAVA_HOME變量成功配置JAVA_HOME變量

這樣,Hadoop 所需的 Java 運行環境就安裝好了。

(2)第2種安裝JDK方式
根據大量電腦安裝Java環境的情況我們發現,部分電腦按照上述的第一種安裝方式會出現安裝失敗的情況,這時,可以采用這里介紹的另外一種安裝方式,命令如下:

  1. sudo apt-get install default-jre default-jdk
Shell 命令

上述安裝過程需要訪問網絡下載相關文件,請保持聯網狀態。安裝結束以后,需要配置JAVA_HOME環境變量,請在Linux終端中輸入下面命令打開當前登錄用戶的環境變量配置文件.bashrc:

  1. vim ~/.bashrc
Shell 命令

在文件最前面添加如下單獨一行(注意,等號“=”前后不能有空格),然后保存退出:

export JAVA_HOME=/usr/lib/jvm/default-java

接下來,要讓環境變量立即生效,請執行如下代碼:

  1. source ~/.bashrc # 使變量設置生效
Shell 命令

執行上述命令后,可以檢驗一下是否設置正確:

  1. echo $JAVA_HOME # 檢驗變量值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 與直接執行java -version一樣
Shell 命令

至此,就成功安裝了Java環境。下面就可以進入Hadoop的安裝。

安裝 Hadoop 2

Hadoop 2 可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,一般選擇下載最新的穩定版本,即下載 “stable” 下的 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯才可使用。

截止到2015年12月9日,Hadoop官方網站已經更新到2.7.1版本。對於2.6.0以上版本的Hadoop,仍可以參照此教程學習,可放心下載官網最新版本的Hadoop。

  1. 如果讀者是使用虛擬機方式安裝Ubuntu系統的用戶,請用虛擬機中的Ubuntu自帶firefox瀏覽器訪問本指南,再點擊下面的地址,才能把hadoop文件下載虛擬機ubuntu中。請不要使用Windows系統下的瀏覽器下載,文件會被下載到Windows系統中,虛擬機中的Ubuntu無法訪問外部Windows系統的文件,造成不必要的麻煩。
  2. 如果讀者是使用雙系統方式安裝Ubuntu系統的用戶,請進去Ubuntu系統,在Ubuntu系統打開firefox瀏覽器訪問本指南,再點擊下面的地址下載:hadoop-2.7.1下載地址

下載完 Hadoop 文件后一般就可以直接使用。但是如果網絡不好,可能會導致下載的文件缺失,可以使用 md5 等檢測工具可以校驗文件是否完整。

我們選擇將 Hadoop 安裝至 /usr/local/ 中:

  1. sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中
  2. cd /usr/local/
  3. sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop
  4. sudo chown -R hadoop ./hadoop # 修改文件權限
Shell 命令

Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:

  1. cd /usr/local/hadoop
  2. ./bin/hadoop version
Shell 命令
相對路徑與絕對路徑

請務必注意命令中的相對路徑與絕對路徑,本文后續出現的 ./bin/..../etc/... 等包含 ./ 的路徑,均為相對路徑,以 /usr/local/hadoop 為當前目錄。例如在 /usr/local/hadoop 目錄中執行 ./bin/hadoop version 等同於執行 /usr/local/hadoop/bin/hadoop version。可以將相對路徑改成絕對路徑來執行,但如果你是在主文件夾 ~ 中執行 ./bin/hadoop version,執行的會是 /home/hadoop/bin/hadoop version,就不是我們所想要的了。

Hadoop單機配置(非分布式)

Hadoop 默認模式為非分布式模式(本地模式),無需進行其他配置即可運行。非分布式即單 Java 進程,方便進行調試。

現在我們可以執行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此我們選擇運行 grep 例子,我們將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最后輸出結果到 output 文件夾中。

  1. cd /usr/local/hadoop
  2. mkdir ./input
  3. cp ./etc/hadoop/*.xml ./input # 將配置文件作為輸入文件
  4. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
  5. cat ./output/* # 查看運行結果
Shell 命令

執行成功后如下所示,輸出了作業的相關信息,輸出的結果是符合正則的單詞 dfsadmin 出現了1次

Hadoop單機模式運行grep的輸出結果Hadoop單機模式運行grep的輸出結果

注意,Hadoop 默認不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將 ./output 刪除。

  1. rm -r ./output
Shell 命令

Hadoop偽分布式配置

Hadoop 可以在單節點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。

Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,偽分布式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。

修改配置文件 core-site.xml (通過 gedit 編輯會比較方便: gedit ./etc/hadoop/core-site.xml),將當中的

  1. <configuration>
  2. </configuration>
XML

修改為下面配置:

  1. <configuration>
  2. <property>
  3. <name>hadoop.tmp.dir</name>
  4. <value>file:/usr/local/hadoop/tmp</value>
  5. <description>Abase for other temporary directories.</description>
  6. </property>
  7. <property>
  8. <name>fs.defaultFS</name>
  9. <value>hdfs://localhost:9000</value>
  10. </property>
  11. </configuration>
XML

同樣的,修改配置文件 hdfs-site.xml

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  13. </property>
  14. </configuration>
XML
Hadoop配置文件說明

 

Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要刪除 core-site.xml 中的配置項。

此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。

配置完成后,執行 NameNode 的格式化:

  1. ./bin/hdfs namenode -format
Shell 命令

成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若為 “Exitting with status 1” 則是出錯。

執行namenode格式化執行namenode格式化

如果在這一步時提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,則說明之前設置 JAVA_HOME 環境變量那邊就沒設置好,請按教程先設置好 JAVA_HOME 變量,否則后面的過程都是進行不下去的。如果已經按照前面教程在.bashrc文件中設置了JAVA_HOME,還是出現 Error: JAVA_HOME is not set and could not be found. 的錯誤,那么,請到hadoop的安裝目錄修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”這行,然后,把它修改成JAVA安裝路徑的具體地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次啟動Hadoop。

接着開啟 NameNode 和 DataNode 守護進程。

  1. ./sbin/start-dfs.sh #start-dfs.sh是個完整的可執行文件,中間沒有空格
Shell 命令

若出現如下SSH提示,輸入yes即可。

啟動Hadoop時的SSH提示啟動Hadoop時的SSH提示

啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,並不會影響正常使用。

啟動 Hadoop 時提示 Could not resolve hostname

 

如果啟動 Hadoop 時遇到輸出非常多“ssh: Could not resolve hostname xxx”的異常情況,如下圖所示:

啟動Hadoop時的異常提示啟動Hadoop時的異常提示

這個並不是 ssh 的問題,可通過設置 Hadoop 環境變量來解決。首先按鍵盤的 ctrl + c 中斷啟動,然后在 ~/.bashrc 中,增加如下兩行內容(設置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 為 Hadoop 的安裝目錄):

  1. export HADOOP_HOME=/usr/local/hadoop
  2. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
Shell

保存后,務必執行 source ~/.bashrc 使變量設置生效,然后再次執行 ./sbin/start-dfs.sh 啟動 Hadoop。

啟動完成后,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啟動,請運行 sbin/stop-dfs.sh 關閉進程,然后再次嘗試啟動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啟動日志排查原因。

通過jps查看啟動的Hadoop進程通過jps查看啟動的Hadoop進程

Hadoop無法正常啟動的解決方法

一般可以查看啟動日志來排查原因,注意幾點:

  • 啟動時會提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 對應你的機器名,但其實啟動日志信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應該查看這個后綴為 .log 的文件;
  • 每一次的啟動日志都是追加在日志文件之后,所以得拉到最后面看,對比下記錄的時間就知道了。
  • 一般出錯的提示在最后面,通常是寫着 Fatal、Error、Warning 或者 Java Exception 的地方。
  • 可以在網上搜索一下出錯信息,看能否找到一些相關的解決方法。

此外,若是 DataNode 沒有啟動,可嘗試如下的方法(注意這會刪除 HDFS 中原有的所有數據,如果原有的數據很重要請不要這樣做):

  1. # 針對 DataNode 沒法啟動的解決方法
  2. ./sbin/stop-dfs.sh # 關閉
  3. rm -r ./tmp # 刪除 tmp 文件,注意這會刪除 HDFS 中原有的所有數據
  4. ./bin/hdfs namenode -format # 重新格式化 NameNode
  5. ./sbin/start-dfs.sh # 重啟
Shell 命令

成功啟動后,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。

Hadoop的Web界面Hadoop的Web界面

運行Hadoop偽分布式實例

上面的單機模式,grep 例子讀取的是本地數據,偽分布式讀取的則是 HDFS 上的數據。要使用 HDFS,首先需要在 HDFS 中創建用戶目錄:

  1. ./bin/hdfs dfs -mkdir -p /user/hadoop
Shell 命令
注意

教材《大數據技術原理與應用》的命令是以”./bin/hadoop dfs”開頭的Shell命令方式,實際上有三種shell命令方式。
1. hadoop fs
2. hadoop dfs
3. hdfs dfs

hadoop fs適用於任何不同的文件系統,比如本地文件系統和HDFS文件系統
hadoop dfs只能適用於HDFS文件系統
hdfs dfs跟hadoop dfs的命令作用一樣,也只能適用於HDFS文件系統

接着將 ./etc/hadoop 中的 xml 文件作為輸入文件復制到分布式文件系統中,即將 /usr/local/hadoop/etc/hadoop 復制到分布式文件系統中的 /user/hadoop/input 中。我們使用的是 hadoop 用戶,並且已創建相應的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

  1. ./bin/hdfs dfs -mkdir input
  2. ./bin/hdfs dfs -put ./etc/hadoop/*.xml input
Shell 命令

復制完成后,可以通過如下命令查看文件列表:

  1. ./bin/hdfs dfs -ls input
Shell 命令

偽分布式運行 MapReduce 作業的方式跟單機模式相同,區別在於偽分布式讀取的是HDFS中的文件(可以將單機步驟中創建的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。

  1. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
Shell 命令

查看運行結果的命令(查看的是位於 HDFS 中的輸出結果):

  1. ./bin/hdfs dfs -cat output/*
Shell 命令

結果如下,注意到剛才我們已經更改了配置文件,所以運行結果不同。

Hadoop偽分布式運行grep結果Hadoop偽分布式運行grep結果

我們也可以將運行結果取回到本地:

  1. rm -r ./output # 先刪除本地的 output 文件夾(如果存在)
  2. ./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機
  3. cat ./output/*
Shell 命令

Hadoop 運行程序時,輸出目錄不能存在,否則會提示錯誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次執行,需要執行如下命令刪除 output 文件夾:

  1. ./bin/hdfs dfs -rm -r output # 刪除 output 文件夾
Shell 命令
運行程序時,輸出目錄不能存在

運行 Hadoop 程序時,為了防止覆蓋結果,程序指定的輸出目錄(如 output)不能存在,否則會提示錯誤,因此運行前需要先刪除輸出目錄。在實際開發應用程序時,可考慮在程序中加上如下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操作:

  1. Configuration conf = new Configuration();
  2. Job job = new Job(conf);
  3.  
  4. /* 刪除輸出目錄 */
  5. Path outputPath = new Path(args[1]);
  6. outputPath.getFileSystem(conf).delete(outputPath, true);
Java

若要關閉 Hadoop,則運行

  1. ./sbin/stop-dfs.sh
Shell 命令
注意

下次啟動 hadoop 時,無需進行 NameNode 的初始化,只需要運行 ./sbin/start-dfs.sh 就可以!

YARN

YARN 是 Hadoop 2.x 中的內容,使用林子雨編寫的大數據技術原理與應用教材的讀者,可不用學習YARN內容。

如果對這方便的內容感興趣,可點擊下方查看。

自此,你已經掌握 Hadoop 的配置和基本使用了。安裝好的Hadoop項目中已經包含了第三章的HDFS,繼續學習第3章HDFS文件系統,請參考如下學習指南:大數據技術原理與應用 第三章 學習指南

附加教程: 配置PATH環境變量

在這里額外講一下 PATH 這個環境變量(可執行 echo $PATH 查看,當中包含了多個目錄)。例如我們在主文件夾 ~ 中執行 ls 這個命令時,實際執行的是 /bin/ls 這個程序,而不是 ~/ls 這個程序。系統是根據 PATH 這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的則提示該命令不存在)。

上面的教程中,我們都是先進入到 /usr/local/hadoop 目錄中,再執行 sbin/hadoop,實際上等同於運行 /usr/local/hadoop/sbin/hadoop。我們可以將 Hadoop 命令的相關目錄加入到 PATH 環境變量中,這樣就可以直接通過 start-dfs.sh 開啟 Hadoop,也可以直接通過 hdfs 訪問 HDFS 的內容,方便平時的操作。

同樣我們選擇在 ~/.bashrc 中進行設置(vim ~/.bashrc,與 JAVA_HOME 的設置相似),在文件最前面加入如下單獨一行:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加后執行 source ~/.bashrc 使設置生效,生效后,在任意目錄中,都可以直接使用 hdfs 等命令了,讀者不妨現在就執行 hdfs dfs -ls input 查看 HDFS 文件試試看。

安裝Hadoop集群

在平時的學習中,我們使用偽分布式就足夠了。如果需要安裝 Hadoop 集群,請查看Hadoop集群安裝配置教程

相關教程

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM