Hadoop:設定單一節點叢集。

目的

本文件說明如何設定和配置單一節點 Hadoop 安裝,以便您可以使用 Hadoop MapReduce 和 Hadoop 分散式檔案系統 (HDFS) 快速執行簡單的作業。

重要:所有生產 Hadoop 群集都使用 Kerberos 來驗證呼叫者和保護 HDFS 資料存取,以及限制運算服務(YARN 等)的存取。

這些說明未涵蓋與任何 Kerberos 服務的整合,- 每個建立生產群集的人員都應將連接到其組織的 Kerberos 基礎架構視為部署的關鍵部分。

請參閱 安全性,了解如何保護群集的詳細資訊。

先決條件

支援的平台

  • GNU/Linux 支援作為開發和生產平台。Hadoop 已在具有 2000 個節點的 GNU/Linux 群集中展示。

必要的軟體

Linux 所需的軟體包括

  1. 必須安裝 Java™。建議的 Java 版本說明在 HadoopJavaVersions 中。

  2. 必須安裝 ssh,並且 sshd 必須執行,才能使用管理遠端 Hadoop 程式精靈的 Hadoop 腳本,如果要使用選用的啟動和停止腳本。此外,建議安裝 pdsh,以獲得更好的 ssh 資源管理。

安裝軟體

如果您的群集沒有必要的軟體,您將需要安裝它。

例如在 Ubuntu Linux 上

  $ sudo apt-get install ssh
  $ sudo apt-get install pdsh

下載

若要取得 Hadoop 發行版,請從其中一個 Apache 下載鏡像 下載最近的穩定版本。

準備啟動 Hadoop 群集

解壓縮下載的 Hadoop 發行版。在發行版中,編輯檔案 etc/hadoop/hadoop-env.sh 以定義一些參數,如下所示

  # set to the root of your Java installation
  export JAVA_HOME=/usr/java/latest

嘗試以下命令

  $ bin/hadoop

這將顯示 hadoop 腳本的使用說明文件。

現在,您已準備好以三種支援模式之一啟動 Hadoop 群集

獨立作業

預設情況下,Hadoop 設定為以非分散式模式執行,作為單一 Java 程序。這對於除錯很有用。

以下範例將解壓縮的 conf 目錄複製為輸入,然後尋找並顯示給定正規表示式的每個匹配項。輸出寫入給定的輸出目錄。

  $ mkdir input
  $ cp etc/hadoop/*.xml input
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
  $ cat output/*

偽分散式作業

Hadoop 也可以在單一節點上以偽分散式模式執行,其中每個 Hadoop 程式精靈在一個獨立的 Java 程序中執行。

組態

使用以下

etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://127.0.0.1:9000</value>
    </property>
</configuration>

etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

設定無密碼 ssh

現在檢查是否可以在沒有密碼的情況下 ssh 到 localhost

  $ ssh localhost

如果您無法在沒有密碼的情況下 ssh 到 localhost,請執行下列命令

  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys

執行

下列說明是在本地執行 MapReduce 任務。如果您要在 YARN 上執行任務,請參閱 單一節點上的 YARN

  1. 格式化檔案系統

      $ bin/hdfs namenode -format
    
  2. 啟動 NameNode 守護程式和 DataNode 守護程式

      $ sbin/start-dfs.sh
    

    hadoop 守護程式記錄輸出寫入 $HADOOP_LOG_DIR 目錄(預設為 $HADOOP_HOME/logs)。

  3. 瀏覽 NameNode 的網頁介面;預設情況下,它可以在下列位置使用

    • NameNode - https://127.0.0.1:9870/
  4. 建立執行 MapReduce 任務所需的 HDFS 目錄

      $ bin/hdfs dfs -mkdir -p /user/<username>
    
  5. 將輸入檔案複製到分散式檔案系統

      $ bin/hdfs dfs -mkdir input
      $ bin/hdfs dfs -put etc/hadoop/*.xml input
    
  6. 執行一些提供的範例

      $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
    
  7. 檢查輸出檔案:從分散式檔案系統將輸出檔案複製到本地檔案系統並檢查它們

      $ bin/hdfs dfs -get output output
      $ cat output/*
    

    在分散式檔案系統上檢視輸出檔案

      $ bin/hdfs dfs -cat output/*
    
  8. 完成後,使用下列方式停止守護程式

      $ sbin/stop-dfs.sh
    

單一節點上的 YARN

您可以透過設定幾個參數並額外執行 ResourceManager 守護程式和 NodeManager 守護程式,在偽分散式模式下在 YARN 上執行 MapReduce 任務。

下列說明假設 上述說明 的 1. ~ 4. 步驟已經執行。

  1. 如下設定參數

    etc/hadoop/mapred-site.xml:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.application.classpath</name>
            <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
        </property>
    </configuration>
    

    etc/hadoop/yarn-site.xml:

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <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_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
        </property>
    </configuration>
    
  2. 啟動 ResourceManager 守護程式和 NodeManager 守護程式

      $ sbin/start-yarn.sh
    
  3. 瀏覽 ResourceManager 的網頁介面;預設情況下,它可以在下列位置使用

    • ResourceManager - https://127.0.0.1:8088/
  4. 執行 MapReduce 任務。

  5. 完成後,使用下列方式停止守護程式

      $ sbin/stop-yarn.sh
    

完全分散式操作

有關設定完全分散式、非平凡叢集的資訊,請參閱 叢集設定