在Ubuntu下安裝和搭建Hadoop環境(偽分散式環境)
最近在學習Hadoop,原本是在win10系統下裝個虛擬機器,在虛擬機器上裝的是CentOS作業系統,在該虛擬機器上搭建好Hadoop環境之後,在學習WordCount的案例時,發現系統太慢了,還老是卡機,最後果斷放棄使用虛擬機器,轉而使用Ubuntu作業系統(我的筆記本裝了雙系統:win10和Ubuntu16.04.5)。
備註:
1)、Hadoop版本選擇
Hadoop目前有三個版本,分別為:apache hadoop、CDH(Cloudera Distributed Hadoop)、HDP(Hortonworks Data platform)。其中apache hadoop在使用過程中會存在JAR包衝突的問題,一般適合學習使用;CDH具有容易升級、不存在jar包衝突的問題,商業中使用該版本的比較多,學習中也優先選擇;HDP存在升級和刪除節點困難,一般也是用於商業。因此,我選擇的是CDH版本。
2)、在搭建hadoop的環境過程中,主要參考了這篇博文 ofollow,noindex">Ubuntu16.04 下 hadoop的安裝與配置(偽分散式環境) 和 官方文件
3)、Hadoop cdh的下載地址: 點選這裡 ,我選擇的是hadoop-2.6.0-cdh5.7.0
一、準備
根據hadoop官方文件的要求,配置hadoop的前置要求是安裝Java JDK和SSH,因此首先安裝jdk和ssh,為安裝hadoop做準備。

圖片.png
1.1 建立hadoop使用者
$sudouseradd -m hadoop -s /bin/bash #建立hadoop使用者,並使用/bin/bash作為shell $ sudopasswd hadoop#為hadoop使用者設定密碼,之後需要連續輸入兩次密碼 $ sudoadduser hadoopsudo#為hadoop使用者增加管理員許可權 $ su- hadoop#切換當前使用者為使用者hadoop $ sudoapt-get update#更新hadoop使用者的apt,方便後面的安裝
1.2 安裝SSH,設定SSH無密碼登入
$ sudo apt-get install openssh-server#安裝SSH server $ ssh localhost#登陸SSH,第一次登陸輸入yes $ exit#退出登入的ssh localhost $ cd ~/.ssh/#如果沒法進入該目錄,執行一次ssh localhost $ ssh-keygen -t rsa
輸入完$ ssh-keygen -t rsa 語句後,需要連續敲擊三次回車,

image
其中,第一次回車是讓KEY存於預設位置,以方便後續的命令輸入。第二次和第三次是確定passphrase,相關性不大。兩次回車輸入完畢以後,如果出現類似於下圖所示的輸出,即成功:

image
$ cat ./id_rsa.pub >> ./authorized_keys #加入授權 $ ssh localhost#此時已不需密碼即可登入localhost,並可見下圖。如果失敗則可以搜尋SSH免密碼登入來尋求答案

圖片.png
二、安裝jdk1.8
首先在Oracle官網 下載linux版本的jdk1.8 ,然後進行安裝和配置。
mkdir ~/app#建立app資料夾 $ sudo tar -zxvfjdk-8u181-linux-x64.tar.gz-C /app#/ 到壓縮包所在的目錄將JDK解壓到/app目錄下 $ vim~/.bashrc#給JDK配置環境變數
在./bashrc檔案末尾新增如下程式碼:
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_181#將路徑換為自己jdk的路徑 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
修改完檔案後,輸入程式碼:
$ source ~/.bashrc#使新配置的環境變數生效 $ java -version#檢測是否安裝成功,檢視java版本
出現如下資訊,即為安裝成功。

圖片.png
到此,Hadoop的前置要求已經完成,下面開始進行hadoop的安裝和配置。
三、安裝hadoop2.6.0-cdh5.7.0
首先下載hadoop的壓縮包, 下載地址: 點選這裡 ,選擇自己需要的版本,這裡我選擇的是::hadoop-2.6.0-cdh5.7.0.tar.gz 。
下面進行安裝:
$ sudo tar -zxvfhadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app#解壓到~/app目錄下
給hadoop配置環境變數,將下面程式碼新增到~/.brashrc檔案末尾:
export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
同樣,執行source ~/.brashrc使設定生效,並檢視hadoop是否安裝成功。

圖片.png
四、hadoop偽分散式配置
Hadoop 可以在單節點上以偽分散式的方式執行,Hadoop 程序以分離的 Java 程序來執行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的檔案。Hadoop 的配置檔案位於 /hadoop-2.6.0-cdh5.7.0/etc/hadoop/ 中,偽分散式需要修改2個配置檔案 core-site.xml 和 hdfs-site.xml 。Hadoop的配置檔案是 xml 格式,每個配置以宣告 property 的 name 和 value 的方式來實現。
1.修改hadoop-env.sh檔案
首先將jdk1.8的路徑添(export JAVA_HOME=/home/hadoop/app/jdk1.8.0_181 )加到hadoop-env.sh檔案
hadoop@Dell:~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop$ vim hadoop-env.sh export JAVA_HOME=/home/hadoop/app/jdk1.8.0_181

圖片.png
2.修改core-site.xml檔案:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/app/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>

圖片.png
2.修改hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/app/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/app/hadoop/tmp/dfs/data</value> </property> </configuration>

圖片.png
Hadoop 的執行方式是由配置檔案決定的(執行 Hadoop 時會讀取配置檔案),因此如果需要從偽分散式模式切換回非分散式模式,需要刪除 core-site.xml 中的配置項。此外,偽分散式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以執行(可參考官方教程),不過若沒有配置 hadoop.tmp.dir 引數,則預設使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設定,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。
3.驗證
3.1 配置完之後,執行NameNode的格式化
(該程式碼只在第一次配置完之後執行一次,每次執行都會重新格式化一次)
$ bin/hdfs namenode -format
3.2 啟動namenode和datanode程序,並檢視啟動結果
$ sbin/start-dfs.sh $ jps
啟動完成後,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下程序: “NameNode”、”DataNode” 和“SecondaryNameNode”

圖片.png
3.3 也可以通過瀏覽器訪問: http://localhost:50070/ 來驗證hadoop是否啟動成功。

圖片.png
至此,hadoop的安裝就基本上完成了!需要使用YARN的話,還需要單獨配置mapred-site.xml和yarn-site.xml檔案。