在linux中安裝Hadoop教程-偽分布式配置-Hadoop2.6.0-Ubuntu14.04


注:該教程轉自廈門大學大數據課程學習總結

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

創建hadoop用戶

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

首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶 :

  sudo useradd -m hadoop -s /bin/bash

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

sudo命令

  本文中會大量使用到sudo命令。sudo是ubuntu中一種權限管理機制,管理員可以授權給一些普通用戶去執行一些需要root權限執行的操作。當使用sudo命令時,就需要輸入您當前用戶的密碼.

密碼

  在Linux的終端中輸入密碼,終端是不會顯示任何你當前輸入的密碼,也不會提示你已經輸入了多少字符密碼。而在windows系統中,輸入密碼一般都會以“*”表示你輸入的密碼字符

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

    sudo passwd hadoop

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

  sudo adduser hadoop sudo

最后注銷當前用戶(點擊屏幕右上角的齒輪,選擇注銷),返回登陸界面。在登陸界面中選擇剛創建的 hadoop 用戶進行登陸。

更新apt

用 hadoop 用戶登錄后,我們先更新一下 apt,后續我們使用 apt 安裝軟件,如果沒更新可能有一些軟件安裝不了。按 ctrl+alt+t 打開終端窗口,執行如下命令:

  sudo apt-get update

后續需要更改一些配置文件,我比較喜歡用的是 vim(vi增強版,基本用法相同)

  sudo apt-get install vim

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

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

  sudo apt-get install openssh-server

安裝后,配置SSH無密碼登陸

利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:

  exit # 退出剛才的 ssh localhost

  cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost

  ssh-keygen -t rsa # 會有提示,都按回車就可以

  cat ./id_rsa.pub >> ./authorized_keys # 加入授權

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

安裝Java環境

需要按照下面步驟來自己手動安裝JDK1.8。
我們已經把JDK1.8的安裝包jdk-8u162-linux-x64.tar.gz放在了百度雲盤,可以點擊這里到百度雲盤下載JDK1.8安裝包(提取碼:gx0b)。請把壓縮格式的文件jdk-8u162-linux-x64.tar.gz下載到本地電腦,假設保存在“/home/linziyu/Downloads/”目錄下。

在Linux命令行界面中,執行如下Shell命令(注意:當前登錄用戶名是hadoop):

  1. cd /usr/lib
  2. sudo mkdir jvm #創建/usr/lib/jvm目錄用來存放JDK文件
  3. cd ~ #進入hadoop用戶的主目錄
  4. cd Downloads #注意區分大小寫字母,剛才已經通過FTP軟件把JDK安裝包jdk-8u162-linux-x64.tar.gz上傳到該目錄下
  5. sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解壓到/usr/lib/jvm目錄下

JDK文件解壓縮以后,可以執行如下命令到/usr/lib/jvm目錄查看一下:

  1. cd /usr/lib/jvm
  2. ls

可以看到,在/usr/lib/jvm目錄下有個jdk1.8.0_162目錄。
下面繼續執行如下命令,設置環境變量:

  1. cd ~
  2. vim ~/.bashrc

上面命令使用vim編輯器打開了hadoop這個用戶的環境變量配置文件,請在這個文件的開頭位置,添加如下幾行內容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 

保存.bashrc文件並退出vim編輯器。然后,繼續執行如下命令讓.bashrc文件的配置立即生效:

  1. source ~/.bashrc

這時,可以使用如下命令查看是否安裝成功:

  1. java -version

如果能夠在屏幕上返回如下信息,則說明安裝成功:

hadoop@ubuntu:~$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

至此,就成功安裝了Java環境。下面就可以進入Hadoop的安裝。

安裝 Hadoop 2

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

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

  1. sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中
  2. cd /usr/local/
  3. sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop
  4. sudo chown -R hadoop ./hadoop # 修改文件權限

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

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

Hadoop偽分布式配置

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

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

修改配置文件 core-site.xml (通過 gedit 編輯會比較方便: gedit ./etc/hadoop/core-site.xml),將當中的

  1. <configuration>
  2. </configuration>

修改為下面配置:

  1. <configuration>
  2. <property>
  3. <name>hadoop.tmp.dir</name>
  4. <value>file:/usr/local/hadoop/tmp</value>
  5. <description>Abase for other temporary directories.</description>
  6. </property>
  7. <property>
  8. <name>fs.defaultFS</name>
  9. <value>hdfs://localhost:9000</value>
  10. </property>
  11. </configuration>

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

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  13. </property>
  14. </configuration>
Hadoop配置文件說明

Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要刪除 core-site.xml 中的配置項。

此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。

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

  1. ./bin/hdfs namenode -format

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

執行namenode格式化

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

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

啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,並不會影響正常使用。

啟動 Hadoop 時提示 Could not resolve hostname

如果啟動 Hadoop 時遇到輸出非常多“ssh: Could not resolve hostname xxx”的異常情況,如下圖所示:

啟動Hadoop時的異常提示

啟動Hadoop時的異常提示

這個並不是 ssh 的問題,可通過設置 Hadoop 環境變量來解決。首先按鍵盤的 ctrl + c中斷啟動,然后在 ~/.bashrc 中,增加如下兩行內容(設置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 為 Hadoop 的安裝目錄):

  1. export HADOOP_HOME=/usr/local/hadoop
  2. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

保存后,務必執行 source ~/.bashrc 使變量設置生效,然后再次執行 ./sbin/start-dfs.sh 啟動 Hadoop。

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

通過jps查看啟動的Hadoop進程

Hadoop無法正常啟動的解決方法

一般可以查看啟動日志來排查原因,注意幾點:

  • 啟動時會提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 對應你的機器名,但其實啟動日志信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應該查看這個后綴為 .log 的文件;
  • 每一次的啟動日志都是追加在日志文件之后,所以得拉到最后面看,對比下記錄的時間就知道了。
  • 一般出錯的提示在最后面,通常是寫着 Fatal、Error、Warning 或者 Java Exception 的地方。
  • 可以在網上搜索一下出錯信息,看能否找到一些相關的解決方法。

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

  1. # 針對 DataNode 沒法啟動的解決方法
  2. ./sbin/stop-dfs.sh # 關閉
  3. rm -r ./tmp # 刪除 tmp 文件,注意這會刪除 HDFS 中原有的所有數據
  4. ./bin/hdfs namenode -format # 重新格式化 NameNode
  5. ./sbin/start-dfs.sh # 重啟

成功啟動后,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。

Hadoop的Web界面

附加教程: 配置PATH環境變量

在這里額外講一下 PATH 這個環境變量(可執行 echo $PATH 查看,當中包含了多個目錄)。例如我們在主文件夾 ~ 中執行 ls 這個命令時,實際執行的是 /bin/ls 這個程序,而不是 ~/ls 這個程序。系統是根據 PATH 這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的則提示該命令不存在)。

上面的教程中,我們都是先進入到 /usr/local/hadoop 目錄中,再執行 sbin/hadoop,實際上等同於運行 /usr/local/hadoop/sbin/hadoop。我們可以將 Hadoop 命令的相關目錄加入到 PATH 環境變量中,這樣就可以直接通過 start-dfs.sh 開啟 Hadoop,也可以直接通過 hdfs訪問 HDFS 的內容,方便平時的操作。

同樣我們選擇在 ~/.bashrc 中進行設置(vim ~/.bashrc,與 JAVA_HOME 的設置相似),在文件最前面加入如下單獨一行:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加后執行 source ~/.bashrc 使設置生效,生效后,在任意目錄中,都可以直接使用 hdfs等命令了。

注:安裝的Hadoop版本和JDK版本最好先查一下是否適配,JDK版本太高或太低可能會造成莫名其妙的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM