hadoop-core-0.20.2で

| # Comments | 4 Trackbacks
1年以上のご無沙汰でした。
お久しぶりです。

さすがにこれだけ期間が開くとHadoopのバージョンも0.20.2が最新となっています。(2010/04/22現在)

そこで、以前実装したhadoop-aggregate-0.0.2を元に、hadoop-core-0.20.2の最新APIに更新してみようと思います。

以前と同じように、

$ git clone https://github.com/ueshin/hadoop-aggregate.git
$ cd hadoop-aggregate
$ git checkout hadoop-aggregate-0.20.1

で利用できます。

また https://github.com/ueshin/hadoop-aggregate/tree/hadoop-aggregate-0.20.1 でブラウズできます。

ポイント

pom.xml

pom.xmlファイルはこちらを参照。 (diff)

hadoop-coreのバージョンを 0.18.1 だったものを 0.20.2 に更新。
以前はMaven2レポジトリになかったけど、最新版は置いてありました。
Hadoopサーバー用の依存が多いので、excludeしておきます。

新旧APIの違い

当該箇所のソースファイルはこちらを参照。 (diff)

パッケージが新しくなっています。
(org.apache.hadoop.mapredorg.apache.hadoop.mapreduce)

古いAPIではinterfaceだったMapper / Reducerが、classになっています。
MapReduceBaseを継承、Mapper / Reducerimplementsだったものが、Mapper / Reducerを直接継承する形になっています。

map / reduceメソッドの引数が変わっています。
以前はkeyvalueの他にOutputCollectorReporterを引数でとるようになっていましたが、Contextクラスに集約されました。
reduceメソッドの方のvaluesは、IteratorだったものがIterableに変わっています。
これにより拡張for文でループさせることができるようになりました。

今回の対象のような簡単なサンプルであれば、上記くらいの修正で新しいAPIに移行することができました。

ところで、古いAPIは依然として利用できますので、無理に新しいAPIを利用する必要は(まだ)ありません。

実行

以前Application Assembler Maven Pluginで紹介した、appassemblerを利用して起動するようにpom.xmlファイルを修正してあります。

$ mvn clean package
$ cd target/appassembler/
$ sh bin/aggregator <in-dir> <out-dir>

<in-dir>Combined形式のApacheアクセスログを設置しておいてください。

注意

<in-dir>

古いAPIでは、<in-dir>にファイルが無かった場合にもタスク0件で処理されていたんですが、新しいAPIではjava.lang.IndexOutOfBoundsExceptionが発生してしまうようです。

スタンドアロンのみ

現状ですと、外部ライブラリ(commons-lang)を利用しているので、このままでは分散環境で利用できません。分散環境で実行する場合には、各ノード上でクラスパスを通しておくなどする必要があります。

トラックバック(4)

Happy-Camper Street - MapReduce in Scala (2010年4月24日 00:19)

目下勉強中のScala という言語を使って、MapReduceを実装してみました... 続きを読む

Pigという、Hadoopをお手軽に使いましょうツールを使ってみました。また、 ... 続きを読む

先日セットアップした擬似分散モードの動作確認を行います。テストに使うサンプルはい... 続きを読む

HBaseを使ったMapReduceを実装してみました。題材はいつもと同じですが... 続きを読む

comments powered by Disqus

Twitter Icon

AdSense

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 5.14-ja

Google検索

カスタム検索

2013年10月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31