halookで始めるHadoop/HBaseトラブルシューティング

第3回 PartitionerとCombiner

この記事を読むのに必要な時間:およそ 2 分

第2回では,halookのセットアップ方法をご紹介しました。第3回では,実際にhalookを活用し,Hadoopの処理の中身を見ていくことにします。今回のテーマは,HadoopのMapReduce Jobを実装する際に重要になる,PartitionerとCombinerです。MapReduceのアルゴリズムを紹介する例としてよく使われる,WordCountの処理時間にもこれらの使い方は影響を与えます。より有効に使えるようになるために,これらを設定がある場合,ない場合の処理の様子,実行時間の比較を,halookで見ていくことにしましょう。

今回の検証内容

単純な集計処理を例にとります。以下のような,非常に単純化した商品の販売記録を元に,店舗ごとの売上を計算します。タブ区切りで,以下のデータが入っているものとします。

日時[タブ文字]商品コード[タブ文字]商品の値段[タブ文字]店舗名

以下のようなレコードが並んでいます。

2013-03-11 21:01:28    A000616    250    store30
2013-03-11 21:01:28    A000292    250    store00
2013-03-11 21:01:28    A000550    150    store00
2013-03-11 21:01:28    A000155    150    store01
2013-03-11 21:01:28    A000976    150    store13
2013-03-11 21:01:28    A000252    200    store26
2013-03-11 21:01:28    A000309    150    store00

使うのは,4番目の店舗名と,3番目の値段だけです。店舗名ごとに,値段の合計を計算するだけという,非常にシンプルなものです。以下の条件で,環境,データおよびサンプルプログラムを用意しました。

1.CDH3u5スレーブ3台の環境を用意

各スレーブでMapとReduceのスロットが2つずつ,計6Mapper/Reducerが同時に動ける環境で実験しました。

2.10万レコードのファイル(約4MB)を6つ用意

全部同じディレクトリにおいて,MapReduce処理の入力とします。Mapperが同時に6つ動くことになります。

3.store00 が50%,store01からstore50までが各1%で出現

このように,データが非常に偏った状態にしました。

4.Mapperは,店舗名をキー,値段をバリューとして出力
5.Reducerは店舗名ごとに値段の合計を計算
6.検証のために,Mapper, Reducerの処理ごとに1瞬停止

Mapperでは1行ごとに,Reducerでは,バリュー1つごとに,1ミリ秒間スリープする処理を加えました。これにより,より複雑な処理を行う場合を擬似的に再現しました。

PartitionerとCombinerの説明

店舗ごとの売上集計をMapReduceで行うと,以下のようになります。

図1 店舗ごと売上集計のMapReduce処理

図1 店舗ごと売上集計のMapReduce処理

Mapperでキーとバリューのペアを作り,Reducerで同じキーのバリューを足し合わせます。ここで,図のPartitionerは,複数のReducerがあるときにキーとバリューのペアをどのReducerに割り振るかを決める役割を持っています。Partitionerについて,とくに記述せずにMapReduceを実装した場合,HashPartitionerと呼ばれるPartitionerが使われます。

これは,キーのハッシュ値を計算し,その値をReducerの数で割った余りで何番目のReducerに割り振るかを決定するものです。キーの数が十分多ければ,大体均等にキーが各Reducerに割り振られることになりますが,そもそも特定のキーに値が集中していた場合,そのキーが割り当てられたReducerにデータが集中することになるので,処理を均等に分散させたい場合は注意する必要があります。

次に,Combinerを使った場合の例です。Combinerは,Mapperの処理の後,同じMapperで処理した結果だけで一旦集計処理を行うものです。Combinerには,Reduceの処理内容と全く同じものを指定することが手法としてよく行われますが,こうすることにより,ネットワークの転送量を抑えるなどの恩恵に与れます。

図2 店舗ごと売上集計のMapReduce処理 Combinerあり

図2 店舗ごと売上集計のMapReduce処理 Combinerあり

著者プロフィール

落合雄介(おちあいゆうすけ)

Acroquest Technology株式会社 オブジェクトフレームワークディヴィジョン エンジニアリングクリエーター

http://www.acroquest.co.jp/

コメント

コメントの記入