新手推薦:Hadoop安裝教程_單機/僞分佈式配置_Hadoop-2.7.1/Ubuntu14.04

下述教程本人在最新版的Hadoop 2.7.1中測試通過

使用文件:hadoop-2.7.1.tar.gz  和 hadoop-2.7.1.tar.gz.mds

---------------------------------------------------------------------------------------------------------------------

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

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

環境

本教程使用 Ubuntu 14.04 64位 作爲系統環境(Ubuntu 12.04 也行,32位、64位均可),請自行安裝系統。如果必須使用RedHat、CentOS等,本教程也可以作爲參考,配置是相似的,就是Linux命令、具體操作有所不同。

本教程基於原生 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下載,所以以後假如更新到Hadoop 2.8.0,請放心下載,本教程也適用,不一定非得用我現在用的 2.6.0 版本。如果需安裝 0.20,1.2.1這樣的版本,本教程也可以作爲參考,主要差別在於配置項,配置請參考官網教程或其他教程。

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

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

創建hadoop用戶

如果你安裝 Ubuntu 的時候不是用的 hadoop 用戶,那麼最好增加一個名爲 hadoop 的用戶,密碼可設置爲 hadoop (密碼隨意指定)。

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

  1. sudo useradd -m hadoop -s /bin/bash

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

Ubuntu終端複製粘貼快捷鍵

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

接着使用如下命令修改密碼,按提示輸入兩次密碼 hadoop :

  1. sudo passwd hadoop

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

  1. sudo adduser hadoop sudo

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

更新apt

後面需要通過apt安裝一些軟件,在此之前最好更新一下,否則一些軟件可能安裝不了:

  1. sudo apt-get update

若出現如下 “Hash校驗和不符” 的提示,可通過更改軟件源來解決。若沒有該問題,則不需要更改。

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

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

  1. sudo apt-get install vim

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

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

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

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

  1. sudo apt-get install openssh-server

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

  1. ssh localhost

此時會有如下提示(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 # 加入授權
~的含義

在 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

OpenJDK 默認的安裝位置爲: /usr/lib/jvm/java-7-openjdk-amd64 (32位系統則是 /usr/lib/jvm/java-7-openjdk-i86 ,可通過命令dpkg -L openjdk-7-jdk查看到)。安裝完後就可以使用了,可以用 java -version 檢查一下。

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

  1. vim ~/.bashrc

在文件最前面添加如下單獨一行(注意 = 號前後不能有空格),並保存:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

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

配置JAVA_HOME變量配置JAVA_HOME變量

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

  1. source ~/.bashrc # 使變量設置生效
  2. echo $JAVA_HOME # 檢驗是否設置正確

設置正確的話,會輸出如下結果:

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

安裝 Hadoop 2

最新的 Hadoop 2 穩定版可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/stable2/ 或者http://mirrors.cnnic.cn/apache/hadoop/common/stable/ 下載,目前最新的版本是 2.6.0,總之請下載 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼。

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

如果你用的不是 2.6.0 版本,則將所有命令中出現的 2.6.0 更改爲你所使用的版本

  1. cd ~/下載 # 通過瀏覽器下載,默認保存在 “下載” 目錄中
  2. cat ./hadoop-2.6.0.tar.gz.mds | grep 'MD5' # 列出md5檢驗值
  3. md5sum ./hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" # 計算md5值,並轉化爲大寫,方便比較

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

檢驗文件完整性檢驗文件完整性

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

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

Hadoop解壓後即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示命令用法:

  1. cd ./hadoop
  2. ./bin/hadoop

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/* # 查看運行結果

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

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

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

  1. rm -R ./output

Hadoop僞分佈式配置

Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode。

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

修改配置文件 core-site.xml (vim /usr/local/hadoop/etc/hadoop/core-site.xml),將當中的

<configuration>
</configuration>

修改爲下面配置:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

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

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>
關於Hadoop配置項的一點說明

雖然只需要配置 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

成功的話,會看到 successfully formatted 的提示,且倒數第5行的提示如下,Exitting with status 0 表示成功,若爲 Exitting with status 1 則是出錯。若出錯(不該如此,請仔細檢查之前步驟),可試着加上 sudo, 既 sudo bin/hdfs namenode -format 再試試看。

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

注意

在這一步以及後面啓動 Hadoop 時若提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,則需要在文件 ./etc/hadoop/hadoop-env.sh 中設置 JAVA_HOME 變量,即找到 export JAVA_HOME=${JAVA_HOME}這一行,改爲 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 (就是之前設置的JAVA_HOME位置),再重新嘗試即可。

接着開啓 NaneNode 和 DataNode 守護進程。

  1. sbin/start-dfs.sh

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

啓動Hadoop時的SSH提示啓動Hadoop時的SSH提示

若你使用的是 Hadoop 2.4.1 64位,則此時可能會出現一連串的warn提示,如 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 這個提示,這些warn提示可以忽略,不會影響正常使用。

啓動完成後,可以通過命令 jps 來判斷是否成功啓動,若成功啓動則會列出如下進程: NameNodeDataNodeSecondaryNameNode。(如果SecondaryNameNode沒有啓動,請運行 sbin/stop-dfs.sh 關閉進程,然後再次嘗試啓動嘗試;如果 NameNode 或 DataNode 沒有啓動,請仔細檢查之前步驟)。

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

通過查看啓動日誌分析啓動失敗原因

有時 Hadoop 無法正確啓動,如 NameNode 進程沒有順利啓動,這時可以查看啓動日誌來排查原因,注意幾點:

  • 啓動時會提示形如 “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 或者 Java Exception 的地方。
  • 可以在網上搜索一下出錯信息,看能否找到一些相關的解決方法。

成功啓動後,可以訪問 Web 界面 http://localhost:50070 來查看 Hadoop 的信息。

Hadoop的Web界面Hadoop的Web界面

運行Hadoop僞分佈式實例

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

  1. bin/hdfs dfs -mkdir -p /user/hadoop

接着將 etc/hadoop 中的文件作爲輸入文件複製到分佈式文件系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分佈式文件系統中的 /user/hadoop/input 中。上一步已創建了用戶目錄 /user/hadoop ,因此命令中就可以使用相對目錄如 input,其對應的絕對路徑就是 /user/hadoop/input:

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

複製完成後,可以通過如下命令查看文件列表:

  1. bin/hdfs dfs -ls input

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

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

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

  1. bin/hdfs dfs -cat output/*

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

  1. rm -R ./output
  2. bin/hdfs dfs -get output output # 將 HDFS 上的 output 文件夾拷貝到本機
  3. cat ./output/*

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

Hadoop僞分佈式運行grep結果Hadoop僞分佈式運行grep結果

Hadoop運行程序時,默認輸出目錄不能存在,因此再次運行需要執行如下命令刪除 output文件夾:

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

運行 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);
  7. ...

若要關閉 Hadoop,則運行

  1. sbin/stop-dfs.sh

自此,你已經掌握 Hadoop 的配置和基本使用了。

注意

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

附加教程: 配置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 dfs -ls input 等命令,而無需使用絕對目錄。

安裝Hadoop集羣

如果需要安裝 Hadoop 集羣,請查看Hadoop集羣安裝配置教程

相關教程

參考資料

發佈了308 篇原創文章 · 獲贊 69 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章