1. 程式人生 > >Hadoop安裝教程_單機/偽分散式配置_Hadoop2.7.3/Ubuntu16.04

Hadoop安裝教程_單機/偽分散式配置_Hadoop2.7.3/Ubuntu16.04

當開始著手實踐 Hadoop 時,安裝 Hadoop 往往會成為新手的一道門檻。儘管安裝其實很簡單,書上有寫到,官方網站也有 Hadoop 安裝配置教程,但由於對 Linux 環境不熟悉,書上跟官網上簡略的安裝步驟新手往往 Hold 不住。加上網上不少教程也甚是坑,導致新手摺騰老幾天愣是沒裝好,很是打擊學習熱情。

本教程適合於原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要參考了官方安裝教程,步驟詳細,輔以適當說明,相信按照步驟來,都能順利安裝並執行Hadoop。另外有Hadoop安裝配置簡略版方便有基礎的讀者快速完成安裝。此外,希望讀者們能多去了解一些 Linux 的知識,以後出現問題時才能自行解決。本教程由

給力星出品,轉載請註明。

環境

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

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

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。

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校驗和不符” 的提示,可通過更改軟體源來解決。若沒有該問題,則不需要更改。

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,按http://wiki.apache.org/hadoop/HadoopJavaVersions中說的,新版本在 OpenJDK 1.7 下是沒問題的。為圖方便,這邊直接通過命令安裝 OpenJDK 7。

  1. sudo apt-get install openjdk-7-jre openjdk-7-jdk
Shell 命令 JRE和JDK的區別

JRE(Java Runtime Environment,Java執行環境),是執行 Java 所需的環境。JDK(Java Development Kit,Java軟體開發工具包)即包括 JRE,還包括開發 Java 程式所需的工具和類庫。

安裝好 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 執行環境就安裝好了。

安裝 Hadoop 2

下載時強烈建議也下載 hadoop-2.x.y.tar.gz.mds 這個檔案,該檔案包含了檢驗值可用於檢查 hadoop-2.x.y.tar.gz 的完整性,否則若檔案發生了損壞或下載不完整,Hadoop 將無法正常執行。

本文涉及的檔案均通過瀏覽器下載,預設儲存在 “下載” 目錄中(若不是請自行更改 tar 命令的相應目錄)。另外,本教程選擇的是 2.6.0 版本,如果你用的不是 2.6.0 版本,則將所有命令中出現的 2.6.0 更改為你所使用的版本。

  1. cat ~/下載/hadoop-2.6.0.tar.gz.mds | grep 'MD5'# 列出md5檢驗值
  2. # head -n 6 ~/下載/hadoop-2.7.1.tar.gz.mds # 2.7.1版本格式變了,可以用這種方式輸出
  3. md5sum ~/下載/hadoop-2.6.0.tar.gz | tr "a-z""A-Z"# 計算md5值,並轉化為大寫,方便比較
Shell 命令

若檔案不完整則這兩個值一般差別很大,可以簡單對比下前幾個字元跟後幾個字元是否相等即可,如下圖所示,如果兩個值不一樣,請務必重新下載。

檢驗檔案完整性檢驗檔案完整性

我們選擇將 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

修改為下面配置: