天天看點

Hadoop

本教程适合于在 centos 6.x 系統中安裝原生 hadoop 2,适用于hadoop 2.7.7, hadoop 2.6.0 等版本,按照步驟來,都能順利在 centos 中安裝并運作 hadoop。

環境

本教程使用 centos 6.4 64位 作為系統環境,請自行安裝系統(可參考使用virtualbox安裝centos)。如果用的是 ubuntu 系統,請檢視相應的 ubuntu安裝hadoop教程。

本教程基于原生 hadoop 2,在 hadoop 2.7.7 (stable) 版本下驗證通過,可适合任何 hadoop 2.x.y 版本,例如 hadoop 2.7.7, hadoop 2.4.1等。

hadoop版本

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

安裝centos 系統

建立centos系統的同時,centos會自動建立root管理賬号。

我們可以再建立一個名稱為hadoop的使用者。如果沒有建立hadoop使用者,請參照下面的步驟建立。(本步驟請看視訊:安裝centos系統.mp4)

建立hadoop使用者

如果你安裝 centos 的時候建立的就是 “hadoop” 使用者,那麼忽略此步驟。

如果你安裝 centos 的時候建立的不是 “hadoop” 使用者,那麼需要增加一個名為 hadoop 的使用者。

首先點選左上角的 “應用程式” -> “系統工具” -> “終端”,首先在終端中輸入 su ,按回車,輸入 root 密碼以 root 使用者登入,接着執行指令建立新使用者

如下圖所示,這條指令建立了可以登陸的 hadoop 使用者,并使用 /bin/bash 作為shell。

centos建立hadoop使用者

接着使用如下指令修改密碼,按提示輸入兩次密碼,可簡單的設為 “hadoop”(密碼随意指定,若提示“無效的密碼,過于簡單”則再次輸入确認就行):

passwd hadoop

可為 hadoop 使用者增加管理者權限,友善部署,避免一些對新手來說比較棘手的權限問題,執行:

visudo

如下圖,找到 root all=(all) all 這行(應該在第98行,可以先按一下鍵盤上的 esc 鍵,然後輸入 :98 (按一下冒号,接着輸入98,再按Enter鍵),可以直接跳到第98行 ),然後在這行下面增加一行内容:hadoop all=(all) all (當中的間隔為tab),如下圖所示:

為hadoop增加sudo權限

添加上一行内容後,先按一下鍵盤上的 esc 鍵,然後輸入 :wq (輸入冒号還有wq,這是vi/vim編輯器的儲存方法),再按Enter鍵儲存退出就可以了。

最後登出目前使用者(點選螢幕右上角的使用者名,選擇退出->登出),在登陸界面使用剛建立的 hadoop 使用者進行登陸。(如果已經是 hadoop 使用者,且在終端中使用 su 登入了 root 使用者,那麼需要執行 exit 退出 root 使用者狀态)。(本步驟請看視訊:安裝centos系統.mp4)

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

準備工作

使用 hadoop 使用者登入後,還需要安裝幾個軟體才能安裝 hadoop。

centos 使用 yum 來安裝軟體,需要聯網環境,首先應檢查一下是否連上了網絡。如果測試ping www.baidu.com可以ping通,說明網絡沒有問題,不需要再設定。如果如下圖所示,桌面右上角的網絡圖示若顯示紅叉,則表明還未聯網,應點選選擇可用網絡。

檢查是否聯網

連接配接網絡後,需要安裝 ssh 和 java。

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

叢集、單節點模式都需要用到 ssh 登陸(類似于遠端登陸,你可以登入某台 linux 主機,并且在上面運作指令),一般情況下,centos 預設已安裝了 ssh client、ssh server,打開終端執行如下指令進行檢驗:

rpm -qa | grep ssh

如果傳回的結果如下圖所示,包含了 ssh client 跟 ssh server,則不需要再安裝。

檢查是否安裝了ssh

若需要安裝,則可以通過 yum 進行安裝(安裝過程中會讓你輸入 [y/n],輸入 y 即可):

如下指令測試一下 ssh 是否可用:

ssh localhost

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

測試ssh是否可用

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

首先輸入 exit 退出剛才的 ssh,就回到了我們原先的終端視窗,然後利用 ssh-keygen 生成密鑰,并将密鑰加入到授權中:

~的含義

在 linux 系統中,~ 代表的是使用者的主檔案夾,即 “/home/使用者名” 這個目錄,如你的使用者名為 hadoop,則 ~ 就代表 “/home/hadoop/”。 此外,指令中的 # 後面的文字是注釋。

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

ssh無密碼登入

本步驟完結。

本教程适合于在 centos 6.x 系統中安裝原生 hadoop 2,适用于hadoop 2.7.1, hadoop 2.6.0 等版本,按照步驟來,都能順利在 centos 中安裝并運作 hadoop。

安裝java環境

java 環境可選擇 oracle 的 jdk,或是 openjdk,現在一般 linux 系統預設安裝的基本是 openjdk,如 centos 6.4 就預設安裝了 openjdk 1.7。按

中說的,hadoop 在 openjdk 1.7 下運作是沒問題的。需要注意的是,centos 6.4 中預設安裝的隻是 java jre,而不是 jdk,為了開發友善,我們還是需要通過 yum 進行安裝 jdk,安裝過程中會讓輸入 [y/n],輸入 y 即可:

通過上述指令安裝 openjdk,預設安裝位置為

在檔案最後面添加如下單獨一行(指向 jdk 的安裝位置),并儲存:

如下圖所示:

設定java_home環境變量

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

成功設定java_home環境變量

這樣,hadoop 所需的 java 運作環境就安裝好了。

本教程适合于在 centos 6.x 系統中安裝原生 hadoop 2,适用于hadoop 2.7, hadoop 2.6. 等版本,按照步驟來,都能順利在 centos 中安裝并運作 hadoop。

安裝 hadoop 2

hadoop 2 可以通過

本教程選擇的是 2.7.7 版本,下載下傳時請下載下傳 hadoop-2.x.y.tar.gz這個格式的檔案,這是編譯好的,另一個包含 src 的則是 hadoop 源代碼,需要進行編譯才可使用。

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

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

檢驗檔案完整性

我們選擇将 hadoop 安裝至 /usr/local/ 中:

相對路徑與絕對路徑

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

(一)案例grep:

在此我們選擇運作 grep 例子,我們将 input 檔案夾中的所有檔案作為輸入,篩選當中符合正規表達式 dfs[a-z.]+ 的單詞并統計出現的次數,最後輸出結果到 output 檔案夾中。

若運作出錯,如出現如下圖提示:

運作hadoop執行個體時可能會報錯

若出現提示 “warn util.nativecodeloader: unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,該 warn 提示可以忽略,不會影響 hadoop 正常運作(可通過編譯 hadoop 源碼解決,解決方法請自行搜尋)。

若出現提示 “info metrics.metricsutil: unable to obtain hostname java.net.unknowhostexception”,這需要執行如下指令修改 hosts 檔案,為你的主機名增加ip映射:

11. sudo vim /etc/hosts

主機名在終端視窗标題裡可以看到,或執行指令 hostname 檢視,如下圖所示,在最後面增加一行 “127.0.0.1 dblab”:

設定主機名的ip映射

儲存檔案後,重新運作 hadoop 執行個體,若執行成功的話會輸出很多作業的相關資訊,最後的輸出資訊如下圖所示。作業的結果會輸出在指定的 output 檔案夾中,通過指令 cat ./output/* 檢視結果,符合正則的單詞 dfsadmin 出現了1次:

hadoop例子輸出結果

注意,hadoop 預設不會覆寫結果檔案,是以再次運作上面執行個體會提示出錯,需要先将 ./output 删除。

(二)案例wordcount:

檢視結果

結束。