先日セットアップした擬似分散モードの動作確認を行います。
テストに使うサンプルはいつものやつと、そのScala版、Pig版です。
を利用します。
それぞれインストールが完了していて、Hadoopは擬似分散モードの準備が出来ているものとします。
テストに使うサンプルはいつものやつと、そのScala版、Pig版です。
- Hadoop: 0.20.2
- Pig: 0.6.0
- Scala: 2.8.0.Beta1
を利用します。
それぞれインストールが完了していて、Hadoopは擬似分散モードの準備が出来ているものとします。
hadoop-aggregate
まずは標準的なJava版の動作確認です。以前作成したものは、ローカルでなければ実行できない状態でしたので、若干の修正を加えてあります。(diff)
$ git clone https://github.com/ueshin/hadoop-aggregate.git
$ cd hadoop-aggregate
$ git checkout hadoop-aggregate-0.20.2
でチェックアウトできます。
また https://github.com/ueshin/hadoop-aggregate/tree/hadoop-aggregate-0.20.2 でブラウズできます。
また、Hadoopに接続するための設定を追加してあります。
実行
このプログラムは、外部ライブラリ commons-lang-2.4.jar を利用しているので、クラスパスを設定する必要があります。${HADOOP_HOME}/lib
にjarファイルを設置するか、 ${HADOOP_HOME}/conf/hadoop-env.sh
ファイル内 HADOOP_CLASSPATH
変数に jarファイルへのパスを追加してください。準備ができたらHadoopを起動します。
$ sudo su - hadoop
$ ${HADOOP_HOME}/bin/start-all.sh
HDFSへファイルをput
$ ${HADOOP_HOME}/bin/hadoop fs -put test/resources
input
プログラムの実行
$ mvn -P pseudo clean package
$ sh target/appassembler/bin/aggregator input output
結果確認
$ ${HADOOP_HOME}/bin/hadoop fs -cat output/part-r-00000
以前のものと同じ結果が表示されたと思います。
hadoop-scala-aggregate
次にScala版。こちらも、分散環境向けに修正をしてあります。 (diff)
$ git clone https://github.com/ueshin/hadoop-scala-aggregate.git
$ cd hadoop-scala-aggregate
$ git checkout hadoop-scala-aggregate-0.20.2
でチェックアウトできます。
また https://github.com/ueshin/hadoop-scala-aggregate/tree/hadoop-scala-aggregate-0.20.2 でブラウズできます。
また、Hadoopに接続するための設定を追加してあります。
実行
先程の結果ディレクトリは削除もしくはリネームしておいてください。それでは実行してみます。
$ mvn -P pseudo clean package
$ sh target/appassembler/bin/aggregator input output
$ ${HADOOP_HOME}/bin/hadoop fs -cat output/part-r-00000
pig-scala-aggregate
最後にPigを実行してみます。ローカルで実行するよう実装されていましたので、若干の修正を加えてあります。(diff)
プログラムへの第1引数を
local
/mapred
モードの切替として指定します。$ git clone https://github.com/ueshin/pig-scala-aggregate.git
$ cd pig-scala-aggregate
$ git checkout pig-scala-aggregate-0.6.2
でチェックアウトできます。
また https://github.com/ueshin/pig-scala-aggregate/tree/pig-scala-aggregate-0.6.2 でブラウズできます。
また、Embedded Pigで Hadoopに接続するための設定を追加してあります。
(Pig Latinスクリプトの実行時にはこの設定は必要ありません。)
もしくは、以下で説明する
pig.properties
をresources
に設置しても動作します。Embedded Pigの場合には、
pig.properties
ファイルの方がいいかもしれません。Embedded Pigの実行
まずはEmbedded Pigを実行してみます。$ mvn clean package
$ sh target/appassembler/bin/aggregator mapred input output
$ ${HADOOP_HOME}/bin/hadoop fs -cat output/part-00000
Pig Latinスクリプトの実行
Pig Latinスクリプトを実行するには、Hadoopへ接続するための設定をする必要があります。スクリプト実行をHadoopクラスタ内から実行する場合には、
${PIG_HOME}/conf/pig-env.sh
ファイル内PIG_CLASSPATH
変数に${HADOOP_HOME}/conf
ディレクトリを追加してください。PIG_CLASSPATH=${HADOOP_HOME}/conf:/opt/local/share/scala-2.8/lib/scala-library.jar
クラスタ外から実行する場合には、
fs.default.name
を設定したcore-site.xml
ファイルとmapred.job.tracker
を設定したmapred-site.xml
を${PIG_HOME}/conf
ディレクトリに設置するか、もしくは${PIG_HOME}/conf/pig.properties
ファイルで設定することもできます。fs.default.name=hdfs://localhost:9000
mapred.job.tracker=localhost:9001
それでは実行してみます。
$ mvn clean package
$ ${PIG_HOME}/bin/pig -param jar=target/pig-scala-aggregate-0.6.2.jar -param input=input -param output=output src/main/pig/Aggregator.pig
$ ${HADOOP_HOME}/bin/hadoop fs -cat output/part-00000
おまけ
Hadoopに付属のWebUIを使えば、MapReduce
の履歴や実行中の進捗を確認したり、HDFS内のブラウズをすることができます。- NameNode: http://localhost:50070/
- Hadoop Map/Reduce Administration: http://localhost:50030/
Hadoopを起動した時点でWebUIも起動します。
これでどれくらいHadoopが頑張ってくれているかを眺めるのも楽しいですね。