hadoop-aggregate開発

| # Comments | 1 Trackback
オリジナルのHadoop MapReduceアプリケーション第一弾、hadoop-aggregateを開発しました。

ApacheのアクセスログCombined形式のファイルから、

  • どこから (IPアドレス)
  • どのページに (URL)
  • 何回アクセスしたか。

をTSV形式のファイルで出力します。

実行手順

準備

あらかじめ、MapReduceプログラム開発準備を参考にHadoopをインストールしておいてください。
また、適当なサイトからApacheアクセスログCombined形式のものを手元に持ってきておいてください。

チェックアウト

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

パッケージング

$ mvn clean package

実行

持ってきたアクセスログを src/test/resources 以下に置いたものとします。
複数のファイルがあっても、zlib / lzo / gzipの形式であれば圧縮されていても大丈夫です。

$ [HADOOP_HOME]/bin/hadoop jar target/hadoop-aggregate-0.0.1.jar \
    src/test/resources/ \
    target/output
$ cat target/output/part-00000

とすると、

IP\tURL\tCount

の形式のアクセス集計が見れます。

まとめ

MapReduceの動作を調べるために試したこと。

  • Tool / ToolRunnerを使ってみた。
  • Combineを入れてみた。
  • MapCombineReduce間のデータのキーを、自分で作ってみた。
  • Combineの動きを見るため、あえてCombineの出力キーとReduceの出力キーを変えてみた。

わかったこと

  • Combineは、Mapが終わったらすぐに動く。
    Mapのタスクごとに一旦Reduceするイメージ。

  • Combineの入力と出力は同じクラスのペアでなければならない。

    class Combine implements Reducer<K,V,K,V>

    な感じ。

  • キーの作り方。
    WritableComparableを実装したクラスであればいい。
    実装するメソッドは次の3つ。

    public void readFields(DataInput in) throws IOException;
    public void write(DataOutput out) throws IOException;
    public int compareTo(AccessWritable o);

  • Reduceの出力はToolを使った場合のデフォルトではキー、値のtoString()メソッドが呼ばれるので、toString()をオーバーライドするか、Textクラスで出力するかしなければならない。

ちょっとずつMapReduceがわかってきました。

トラックバック(1)

昨日のhadoop-aggregateをちょこっとバージョンアップ。アクセス日を... 続きを読む

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