1. 程式人生 > 程式設計 >Hadoop 系列(五)—— Hadoop 叢集環境搭建

Hadoop 系列(五)—— Hadoop 叢集環境搭建

一、叢集規劃

這裡搭建一個 3 節點的 Hadoop 叢集,其中三臺主機均部署 DataNodeNodeManager 服務,但只有 hadoop001 上部署 NameNodeResourceManager 服務。

https://github.com/heibaiying

二、前置條件

Hadoop 的執行依賴 JDK,需要預先安裝。其安裝步驟單獨整理至:

三、配置免密登入

3.1 生成密匙

在每臺主機上使用 ssh-keygen 命令生成公鑰私鑰對:

ssh-keygen
複製程式碼

3.2 免密登入

hadoop001 的公鑰寫到本機和遠端機器的 ~/ .ssh/authorized_key 檔案中:

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
複製程式碼

3.3 驗證免密登入

ssh hadoop002
ssh hadoop003
複製程式碼

四、叢集搭建

3.1 下載並解壓

下載 Hadoop。這裡我下載的是 CDH 版本 Hadoop,下載地址為:archive.cloudera.com/cdh5/cdh/5/

# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz 
複製程式碼

3.2 配置環境變數

編輯 profile 檔案:

# vim /etc/profile
複製程式碼

增加如下配置:

export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export  PATH=${HADOOP_HOME}/bin:$PATH
複製程式碼

執行 source 命令,使得配置立即生效:

# source /etc/profile
複製程式碼

3.3 修改配置

進入 ${HADOOP_HOME}/etc/hadoop 目錄下,修改配置檔案。各個配置檔案內容如下:

1. hadoop-env.sh

# 指定JDK的安裝位置
export JAVA_HOME=/usr/java/jdk1.8.0_201/
複製程式碼

2. core-site.xml

<configuration>
    <property>
        <!--指定 namenode 的 hdfs 協議檔案系統的通訊地址-->
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:8020</value>
    </property>
    <property>
        <!--指定 hadoop 叢集儲存臨時檔案的目錄-->
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
</configuration>
複製程式碼

3. hdfs-site.xml

<property>
      <!--namenode 節點資料(即元資料)的存放位置,可以指定多個目錄實現容錯,多個目錄用逗號分隔-->
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/namenode/data</value>
</property>
<property>
      <!--datanode 節點資料(即資料塊)的存放位置-->
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/datanode/data</value>
</property>
複製程式碼

4. yarn-site.xml

<configuration>
    <property>
        <!--配置 NodeManager 上執行的附屬服務。需要配置成 mapreduce_shuffle 後才可以在 Yarn 上執行 MapReduce 程式。-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <!--resourcemanager 的主機名-->
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop001</value>
    </property>
</configuration>

複製程式碼

5. mapred-site.xml

<configuration>
    <property>
        <!--指定 mapreduce 作業執行在 yarn 上-->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
複製程式碼

5. slaves

配置所有從屬節點的主機名或 IP 地址,每行一個。所有從屬節點上的 DataNode 服務和 NodeManager 服務都會被啟動。

hadoop001
hadoop002
hadoop003
複製程式碼

3.4 分發程式

將 Hadoop 安裝包分發到其他兩臺伺服器,分發後建議在這兩臺伺服器上也配置一下 Hadoop 的環境變數。

# 將安裝包分發到hadoop002
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop002:/usr/app/
# 將安裝包分發到hadoop003
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop003:/usr/app/
複製程式碼

3.5 初始化

Hadoop001 上執行 namenode 初始化命令:

hdfs namenode -format
複製程式碼

3.6 啟動叢集

進入到 Hadoop001${HADOOP_HOME}/sbin 目錄下,啟動 Hadoop。此時 hadoop002hadoop003 上的相關服務也會被啟動:

# 啟動dfs服務
start-dfs.sh
# 啟動yarn服務
start-yarn.sh
複製程式碼

3.7 檢視叢集

在每臺伺服器上使用 jps 命令檢視服務程式,或直接進入 Web-UI 介面進行檢視,埠為 50070。可以看到此時有三個可用的 Datanode

https://github.com/heibaiying

點選 Live Nodes 進入,可以看到每個 DataNode 的詳細情況:

https://github.com/heibaiying

接著可以檢視 Yarn 的情況,埠號為 8088

https://github.com/heibaiying

五、提交服務到叢集

提交作業到叢集的方式和單機環境完全一致,這裡以提交 Hadoop 內建的計算 Pi 的示例程式為例,在任何一個節點上執行都可以,命令如下:

hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar  pi  3  3
複製程式碼

更多大資料系列文章可以參見 GitHub 開源專案大資料入門指南