本教程使用 CentOS 6.4 32位 做爲系統環境,請自行安裝系統。java
本教程基於原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下驗證經過,可適合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.7.1, Hadoop 2.4.1等。正則表達式
Hadoop版本shell
Hadoop 有兩個主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比較老的教材上用的多是 0.20 這樣的版本。Hadoop 2.x 版本在不斷更新,本教程都可適用。若是需安裝 0.20,1.2.1這樣的版本,本教程也能夠做爲參考,主要差異在於配置項,配置請參考官網教程或其餘教程。apache
裝好了 CentOS 系統以後,在安裝 Hadoop 前還須要作一些必備工做。vim
若是你安裝 CentOS 的時候不是用的 「hadoop」 用戶,那麼須要增長一個名爲 hadoop 的用戶。瀏覽器
首先點擊左上角的 「應用程序」 -> 「系統工具」 -> 「終端」,首先在終端中輸入 su
,按回車,輸入 root 密碼以 root 用戶登陸,接着執行命令建立新用戶 hadoop:bash
Shell 命令網絡
以下圖所示,這條命令建立了能夠登錄的 hadoop 用戶,並使用 /bin/bash 做爲shell。app
CentOS建立hadoop用戶ssh
接着使用以下命令修改密碼,按提示輸入兩次密碼,可簡單的設爲 「hadoop」(密碼隨意指定,若提示「無效的密碼,過於簡單」則再次輸入確認就行):
passwd hadoop
可爲 hadoop 用戶增長管理員權限,方便部署,避免一些對新手來講比較棘手的權限問題,執行:
visudo
以下圖,找到 root ALL=(ALL) ALL
這行(應該在第98行,能夠先按一下鍵盤上的 ESC
鍵,而後輸入 :98
(按一下冒號,接着輸入98,再按回車鍵),能夠直接跳到第98行 ),而後在這行下面增長一行內容:hadoop ALL=(ALL) ALL
(當中的間隔爲tab),以下圖所示:
爲hadoop增長sudo權限
添加好內容後,先按一下鍵盤上的 ESC
鍵,而後輸入 :wq
(輸入冒號還有wq,這是vi/vim編輯器的保存方法),再按回車鍵保存退出就能夠了。
最後註銷當前用戶(點擊屏幕右上角的用戶名,選擇退出->註銷),在登錄界面使用剛建立的 hadoop 用戶進行登錄。(若是已是 hadoop 用戶,且在終端中使用 su
登陸了 root 用戶,那麼須要執行 exit
退出 root 用戶狀態)
使用 hadoop 用戶登陸後,還須要安裝幾個軟件才能安裝 Hadoop。
CentOS 使用 yum 來安裝軟件,須要聯網環境,首先應檢查一下是否連上了網絡。以下圖所示,桌面右上角的網絡圖標若顯示紅叉,則代表還未聯網,應點擊選擇可用網絡。
檢查是否聯網
鏈接網絡後,須要安裝 SSH 和 Java。
集羣、單節點模式都須要用到 SSH 登錄(相似於遠程登錄,你能夠登陸某臺 Linux 主機,而且在上面運行命令),通常狀況下,CentOS 默認已安裝了 SSH client、SSH server,打開終端執行以下命令進行檢驗:
rpm -qa | grep ssh
若是返回的結果以下圖所示,包含了 SSH client 跟 SSH server,則不須要再安裝。
檢查是否安裝了SSH
若須要安裝,則能夠經過 yum 進行安裝(安裝過程當中會讓你輸入 [y/N],輸入 y 便可):
sudo yum install openssh-clients sudo yum install openssh-server
接着執行以下命令測試一下 SSH 是否可用:
ssh localhost
此時會有以下提示(SSH首次登錄提示),輸入 yes 。而後按提示輸入密碼 hadoop,這樣就登錄到本機了。
測試SSH是否可用
但這樣登錄是須要每次輸入密碼的,咱們須要配置成SSH無密碼登錄比較方便。
首先輸入 exit
退出剛纔的 ssh,就回到了咱們原先的終端窗口,而後利用 ssh-keygen 生成密鑰,並將密鑰加入到受權中:
exit # 退出剛纔的 ssh localhost cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost ssh-keygen -t rsa # 會有提示,都按回車就能夠 cat id_rsa.pub >> authorized_keys # 加入受權 chmod 600 ./authorized_keys # 修改文件權限
~的含義
在 Linux 系統中,~ 表明的是用戶的主文件夾,即 「/home/用戶名」 這個目錄,如你的用戶名爲 hadoop,則 ~ 就表明 「/home/hadoop/」。 此外,命令中的 # 後面的文字是註釋。
此時再用 ssh localhost
命令,無需輸入密碼就能夠直接登錄了,以下圖所示。
SSH無密碼登陸
Java 環境可選擇 Oracle 的 JDK,或是 OpenJDK,如今通常 Linux 系統默認安裝的基本是 OpenJDK,如 CentOS 6.4 就默認安裝了 OpenJDK 1.7。按 http://wiki.apache.org/hadoop/HadoopJavaVersions 中說的,Hadoop 在 OpenJDK 1.7 下運行是沒問題的。須要注意的是,CentOS 6.4 中默認安裝的只是 Java JRE,而不是 JDK,爲了開發方便,咱們仍是須要經過 yum 進行安裝 JDK,安裝過程當中會讓輸入 [y/N],輸入 y 便可:
sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
經過上述命令安裝 OpenJDK,默認安裝位置爲 /usr/lib/jvm/java-1.7.0-openjdk(該路徑能夠經過執行 rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
命令肯定,執行後會輸出一個路徑,除去路徑末尾的 「/bin/javac」,剩下的就是正確的路徑了)。OpenJDK 安裝後就能夠直接使用 java、javac 等命令了。
接着須要配置一下 JAVA_HOME 環境變量,爲方便,咱們在 /etc/profile 中進行設置
vim /etc/profile
在文件最後面添加以下單獨一行(指向 JDK 的安裝位置),並保存:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
以下圖所示:
設置JAVA_HOME環境變量
接着還須要讓該環境變量生效,執行以下代碼:
source /etc/profile # 使變量設置生效
設置好後咱們來檢驗一下是否設置正確:
echo $JAVA_HOME # 檢驗變量值 java -version $JAVA_HOME/bin/java -version # 與直接執行 java -version 同樣
若是設置正確的話,$JAVA_HOME/bin/java -version
會輸出 java 的版本信息,且和 java -version
的輸出結果同樣,以下圖所示:
成功設置JAVA_HOME環境變量
這樣,Hadoop 所需的 Java 運行環境就安裝好了。
Hadoop 2 能夠經過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,本教程選擇的是 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 將沒法正常運行。
本文涉及的文件均經過瀏覽器下載,默認保存在 「下載」 目錄中(若不是請自行更改 tar 命令的相應目錄)。另外,若是你用的不是 2.6.0 版本,則將全部命令中出現的 2.6.0 更改成你所使用的版本。
cat ~/下載/hadoop-2.6.0.tar.gz.mds | grep 'MD5' # 列出md5檢驗值 # head -n 6 ~/下載/hadoop-2.7.1.tar.gz.mds # 2.7.1版本格式變了,能夠用這種方式輸出 md5sum ~/下載/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" # 計算md5值,並轉化爲大寫,方便比較
若文件不完整則這兩個值通常差異很大,能夠簡單對比下前幾個字符跟後幾個字符是否相等便可,以下圖所示,若是兩個值不同,請務必從新下載。
檢驗文件完整性
咱們選擇將 Hadoop 安裝至 /usr/local/ 中:
sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改成hadoop sudo chown -R hadoop: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 默認模式爲非分佈式模式,無需進行其餘配置便可運行。非分佈式即單 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 文件夾中。
cd /usr/local/hadoop mkdir ./input cp ./etc/hadoop/*.xml ./input # 將配置文件做爲輸入文件 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' cat ./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映射:
sudo vim /etc/hosts
主機名在終端窗口標題裏能夠看到,或執行命令 hostname
查看,以下圖所示,在最後面增長一行 「127.0.0.1 dblab」:
設置主機名的IP映射
保存文件後,從新運行 hadoop 實例,若執行成功的話會輸出不少做業的相關信息,最後的輸出信息以下圖所示。做業的結果會輸出在指定的 output 文件夾中,經過命令 cat ./output/*
查看結果,符合正則的單詞 dfsadmin 出現了1次:
Hadoop例子輸出結果
注意,Hadoop 默認不會覆蓋結果文件,所以再次運行上面實例會提示出錯,須要先將 ./output
刪除。
rm -r ./output