このドキュメントでは、Hadoop MapReduceとHadoop分散ファイルシステム(HDFS)を使用して簡単な操作を迅速に実行できるように、単一ノードHadoopインストールの設定と構成について説明します。
重要:すべての本番Hadoopクラスタは、Kerberosを使用して呼び出し元の認証を行い、HDFSデータへのアクセスを保護し、計算サービス(YARNなど)へのアクセスを制限します。
これらの手順には、Kerberosサービスとの統合は含まれていません。本番クラスタを導入するすべてのユーザーは、組織のKerberosインフラストラクチャへの接続を展開の重要な部分として含める必要があります。
クラスタのセキュリティ保護方法の詳細については、セキュリティを参照してください。
Linuxに必要なソフトウェアには、以下が含まれます。
Java™をインストールする必要があります。HadoopJavaVersionsで推奨されるJavaバージョンについて説明しています。
オプションの開始および停止スクリプトを使用する場合は、Hadoopデーモンを管理するHadoopスクリプトを使用するために、sshをインストールし、sshdを実行する必要があります。さらに、より優れたsshリソース管理のために、pdshもインストールすることをお勧めします。
クラスタに必要なソフトウェアがない場合は、インストールする必要があります。
たとえば、Ubuntu Linuxでは
$ sudo apt-get install ssh $ sudo apt-get install pdsh
Hadoopディストリビューションを入手するには、Apacheダウンロードミラーから最新の安定版リリースをダウンロードします。
ダウンロードした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>
パスワードなしで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を参照してください。
ファイルシステムのフォーマット
$ bin/hdfs namenode -format
NameNodeデーモンとDataNodeデーモンの開始
$ sbin/start-dfs.sh
hadoopデーモンのログ出力は、$HADOOP_LOG_DIR
ディレクトリ(デフォルトは$HADOOP_HOME/logs
)に書き込まれます。
NameNodeのWebインターフェースを参照します。デフォルトでは、次の場所で利用できます。
http://localhost:9870/
MapReduceジョブを実行するために必要なHDFSディレクトリを作成します。
$ bin/hdfs dfs -mkdir -p /user/<username>
入力ファイルを分散ファイルシステムにコピーします。
$ bin/hdfs dfs -mkdir input $ bin/hdfs dfs -put etc/hadoop/*.xml input
提供されている例の一部を実行します。
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
出力ファイルを確認します。出力ファイルを分散ファイルシステムからローカルファイルシステムにコピーして確認します。
$ bin/hdfs dfs -get output output $ cat output/*
または
分散ファイルシステム上の出力ファイルを表示します。
$ bin/hdfs dfs -cat output/*
完了したら、次のコマンドでデーモンを停止します。
$ sbin/stop-dfs.sh
いくつかのパラメータを設定し、さらにResourceManagerデーモンとNodeManagerデーモンを実行することで、疑似分散モードでYARNでMapReduceジョブを実行できます。
次の手順では、上記の手順の1〜4が既に実行されていることを前提としています。
パラメータを次のように構成します。
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>
ResourceManagerデーモンとNodeManagerデーモンの開始
$ sbin/start-yarn.sh
ResourceManagerのWebインターフェースを参照します。デフォルトでは、次の場所で利用できます。
http://localhost:8088/
MapReduceジョブを実行します。
完了したら、次のコマンドでデーモンを停止します。
$ sbin/stop-yarn.sh
複雑な完全分散クラスタの設定については、クラスタ設定を参照してください。