Hadoop単一ノードクラスタの設定

目的

このドキュメントでは、Hadoop MapReduceとHadoop分散ファイルシステム(HDFS)を使用して簡単な操作を迅速に実行できるように、単一ノードHadoopインストールの設定と構成について説明します。

重要:すべての本番Hadoopクラスタは、Kerberosを使用して呼び出し元の認証を行い、HDFSデータへのアクセスを保護し、計算サービス(YARNなど)へのアクセスを制限します。

これらの手順には、Kerberosサービスとの統合は含まれていません。本番クラスタを導入するすべてのユーザーは、組織のKerberosインフラストラクチャへの接続を展開の重要な部分として含める必要があります。

クラスタのセキュリティ保護方法の詳細については、セキュリティを参照してください。

前提条件

サポートされているプラットフォーム

  • GNU/Linuxは、開発および本番プラットフォームとしてサポートされています。Hadoopは、2000ノードのGNU/Linuxクラスタで実証されています。

必要なソフトウェア

Linuxに必要なソフトウェアには、以下が含まれます。

  1. Java™をインストールする必要があります。HadoopJavaVersionsで推奨されるJavaバージョンについて説明しています。

  2. オプションの開始および停止スクリプトを使用する場合は、Hadoopデーモンを管理するHadoopスクリプトを使用するために、sshをインストールし、sshdを実行する必要があります。さらに、より優れたsshリソース管理のために、pdshもインストールすることをお勧めします。

ソフトウェアのインストール

クラスタに必要なソフトウェアがない場合は、インストールする必要があります。

たとえば、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スクリプトの使用方法のドキュメントが表示されます。

これで、サポートされている3つのモードのいずれかで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://localhost:9000</value>
    </property>
</configuration>

etc/hadoop/hdfs-site.xml

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

パスワード不要のsshの設定

パスワードなしでlocalhostにssh接続できることを確認します。

  $ ssh localhost

パスワードなしでlocalhostにssh接続できない場合は、次のコマンドを実行します。

  $ 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のWebインターフェースを参照します。デフォルトでは、次の場所で利用できます。

    • NameNode - http://localhost: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のWebインターフェースを参照します。デフォルトでは、次の場所で利用できます。

    • ResourceManager - http://localhost:8088/
  4. MapReduceジョブを実行します。

  5. 完了したら、次のコマンドでデーモンを停止します。

      $ sbin/stop-yarn.sh
    

完全分散動作

複雑な完全分散クラスタの設定については、クラスタ設定を参照してください。