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
|
Where configuration files are stored.
|
Read |
HADOOP_LOG_DIR | /tmp/hadoop/log
|
Where log files are stored.
|
Read and Write |
HADOOP_SLAVES | /etc/hadoop/slaves
|
File naming remote slave hosts.
|
Read |
HADOOP_PID_DIR | /tmp/hadoop/run
|
Where pid files are stored.
|
Read and Write |
また、以下のファイルを正しく設定する必要があります。
/etc/hosts /etc/hostname /etc/locale.conf
JAVA_HOME
は jdk7-openjdk の /etc/profile.d/jre.sh
によって自動的に設定されているはずです。JAVA_HOME
を確認:
$ echo $JAVA_HOME
何も出力されない場合、一度ログアウトしてからログインしなおして下さい。
シングルノード設定
スタンドアロン操作
By default, Hadoop is configured to run in a non-distributed mode, as a single Java process. This is useful for debugging.
The following example copies the unpacked conf directory to use as input and then finds and displays every match of the given regular expression. Output is written to the given output directory.
$ export HADOOP_CONF_DIR=/usr/lib/hadoop/orig_conf $ mkdir input $ cp /etc/hadoop/*.xml input $ hadoop jar /usr/lib/hadoop/hadoop-examples-*.jar grep input output 'dfs[a-z.]+' $ cat output/*
For the current 2.5.x release of hadoop included in the AUR:
$ HADOOP_CONF_DIR=/usr/lib/hadoop/orig_etc/hadoop/ $ mkdir input $ cp /etc/hadoop/hadoop/*.xml input $ hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar grep input output 'dfs[a-z.]+' $ cat output/*
擬似分散操作
Hadoop can also be run on a single-node in a pseudo-distributed mode where each Hadoop daemon runs in a separate Java process.
By default, Hadoop will run as the user root. You can change the user in /etc/conf.d/hadoop
:
HADOOP_USERNAME="<your user name>"
パスフレーズの要らない ssh の設定
Make sure you have sshd enabled, or start it with systemctl enable sshd
. Now check that you can connect to localhost without a passphrase:
$ ssh localhost
If you cannot ssh to localhost without a passphrase, execute the following commands:
$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2
Also make sure this line is commented in /etc/ssh/sshd_config
/etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
実行
Format a new distributed-filesystem:
$ hadoop namenode -format
Start the hadoop daemons:
# systemctl start hadoop-datanode # systemctl start hadoop-jobtracker # systemctl start hadoop-namenode # systemctl start hadoop-secondarynamenode # systemctl start hadoop-tasktracker
The hadoop daemon log output is written to the ${HADOOP_LOG_DIR}
directory (defaults to /var/log/hadoop
).
Browse the web interface for the NameNode and the JobTracker; by default they are available at:
- NameNode - http://localhost:50070/
- JobTracker - http://localhost:50030/
Copy the input files into the distributed filesystem:
$ hadoop fs -put /etc/hadoop input
Run some of the examples provided:
$ hadoop jar /usr/lib/hadoop/hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
Examine the output files:
Copy the output files from the distributed filesystem to the local filesytem and examine them:
$ hadoop fs -get output output $ cat output/*
or
View the output files on the distributed filesystem:
$ hadoop fs -cat output/*
When you're done, stop the daemons with:
# systemctl stop hadoop-datanode # systemctl stop hadoop-jobtracker # systemctl stop hadoop-namenode # systemctl stop hadoop-secondarynamenode # systemctl stop hadoop-tasktracker