Hadoop
関連記事
Apache Hadoop はコモディティハードウェアによる巨大なクラスタ上でアプリケーションを実行するためのフレームワークです。Hadoop フレームワークは透過的にアプリケーションに信頼性とデータモーションを提供します。Hadoop は Map/Reduce という名前の計算パラダイムを実装しています。そこではアプリケーションは多数の小さな欠片に分割して、クラスタ内のノード上でそれぞれを実行・再実行できるようにします。さらに、Hadoop は計算ノード上にデータを保存するための分散ファイルシステム (HDFS) を備えており、クラスタ全体で非常に高い帯域を実現します。MapReduce と Hadoop Distributed File System はどちらもノードでのエラーをフレームワークによって自動的に処理できるように設計されています。
インストール
Arch User Repository の hadoopAUR パッケージをインストールしてください。
設定
デフォルトで、hadoop は擬似分散操作ができるように設定されています。/etc/profile.d/hadoop.sh
には伝統的な hadoop とは異なる値が設定されている環境変数があります。
環境変数 | 値 | 説明 | パーミッション |
---|---|---|---|
HADOOP_CONF_DIR | /etc/hadoop
|
設定ファイルが保存されるディレクトリ。 | 読み取り |
HADOOP_LOG_DIR | /tmp/hadoop/log
|
ログファイルが保存されるディレクトリ。 | 読み書き |
HADOOP_SLAVES | /etc/hadoop/slaves
|
リモートスレーブホストが指定されているファイル。 | 読み取り |
HADOOP_PID_DIR | /tmp/hadoop/run
|
pid ファイルが保存されるディレクトリ。 | 読み書き |
また、以下のファイルを正しく設定する必要があります。
/etc/hosts /etc/hostname /etc/locale.conf
/etc/hadoop/hadoop-env.sh
で JAVA_HOME
を設定する必要があります。デフォルトで使用されるディレクトリは Arch Linux でインストールされるディレクトリと異なっているため必須です:
/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/
シングルノード設定
スタンドアロン操作
デフォルトでは、Hadoop は単一の Java プロセスで動作するように設定されています。デバッグする場合に有用です。
以下は conf ディレクトリを input としてコピーして使用する例で、正規表現にマッチする文字列を全て出力します。出力は output ディレクトリに書き込まれます。
$ HADOOP_CONF_DIR=/usr/lib/hadoop/orig_etc/hadoop/ $ mkdir input $ cp /etc/hadoop/*.xml input $ hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+' $ cat output/*
擬似分散操作
シングルノードでも Hadoop デーモンを複数の Java プロセスで動作させる擬似分散モードを使うことができます。
デフォルトでは、Hadoop は root ユーザーで実行されます。/etc/conf.d/hadoop
でユーザーを変更することができます:
HADOOP_USERNAME="<your user name>"
パスフレーズの要らない ssh の設定
sshd が有効になっていることを確認してください。有効になっていない場合は systemctl enable sshd
で有効にします。そしてパスフレーズを入力しなくてもローカルホストに接続できることを確認:
$ ssh localhost
パスフレーズがないとローカルホストに ssh できない場合、以下のコマンドを実行してください:
$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2
また、/etc/ssh/sshd_config
の以下の行がコメントアウトされていることを確認してください:
/etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
実行
新しい分散ファイルシステムをフォーマット:
$ hadoop namenode -format
次の hadoop の systemd ユニットを起動してください: hadoop-datanode
, hadoop-jobtracker
, hadoop-namenode
, hadoop-secondarynamenode
, hadoop-tasktracker
。
hadoop デーモンのログ出力は ${HADOOP_LOG_DIR}
ディレクトリに書き込まれます (デフォルトでは /var/log/hadoop
)。
NameNode と JobTracker のウェブインターフェイスを開いてください。デフォルトでは以下の URL になります:
- NameNode - http://localhost:50070/
- JobTracker - http://localhost:50030/
input ファイルを分散ファイルシステムにコピー:
$ hadoop fs -put /etc/hadoop input
サンプルを実行:
$ hadoop jar /usr/lib/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
output ファイルを確認:
分散ファイルシステムからローカルファイルシステムに output ファイルをコピーして確認:
$ hadoop fs -get output output $ cat output/*
または、分散ファイルシステムから output ファイルを確認:
$ hadoop fs -cat output/*
テストが完了したら、以下のコマンドでデーモンを停止します:
# systemctl stop hadoop-datanode # systemctl stop hadoop-jobtracker # systemctl stop hadoop-namenode # systemctl stop hadoop-secondarynamenode # systemctl stop hadoop-tasktracker