全部產品
Search
文件中心

Elastic Compute Service:搭建Hadoop環境

更新時間:Mar 21, 2025

Hadoop是由Apache基金會使用Java語言開發的分布式開源軟體架構,本文介紹如何在Linux作業系統的ECS執行個體上快速搭建Hadoop分布式和偽分布式環境。

背景資訊

Apache Hadoop軟體庫是一個架構,它允許通過簡單的編程模型在由多台電腦群組成的叢集上對大規模資料集進行分散式處理。該架構設計能夠從單個伺服器擴充到數千台機器,每台機器都提供本地計算和儲存能力。Hadoop並不依賴硬體來實現高可用性,而是將其自身設計為能夠在應用程式層檢測並處理故障,因此能在可能各自存在故障風險的電腦叢集之上,提供高度可用的服務。

Hadoop的核心組件是HDFS(Hadoop Distributed File System)和MapReduce:

  • HDFS:是一個Distributed File System,可用於應用程式資料的分布式儲存和讀取。

  • MapReduce:是一個分散式運算架構,MapReduce的核心思想是把計算任務分配給叢集內的伺服器執行。通過對計算任務的拆分(Map計算和Reduce計算),再根據任務調度器(JobTracker)對任務進行分散式運算。

特性

偽分布式模式

完全分布式模式

節點數量

單節點(所有服務在同一台機器上)。

多節點(服務分布在多台機器上)。

資源使用率

使用單台機器的資源。

充分利用多台機器的計算和儲存資源。

容錯性

容錯性低,單點故障會導致整個叢集不可用。

容錯性高,支援資料複製和高可用性配置。

應用情境

  • 開發與測試

  • 學習和培訓

  • 小型專案

  • 生產環境

  • 高可用性和容錯性要求高的情境

  • 多使用者和多任務

  • 大規模資料存放區和處理

快速部署

您可以單擊一鍵運行進入Terraform Explorer查看並執行Terraform代碼,從而實現自動化地在ECS執行個體中搭建Hadoop環境。

前提條件

搭建Hadoop環境時,已有的ECS執行個體必須滿足以下條件:

環境

要求

執行個體

偽分布式

1台執行個體

分布式

3台及以上執行個體

說明

建議您將執行個體加入到高可用策略的部署集中,可以提高應用的高可用性和容災能力,便於Hadoop叢集的管理。

作業系統

Linux

公網IP

執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。

執行個體安全性群組

允許存取22、443、8088(Hadoop YARN預設的Web UI連接埠)、9870(Hadoop NameNode預設的Web UI連接埠)。

說明

如果部署分布式環境,還需允許存取Hadoop Secondary Namenode的自訂Web UI連接埠,現定義連接埠為9868。

具體操作,請參見管理安全性群組規則

Java開發套件(JDK)

本文使用的版本為Hadoop 3.2.4和Java 8,如您使用其他版本,請參考Hadoop官網指南。更多資訊,請參見Hadoop Java Versions

Hadoop版本

Java版本

Hadoop 3.3

Java 8和Java 11

Hadoop 3.0.x~3.2.x

Java 8

Hadoop 2.7.x~2.10.x

Java 7和Java 8

操作步驟

分布式

說明

在部署Hadoop前需對節點進行規劃。以三台執行個體為例,hadoop001節點為master節點,hadoop002hadoop003節點為worker節點。

功能組件

hadoop001

hadoop002

hadoop003

HDFS

  • NameNode

  • DataNode

DataNode

  • SecondaryNameNode

  • DataNode

YARN

NodeManager

  • ResourceManager

  • NodeManager

NodeManager

步驟一:安裝JDK。

重要

所有節點均需安裝JDK環境。

  1. 以普通使用者遠端連線已建立的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

    重要

    出於系統安全和穩定性考慮,Hadoop官方不推薦使用root使用者來啟動Hadoop服務,直接使用root使用者會因為許可權問題無法啟動Hadoop。您可以通過非root使用者身份啟動Hadoop服務,例如ecs-user使用者等。

  2. 執行以下命令,下載JDK 1.8安裝包。

    wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  3. 執行以下命令,解壓下載的JDK 1.8安裝包。

    tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  4. 執行以下命令,移動並重新命名JDK安裝包。

    本樣本中將JDK安裝包重新命名為java8,您可以根據需要使用其他名稱。

    sudo mv java-se-8u41-ri/ /usr/java8
  5. 執行以下命令,配置Java環境變數。

    如果您將JDK安裝包重新命名為其他名稱,需將以下命令中的java8替換為實際的名稱。

    sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile"
    sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile'
    source /etc/profile
  6. 執行以下命令,查看JDK是否成功安裝。

    java -version

    返回如下資訊,表示JDK已安裝成功。

    image

步驟二:配置SSH免密登入。

重要

所有執行個體均需執行此操作。

通過設定SSH免密登入,可以讓這些節點之間實現無縫串連,無需每次都輸入密碼驗證身份,從而使得Hadoop叢集的管理和維護變得更加便捷高效。

  1. 配置主機名稱和通訊。

    sudo vim /etc/hosts

    添加所有執行個體的資訊<主私網IP 主機名稱>/etc/hosts檔案中。如下:

    主私網IP hadoop001
    主私網IP hadoop002
    主私網IP hadoop003
  2. 執行以下命令,建立公開金鑰和私密金鑰。

    ssh-keygen -t rsa

    image

  3. 執行ssh-copy-id <主機名稱>,替換主機名稱為正確的名稱。如下:

    hadoop001上依次執行 ssh-copy-id hadoop001ssh-copy-id hadoop002ssh-copy-id hadoop003。執行每一個命令後需要輸入yes和對應ECS執行個體的ID密碼。

    ssh-copy-id hadoop001
    ssh-copy-id hadoop002
    ssh-copy-id hadoop003

    返回如下資訊,表示免密登入配置成功。

    image

步驟三:安裝Hadoop。

重要

以下命令需在所有執行個體中執行。

  1. 執行以下命令,下載Hadoop安裝包。

    wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
  2. 執行以下命令,將Hadoop安裝包解壓至/opt/hadoop

    sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/
    sudo mv /opt/hadoop-3.2.4 /opt/hadoop
  3. 執行以下命令,配置Hadoop環境變數。

    sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile"
    source /etc/profile
  4. 執行以下命令,修改設定檔yarn-env.shhadoop-env.sh

    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh'
    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh'
  5. 執行以下命令,測試Hadoop是否安裝成功。

    hadoop version

    返回如下資訊,表示Hadoop已安裝成功。

    image

步驟四:配置Hadoop。

重要

在所有節點上修改Hadoop的設定檔。

  1. 修改Hadoop設定檔core-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/core-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

         <!--指定namenode的地址-->
         <property>
               <name>fs.defaultFS</name>
               <value>hdfs://hadoop001:8020</value>
         </property>
         <!--用來指定使用hadoop時產生檔案的存放目錄-->
         <property>
               <name>hadoop.tmp.dir</name>
               <value>/opt/hadoop/data</value>
         </property>
         <!--配置HDFS網頁登入使用的靜態使用者為hadoop-->
         <property>
                <name>hadoop.http.staticuser.user</name>
                <value>hadoop</value>
         </property>
  2. 修改Hadoop設定檔hdfs-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

          <!-- namenode web 端訪問地址-->
          <property>
              <name>dfs.namenode.http-address</name>  
              <value>hadoop001:9870</value>
          </property>
          <!-- secondary namenode web 端訪問地址-->
          <property>
              <name>dfs.namenode.secondary.http-address</name>
              <value>hadoop003:9868</value>
          </property>
  3. 修改Hadoop設定檔yarn-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/yarn-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

           <!--NodeManager擷取資料的方式是shuffle-->
           <property>
      	 <name>yarn.nodemanager.aux-services</name>
      	 <value>mapreduce_shuffle</value>
           </property>
      
          <!--指定Yarn(ResourceManager)的地址-->     
          <property>
      	 <name>yarn.resourcemanager.hostname</name>
      	 <value>hadoop002</value>
          </property> 
          
          <!--指定NodeManager允許傳遞給容器的環境變數白名單-->
          <property>
          	<name>yarn.nodemanager.env-whitelist</name>
          	<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
          </property>
  4. 修改Hadoop設定檔mapred-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/mapred-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

         <!--告訴hadoop將MR(Map/Reduce)運行在YARN上-->
         <property>
      	 <name>mapreduce.framework.name</name>
      	 <value>yarn</value>
         </property>
  5. 修改Hadoop設定檔workers

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/workers
    2. 在檔案workers內,插入執行個體資訊。

      hadoop001
      hadoop002
      hadoop003

步驟五:啟動Hadoop。

  1. 執行以下命令,初始化namenode

    警告

    僅在第一次啟動時需要初始化namenode。三台執行個體均需執行。

    hadoop namenode -format
  2. 啟動Hadoop。

    重要
    • 出於系統安全和穩定性考慮,Hadoop官方不推薦使用root使用者來啟動Hadoop服務,直接使用root使用者會因為許可權問題無法啟動Hadoop。您可以通過非root使用者身份啟動Hadoop服務,例如ecs-user使用者等。

    • 如果您一定要使用root使用者啟動Hadoop服務,請在瞭解Hadoop許可權控制及相應風險之後,修改以下設定檔。

      請注意:使用root使用者啟動Hadoop服務會帶來嚴重的安全風險,包括但不限於資料泄露、惡意軟體更容易獲得系統最高許可權、意料之外的許可權問題或行為。更多許可權說明,請參見Hadoop官方文檔

    修改設定檔,以便root使用者可以啟動Hadoop服務。

    一般情況下,以下設定檔位於/opt/hadoop/sbin目錄下。

    1. start-dfs.shstop-dfs.sh兩個檔案中添加以下參數。

      HDFS_DATANODE_USER=root
      HADOOP_SECURE_DN_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root

      image

    2. start-yarn.shstop-yarn.sh兩個檔案中添加以下參數。

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root

      image

    1. hadoop001上執行start-dfs.sh指令碼,啟動HDFS服務。

      這個指令碼會啟動NameNode、SecondaryNameNode和DataNode等組件,從而啟動HDFS服務。

      start-dfs.sh

      執行命令jps回顯資訊如下所示時,表示HDFS服務已啟動。

      image

    2. hadoop002上執行start-yarn.sh指令碼,啟動YARN服務。

      這個指令碼會啟動ResourceManager、NodeManager等組件,從而啟動YARN服務。

      start-yarn.sh

      回顯資訊如下所示時,表示YARN服務已啟動。

      image

  3. 在三台節點上執行以下命令,可以查看成功啟動的進程。

    jps

    成功啟動的進程如下所示。

    image

  4. 在本地瀏覽器地址欄輸入http://<hadoop002 ECS公網IP>:8088,訪問YARN的Web UI介面。

    通過該介面可以查看整個叢集的資源使用方式、應用程式狀態(比如MapReduce作業)、隊列資訊等。

    重要

    需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop YARN所需的8088連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則

    image

  5. 在本地瀏覽器地址欄輸入http://<hadoop001 ECS公網IP>:9870,訪問NameNode的Web UI介面;輸入http://<hadoop003 ECS公網IP>:9868,訪問SecondaryNameNode的Web UI介面。

    該介面提供了有關HDFS檔案系統狀態、叢集健康情況、活動節點列表、NameNode日誌等資訊。

    顯示如下介面,則表示Hadoop分布式環境已搭建完成。

    重要

    需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop NameNode所需9870連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則

    image

偽分布式

步驟一:安裝JDK。

  1. 以普通使用者遠端連線已建立的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

    重要

    出於系統安全和穩定性考慮,Hadoop官方不推薦使用root使用者來啟動Hadoop服務,直接使用root使用者會因為許可權問題無法啟動Hadoop。您可以通過非root使用者身份啟動Hadoop服務,例如ecs-user使用者等。

  2. 執行以下命令,下載JDK 1.8安裝包。

    wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  3. 執行以下命令,解壓下載的JDK 1.8安裝包。

    tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  4. 執行以下命令,移動並重新命名JDK安裝包。

    本樣本中將JDK安裝包重新命名為java8,您可以根據需要使用其他名稱。

    sudo mv java-se-8u41-ri/ /usr/java8
  5. 執行以下命令,配置Java環境變數。

    如果您將JDK安裝包重新命名為其他名稱,需將以下命令中的java8替換為實際的名稱。

    sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile"
    sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile'
    source /etc/profile
  6. 執行以下命令,查看JDK是否成功安裝。

    java -version

    返回如下資訊,表示JDK已安裝成功。

    image

步驟二:配置SSH免密登入。

說明

單節點也需要配置SSH免密登入;否則,在嘗試啟動NameNode和DataNode時,會出現許可權拒絕錯誤。

  1. 執行以下命令,建立公開金鑰和私密金鑰。

    ssh-keygen -t rsa

    image

  2. 執行以下命令,將公開金鑰添加到authorized_keys檔案中。

    cd .ssh
    cat id_rsa.pub >> authorized_keys

步驟三:安裝Hadoop。

  1. 執行以下命令,下載Hadoop安裝包。

    wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
  2. 執行以下命令,將Hadoop安裝包解壓至/opt/hadoop

    sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/
    sudo mv /opt/hadoop-3.2.4 /opt/hadoop
  3. 執行以下命令,配置Hadoop環境變數。

    sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile"
    source /etc/profile
  4. 執行以下命令,修改設定檔yarn-env.shhadoop-env.sh

    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh'
    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh'
  5. 執行以下命令,測試Hadoop是否安裝成功。

    hadoop version

    返回如下資訊,表示Hadoop已安裝成功。

    image

步驟四:配置Hadoop

  1. 修改Hadoop設定檔core-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/core-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

          <property>
              <name>hadoop.tmp.dir</name>
              <value>file:/opt/hadoop/tmp</value>
              <description>location to store temporary files</description>
          </property>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://localhost:9000</value>
          </property>
  2. 修改Hadoop設定檔hdfs-site.xml

    1. 執行以下命令,進入編輯頁面。

      sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
    2. <configuration></configuration>節點內,插入如下內容。

          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>file:/opt/hadoop/tmp/dfs/name</value>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/opt/hadoop/tmp/dfs/data</value>
          </property>

步驟五:啟動Hadoop

  1. 執行以下命令,初始化namenode

    hadoop namenode -format
  2. 啟動Hadoop。

    重要
    • 出於系統安全和穩定性考慮,Hadoop官方不推薦使用root使用者來啟動Hadoop服務,直接使用root使用者會因為許可權問題無法啟動Hadoop。您可以通過非root使用者身份啟動Hadoop服務,例如ecs-user使用者等。

    • 如果您一定要使用root使用者啟動Hadoop服務,請在瞭解Hadoop許可權控制及相應風險之後,修改以下設定檔。

      請注意:使用root使用者啟動Hadoop服務會帶來嚴重的安全風險,包括但不限於資料泄露、惡意軟體更容易獲得系統最高許可權、意料之外的許可權問題或行為。更多許可權說明,請參見Hadoop官方文檔

    修改設定檔,以便root使用者可以啟動Hadoop服務。

    一般情況下,以下設定檔位於/opt/hadoop/sbin目錄下。

    1. start-dfs.shstop-dfs.sh兩個檔案中添加以下參數。

      HDFS_DATANODE_USER=root
      HADOOP_SECURE_DN_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root

      image

    2. start-yarn.shstop-yarn.sh兩個檔案中添加以下參數。

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root

      image

    1. 執行以下命令,啟動HDFS服務。

      這個指令碼會啟動NameNode、SecondaryNameNode和DataNode等組件,從而啟動HDFS服務。

      start-dfs.sh

      回顯資訊如下所示時,表示HDFS服務已啟動。

      image

    2. 執行以下命令,啟動YARN服務。

      這個指令碼會啟動ResourceManager、NodeManager和ApplicationHistoryServer等組件,從而啟動YARN服務。

      start-yarn.sh

      回顯資訊如下所示時,表示YARN服務已啟動。

      image

  3. 執行以下命令,可以查看成功啟動的進程。

    jps

    成功啟動的進程如下所示。

    image

  4. 在本地瀏覽器地址欄輸入http://<ECS公網IP>:8088,訪問YARN的Web UI介面。

    通過該介面可以查看整個叢集的資源使用方式、應用程式狀態(比如MapReduce作業)、隊列資訊等。

    重要

    需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop YARN所需的8088連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則

    image

  5. 在本地瀏覽器地址欄輸入http://<ECS公網IP>:9870,訪問NameNode的Web UI介面。

    該介面提供了有關HDFS檔案系統狀態、叢集健康情況、活動節點列表、NameNode日誌等資訊。

    顯示如下介面,則表示Hadoop分布式環境已搭建完成。

    重要

    需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop NameNode所需9870連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則

    image.png

相關操作

建立快照一致性組

如果使用分布式Hadoop,建議您使用快照一致性組,可以確保Hadoop叢集資料的一致性和可靠性,為後續的資料處理和分析提供穩定的環境支援。具體操作,請參見建立快照一致性組

Hadoop相關操作

HDFS組件操作,請參見HDFS常用命令

相關文檔

  • 如果您希望使用,在ECS上阿里雲已經整合的巨量資料環境,具體操作,請參見E-MapReduce快速入門

  • 如果您想要使用資料湖開發和治理的環境,具體操作,請參見DataWorks快速入門