Hadoop

提供: ArchWiki
2018年2月19日 (月) 20:43時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

Apache Hadoop はコモディティハードウェアによる巨大なクラスタ上でアプリケーションを実行するためのフレームワークです。Hadoop フレームワークは透過的にアプリケーションに信頼性とデータモーションを提供します。Hadoop は Map/Reduce という名前の計算パラダイムを実装しています。そこではアプリケーションは多数の小さな欠片に分割して、クラスタ内のノード上でそれぞれを実行・再実行できるようにします。さらに、Hadoop は計算ノード上にデータを保存するための分散ファイルシステム (HDFS) を備えており、クラスタ全体で非常に高い帯域を実現します。MapReduce と Hadoop Distributed File System はどちらもノードでのエラーをフレームワークによって自動的に処理できるように設計されています。

インストール

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.shJAVA_HOME を設定する必要があります。デフォルトで使用されるディレクトリは Arch Linux でインストールされるディレクトリと異なっているため必須です:

/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk/

シングルノード設定

ノート: このセクションは Hadoop の公式ドキュメント に基づいています。

スタンドアロン操作

デフォルトでは、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-3.0.0.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
$ chmod 0600 ~/.ssh/authorized_keys

また、/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 になります:

input ファイルを分散ファイルシステムにコピー:

$ hadoop fs -put /etc/hadoop input

サンプルを実行:

$ hadoop jar /usr/lib/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.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