1. 程式人生 > >Hadoop安裝教程_單機/偽分散式配置_Hadoop2.6.4/Ubuntu16.04

Hadoop安裝教程_單機/偽分散式配置_Hadoop2.6.4/Ubuntu16.04

1. 簡介

本教程適合於原生 Hadoop 2,包括 Hadoop 2.6.4, Hadoop 2.7.1 等版本,看了很多資料,自己搭建了好幾次,特做個總結,按照步驟來都能成功。

2. 環境

本教程使用 Ubuntu 16.04 64位 作為系統環境(Ubuntu 14.04,12.04 也行,32位、64位均可),請自行安裝系統。

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

3. 建立hadoop使用者

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

  • 建立可以登陸的 hadoop 使用者,並使用 /bin/bash 作為 shell。
$ sudo useradd -m hadoop -s /bin/bash
  • 接著使用如下命令設定密碼,可簡單設定為 hadoop,按提示輸入兩次密碼:
$ sudo passwd hadoop
  • 為 hadoop 使用者增加管理員許可權,方便部署,避免一些對新手來說比較棘手的許可權問題:
$ sudo adduser hadoop sudo

最後登出當前使用者,使用剛建立的 hadoop 使用者進行登陸,接下來的教程都在hadoop使用者下操作

4. 更新apt

先更新一下 apt,後續我們使用 apt 安裝軟體,如果沒更新可能有一些軟體安裝不了

$ sudo
apt-get update

安裝vim編輯器

$ sudo apt-get install vim

5. 安裝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  # 加入授權

此時再用 ssh localhost 命令,無需輸入密碼就可以直接登陸了

6. 安裝Java環境

Java環境可選擇 Oracle 的 JDK,或是 OpenJDK,為圖方便,這邊直接通過命令安裝 OpenJDK 8。

$ sudo apt-get install openjdk-8-jre openjdk-8-jdk

安裝好 OpenJDK 後,需要找到相應的安裝路徑,預設的路徑是:/usr/lib/jvm/java-8-openjdk-amd64

接著配置 JAVA_HOME 環境變數,為方便,我們在 ~/.bashrc 中進行設定

$ sudo vim ~/.bashrc

在檔案最前面新增如下單獨一行(注意 = 號前後不能有空格),將“JDK安裝路徑”改為上述命令得到的路徑,並儲存:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #jdk的安裝路徑 預設是這個

接著還需要讓該環境變數生效,執行如下程式碼:

$ source ~/.bashrc    # 使變數設定生效

設定好之後檢測java環境變數是否配置好,輸入以下命令

$ java
$ javac
$ java -version

如果有如下輸出就正常
這裡寫圖片描述
至此,Java環境就配置好了

7. 安裝 Hadoop2

本次教程使用的是 hadoop2.6.4 首先下載hadoop的壓縮包
使用wget命令 預設下載在/home/hadoop 使用者目錄下

$ cd /home/hadoop
$ wget http://apache.fayea.com/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz
$ tar -xvf hadoop-2.6.4.tar.gz    # 解壓到當前目錄
$ mv ./hadoop-2.6.4/ ./hadoop     # 將資料夾名改為hadoop
$ chown -R hadoop ./hadoop       # 修改檔案許可權

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

$ cd ./hadoop
$ ./bin/hadoop version

8. Hadoop單機配置(非分散式)

Hadoop 可以在單節點上以偽分散式的方式執行,Hadoop 程序以分離的 Java 程序來執行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的檔案。

Hadoop 的配置檔案位於 /home/hadoop/hadoop/etc/hadoop/ 中,偽分散式需要修改3個配置檔案 core-site.xml 和 hdfs-site.xml, hadoop-env.sh。Hadoop的配置檔案是 xml 格式,每個配置以宣告 property 的 name 和 value 的方式來實現。

  • 修改配置檔案 hadoop-env.sh
$ vim hadoop-env.sh
#在最前面插入一行
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  • 修改配置檔案 core-site.xml
$ vim ./etc/hadoop/core-site.xml

將當中的

<configuration>
</configuration>

替換為

<configuration>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file: /home/hadoop/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:/home/hadoop/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
            <value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

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

$ ./bin/hdfs namenode -format

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

接著開啟 NameNode 和 DataNode 守護程序。

$ ./sbin/start-dfs.sh

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

啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。該 WARN 提示可以忽略,並不會影響正常使用(該 WARN 可以通過編譯 Hadoop 原始碼解決)。

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

若是 DataNode 沒有啟動,可嘗試如下的方法(注意這會刪除 HDFS 中原有的所有資料,如果原有的資料很重要請不要這樣做):

# 針對 DataNode 沒法啟動的解決方法
$ ./sbin/stop-dfs.sh   # 關閉
$ rm -r ./tmp     # 刪除 tmp 檔案,注意這會刪除 HDFS 中原有的所有資料
$ ./bin/hdfs namenode -format   # 重新格式化 NameNode
$ ./sbin/start-dfs.sh  # 重啟

這樣 單機/偽分散式的hadoop就搭建好了