1. 程式人生 > >事無鉅細 Hadoop2.6.4 環境搭建步驟詳解

事無鉅細 Hadoop2.6.4 環境搭建步驟詳解

本文詳細記錄了OneCoder通過自己的Mac環境,在開發伺服器(CentOS 6.5)上搭建Hadoop的詳細過程。因為事無鉅細,所以可能會”跑題”。

ssh連線免密碼配置

由於配置過程中需要頻繁的進行ssh連線到開發伺服器執行命令以及通過scp命令向伺服器拷貝檔案等依賴ssh連線的操作。所以,配置本地環境跟伺服器之間的ssh免密碼連線可以有效的提升工作效率。

由於我本機已經生成過公鑰,所以我只需將已有的公鑰拷貝到伺服器即可。推薦使用ssh-copy-id命令,簡單又不會出錯。手動copy 再append的公鑰檔案尾,容易因為操作問題,造成無法正確識別公鑰。

注:如果你沒有生成過公鑰,可通過ssh-keygen

命令生成公鑰。走預設配置即可。

在我的mac上,居然還沒有安裝ssh-copy-id命令。通過brew 命令安裝即可。

brew install ssh-copy-id

然後copy公鑰到指定主機

ssh-copy-id [email protected]

其中, [email protected]改為你需要訪問的伺服器的 使用者名稱@IP。根據提示輸入一次密碼。成功後,所有基於ssh的命令你只需要通過使用者名稱@IP 即可直接訪問伺服器。

新使用者、使用者組建立

為了更好的許可權控制,養成良好的Linux使用習慣,我們首先建立一個管理和使用hadoop叢集的使用者(組)dps-hadoop

。這也是hadoop叢集管理所需要的環境配置。

groupadd dps-hadoop
useradd -d /home/dps-hadoop -g dps-hadoop dps-hadoop

考慮到難免需要使用sudo提權的情況,給該使用者配置到sudo名單下, 修改/etc/sudoers檔案。

vim /etc/sudoers

新增一行記錄:

dps-hadoop ALL=(ALL) ALL

此後,我們均使用dps-hadoop使用者進行操作。

配置本地DNS伺服器

之前我介紹了如何用Docker搭建本地的DNS伺服器,這裡終於派上用處。如果你沒有本地DNS伺服器,那麼你修改/etc/hosts

檔案也可以。 對於CentOS,臨時生效的配置檔案在

/etc/resolv.conf

你可以看到該檔案開頭提示你,該檔案是自動生成的。重啟網路服務會覆蓋,永久配置修改

/etc/sysconfig/network-scripts/ifcfg-eth0

修改其中的

DNS1=172.20.2.24

其中ifcfg-eth0,改為你自己的網絡卡名即可。

安裝JDK

Hadoop是Java開發的,自然需要依賴jre執行。我採用了比較本的方法,現在oracle官網下載jdk-8u77到本地,再通過scp命令拷貝到伺服器的方式。進入jdk所在資料夾執行

scp jdk-8u77-linux-x64.rpm [email protected]:~/download

其實通過wget也可以下載,但是網上給出的命令

wget --no-cookie --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/7u10-b18/jdk-7u10-linux-i586.rpm

我試了多次均未成功。我自己有個笨方法,就是先通過瀏覽器獲取下載獲取到真正的下載地址

然後再通過wget下載:

wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm?AuthParam=1460511903_6b2f8345927b3fc4f961fbcaba6a01b3

下載後,你可能需要進行一次重新命名,將多餘的?AuthParam字尾去掉。

mv jdk-8u77-linux-x64.rpm?AuthParam=1460511903_6b2f8345927b3fc4f961fbcaba6a01b3 jdk-8u77-linux-x64.rpm

最後,安裝jdk

rpm -i jdk-8u77-linux-x64.rpm

配置JAVA_HOME

修改dps-hadoop使用者自己的環境變數配置檔案。

vim ~/.bashrc

注意:網上提到了配置環境變數的方式有很多,粗暴的就是直接配置在/etc/environment/etc/profile等全域性配置檔案中,對所有使用者生效。不推薦這種做法。對於使用者級的變數也有兩個~/.bash_profile~/.bashrc,區別請自行研究。如果你想通過執行start-dfs.sh等指令碼,遠端起停hadoop叢集,那麼請配置在~/.bashrc中,否則hadoop會找不到你配置的環境變數。

例如:Error: JAVA_HOME is not set and could not be found.

新增

export JAVA_HOME="/usr/java/jdk1.8.0_77"

不建議配置到/etc/environment 下,因為會對所有使用者生效。

安裝Hadoop 2.6.4

根據官網介紹,Hadoop專案實際包含以下模組:

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

首先,直接通過wget,從映象站下載。

wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz

解壓到使用者目錄

tar -xvzf hadoop-2.6.4.tar.gz -C ~/

配置HADOOP_HOME,同樣修改~/.bashrc檔案。增加

export HADOOP_HOME="/home/dps-hadoop/hadoop-2.6.4"

在其他節點重複上述所有配置操作。

  • 新增使用者
  • 配置dps-hadoop使用者,從master到各slave節點間的ssh免密碼訪問。
  • 修改DNS伺服器地址
  • 安裝JDK
  • 下載解壓Hadoop
  • 配置Hadoop環境變數

配置叢集

從模組角度理解,配置hadoop叢集應包括HDFSYARNMapReduce這三部分配置。

HDFS配置

不考慮調優,僅從功能可執行上來理解,HDFS配置需要分別配置namenode、datanode的ip和埠號。資料備份份數。資料存放地址。因此配置如下:

namenode

core-site.xml

<configuration>
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/dps-hadoop/tmpdata</value>
     </property>
     <property>
           <name>fs.default.name</name>
              <value>hdfs://master:54000/</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/dps-hadoop//namedata</value>
     </property>
    <property>
            <name>dfs.replication</name>
            <value>2</value>
     </property>
</configuration>
Datanode

core-site.xml

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/dps-hadoop/tmpdata</value>
         </property>
         <property>
           <name>fs.default.name</name>
              <value>hdfs://master:54000/</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    
    <property>
            <name>dfs.datanode.data.dir</name>
            <value>/home/dps-hadoop/datadir</value>
     </property>
</configuration>

這裡只有core-site.xml裡的hadoop.tmp.dir的配置是我們之前沒有提到的。該配置是修改臨時檔案的儲存路徑,避免因為系統重啟造成的臨時檔案的丟失,從而導致叢集不可能用的情況出現。

2016-04-28注:

	<property>
           <name>fs.default.name</name>
           <value>hdfs://master:54000/</value>
    </property>

該配置必須配置在core-site.xml配置檔案中,之前的配置是錯誤的。否則,各個hdfs節點不在一個叢集中。

啟動HDFS叢集

跟使用硬碟一樣,HDFS使用前也需要格式化

bin/hdfs namenode -format

然後啟動

sbin/start-dfs.sh

通過控制檯,可檢視HDFS叢集狀態

http://172.20.2.14:50070/

一個插曲

啟動時候發現一個WARN日誌。

16/04/19 13:59:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

無法載入本地庫。從stackoverflow上答案來看,主要有三種可能。

  • 沒有指定java.library.path環境變數。
  • 本地庫跟系統不相容。(64位系統,提供的是32位的本地庫)
  • GLIBC版本不相容

通過file命令檢視

file lib/native/*

已經是64位的本地庫。

修改log4j.properties 開啟本地載入的debug級別

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

再次啟動發現問題

16/04/19 14:27:00 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/dps-hadoop/hadoop-2.6.4/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by /home/dps-hadoop/hadoop-2.6.4/lib/native/libhadoop.so.1.0.0)

通過

ldd --version

發現我本地環境的版本是2.12的。這個不升級系統版本很難解決。把log 改成ERROR,暫時眼不見心不煩吧。

YARN配置

在YARN裡,主節點稱為ResourceManager,從節點稱為NodeManager。 根據理解,需要告知NodeManager, ResouceManager的通訊地址。 對於ResourceManager來說,所以的從節點已經配置在slaves中了。因此,配置如下:

NodeManager

yarn-site.xml

<configuration>
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
</configuration>

啟動yarn,主節點執行

.sbin/start-yarn.sh

MapReduce JobHistoryServer

對於MapReduce,預設無需特殊配置。Hadoop提供了一個管理任務執行歷史的服務JobHistoryServer。按需啟動即可。

mr-jobhistory-daemon.sh stop historyserver

至此,一個基本的Hadoop叢集已經啟動完成。

叢集管理環境 WebUI地址

Hadoop預設提供了檢視叢集狀態的Web服務,在主節點上啟動。預設埠如下。

  • HDFS叢集管理,預設埠50070。 http://master:50070/
  • ResourceManager管理,預設埠8088 http://master:8088/
  • JobHistory 預設埠19888 http://master:19888