Ubuntu16.04安裝Hadoop2.7.3教程

Ubuntu16.04安裝Hadoop2.7.3 教程

參考廈門大學數據庫實驗室 http://dblab.xmu.edu.cn/blog/install-hadoop/,遇到相關的地方有改動。

作者:秦景坤

日期:2017-4-20

GitHub: https://github.com/Roc-J/Hadoop/blob/master/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%AE%89%E8%A3%85%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/Ubuntu16.04%E5%AE%89%E8%A3%85Hadoop2.7.3%E6%95%99%E7%A8%8B.md

主要內部包括 環境配置和本地和僞分佈

本文檔適合於原生Hadoop2,參考相關文檔,親自動手實踐來一步一步搭建環境。轉載請指明出處。

環境

本教程使用Ubuntu16.04 64位作爲系統環境,包括桌面版和server版,其他版本系統,若有差異請自行百度安裝教程系統。

本教程基於原生Hadoop2,安裝的版本是Hadoop 2.7.3版本。

使用本教程請確保系統處於聯網狀態,如果自己的電腦配置不夠高,安裝虛擬機會導致系統變慢變卡的話,建議可以將電腦安裝成雙系統來進行安裝,然後再使用本教程。

本教程是在虛擬機下安裝的Ubuntu16.04版本,但是時使用的遠程連接xshell進行的操作。

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

創建hadoop用戶

如果你安裝Ubuntu的時候不是用的“hadoop”用戶,那麼需要增加一個名爲hadoop的用戶。(其實對用戶名沒有那麼大嚴格的要求,但是感覺這樣挺方便的)

首先按ctrl+alt+t打開終端窗口,或者用xshell進行連接操作,輸入如下命令創建新用戶。

sudo useradd -m hadoop -s /bin/bash

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

sudo命令
本文中會大量使用到sudo命令。sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個命令的。當使用sudo命令時,就需要輸入您當前使用用戶的密碼

密碼
在Linux的終端中輸入密碼,終端是不會顯示你當前輸入的密碼,也不會提示你已經輸入了多少字符密碼。

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

sudo passwd hadoop

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

sudo adduser hadoop sudo

最後使用su hadoop 切換到用戶hadoop,或者註銷當前用戶,選擇hadoop登錄。

更新apt

切換到hadoop用戶後,先更新一些apt,後續會使用apt安裝軟件,如果沒更新可能有一些軟件安裝不了。按ctrl+alt+t打開終端窗口或者使用xshell建立遠程連接,執行如下命令:

sudo apt-get update

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

sudo apt-get install vim

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

上面顯示沒有待安裝的項目。

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

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

sudo apt-get install openssh-server

安裝後,可以使用命令登錄本機:

ssh localhost

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

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

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

  • exit 退出剛纔的ssh localhost
  • cd ~/.ssh/ 若沒有該目錄,請執行一次ssh localhost
  • ssh-keygen -t rsa 會有提示,都按回車就可以
  • cat ./id_rsa.pub >> ./authorized_keys 加入授權

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

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

安裝Java環境

Java環境可選擇Oracle的JDK,或是OpenJDK,本教程安裝的是Oracle的JDK。

1.檢查自己的系統是32-bit還是64-bit

在命令行輸入:

getconf LONG_BIT

返回32或者是64,可以來查看操作系統的位數是32位還是64位

2.檢查你的系統是否已經安裝了java,輸入命令:

java -version

如果有安裝OpenJDK,需要先卸載OpenJDK

3.建立Java目錄,輸入命令:

sudo mkdir -p /usr/local/java

4.下載Linux版本的Orcle Java JDK,網址如下:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下載對應的版本jdk,本教程下載的是jdk-8u131-linux-x64.tar.gz

5.複製文件到剛剛創建的Java目錄,路徑爲/usr/local/java;由於大多數的下載文件都會在路徑/home/”你的用戶名”/Downloads這個文件夾中,這裏以此爲例:

cd /home/hadoop/Downloads 
sudo cp -r jdk-8u131-linux-x64.tar.gz /usr/local/java/
cd /usr/local/java

6.解壓下載文件到此目錄:

sudo tar xvzf jdk-8u131-Linux-x64.tar.gz

7.下面開始設置環境變量

sudo vim /etc/profile

複製下面代碼到文件的末尾處,然後保存並關閉文件:

JAVA_HOME=/usr/local/java/jdk1.8.0_131
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

8.通知你的Ubuntu Linux系統Oracle Java JDK的位置:

9.將Orcle java JDK設置爲默認:

10.重新加載下/etc/profile中的路徑:

source /etc/profile

11.輸入如下代碼,測試是否安裝配置成功:

這樣,Hadoop安裝所需要的Java環境就配置好了。

安裝Hadoop2

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

截止到2017年4月21日,Hadoop官方網站已經更新到2.8.0版本。對於2.7.3以上版本的Hadoop,仍可以參照此教程學習,可放心下載官網最新版本的Hadoop。
1.如果讀者是使用虛擬機方式安裝Ubuntu系統的用戶,請用虛擬機中的Ubuntu自帶firefox瀏覽器訪問本指南,再點擊下面的地址,才能把hadoop文件下載虛擬機Ubuntu中。
2.如果用windows下載,則文件會被下載到Windows系統中,虛擬機中的Ubuntu無法訪問外部Windows系統的文件,可以通過xftp軟件進行傳輸。
3.如果讀者是使用雙系統方式安裝Ubuntu系統的用戶,請進去Ubuntu系統,在Ubuntu系統打開Firefox瀏覽器訪問本教程。

下載完hadoop文件後一般可以直接使用。

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

sudo tar -zxf ~/Downloads/hadoop-2.7.3.tar.gz -C /usr/local  #解壓到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop  #將文件夾名改爲hadoop
sudo chown -R hadoop ./hadoop     #修改文件權限  

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

cd /usr/local/hadoop
./bin/hadoop version

相對路徑與絕對路徑
請務必注意命令中的相對路徑與絕對路徑,本文後續出現的./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.7.3.jar 可以看到所有的例子),包括wordcount、terasort、join、grep等。

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

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input  #將配置文件作爲輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ./input/ ./output 'dfs[a-z.]+'
cat ./output/*

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

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

rm -r ./output

Hadoop僞分佈式配置

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

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

修改配置文件core-site.xml(使用 vi ./etc/hadoop/core-site.xml),修改下面的

<configuration>  
</configuration>  

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

Hadoop配置文件說明
Hadoop的運行方式是由配置文件決定的(運行Hadoop時會讀取配置文件),因此如果需要從僞分佈模式切換到非分佈式模式,需要刪除core-site.xml中的配置項。
此外,僞分佈式雖然只需要配置fs.defaultFS和dfs.replication就可以運行(官方教程如此),不過若沒有配置hadoop.tmp.dir參數,則默認使用的臨時目錄爲/tmp/hadoop-hadoop,而這個目錄在重啓時有可能被系統清理掉,導致必須重新執行format纔行。所以進行了設置,同時也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否則在接下來的步驟中可能會處錯。

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

./bin/hdfs namenode -format

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

第一次運行的時候出現了一個處錯:

上面的錯誤說是XML的版本不支持,在筆者將2.0改爲1.0後,重新運行結果如下:

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

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

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

啓動時若提示沒有找到JAVA_HOME,則需要在hadoop文件下的/etc/hadoop/hadoop-env.sh下將JAVA_HOME重新寫一下路徑,筆者遇到了這個問題。
啓動時可能會出現如下WARN提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
WARN提示可以忽略,並不會影響正常使用。

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

運行Hadoop僞分佈式實例

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

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

接着將./etc/hadoop中的xml文件作爲輸入文件複製到分佈式系統中,即將/usr/local/hadoop/etc/hadoop複製到分佈式文件系統中的/user/hadoop/input中。使用的是hadoop用戶,並且已創建相應的用戶目錄/user/hadoop,因此在命名中可以使用相對路徑如input,其對應的絕對路徑是/user/hadoop/input

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

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

./bin/hdfs dfs -ls input

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

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

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

./bin/hdfs dfs -cat output/*

若要關閉Hadoop,則運行

./sbin/stop-dfs.sh

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章