連載
» 2017年01月24日 05時00分 公開

「Hadoopの処理の流れ」を理解し、実践するきょうから試せる Hadoop“スモールスタート”ガイド(2)(2/3 ページ)

[佐々木達也,著]

 さて、Mapperの処理をイメージするために、具体的に幾つかMapperの処理を考えてみましょう。例えば、アクセスログから必要な情報だけを残して不要な情報は取り除く、というのはよくある例です。Mapperの出力はReducerにネットワークを介して渡されるので、不要なデータはなるべく渡さないほうが高速に処理することができます(図2-3)。

図2-3 アクセスログから不要な情報を取り除く 図2-3 アクセスログから不要な情報を取り除く

 また、処理の開始時間と終了時間から、その処理に何秒かかったかを計算するような処理は値を別の形式に変換するMapperでしょう(図2-4)。

図2-4 値を別の形式に変換する 図2-4 値を別の形式に変換する

 Hadoop Streamingで処理をする場合には出力は必ず“key<タブ>value”という形式にする必要があります。この形式で出力しないとShuffleフェーズでの振り分け処理が正しく動作しないので気を付けてください。

Shuffleフェーズ

 次はShuffleフェーズでデータがShuffle & Sortされます。通常はMapフェーズの出力がそのままShuffleフェーズにデータが渡されますが、Combinerという処理を指定すると、Mapフェーズの出力がCombinerで処理された後、Shuffleフェーズへとデータが渡されます。

 Combinerは主にMapフェーズの同一keyに対する出力件数が多い場合に、出力サイズを減らして全体の処理を高速化させるためなどに利用されます。Shuffleフェーズはネットワーク越しに別のノードへのアクセスが発生するため、場合によってはこの段階のデータ量をCombinerで減らしておくことで大幅な高速化が見込めます(図2-5)(図2-6)。

図2-5 Combinerを使わない場合 図2-5 Combinerを使わない場合
図2-6 Combinerを使う場合 図2-6 Combinerを使う場合

 CombinerはそれぞれのMapperに対して独立で実行されるので、複数のMapperの出力がまとめて1つのCombinerへと渡るわけではありません。また、1つのMapperの処理が完全に終了する前に実行されることもあります。Combinerが実行されるタイミングをユーザー側は制御することができないので使う場合は注意してください。

 なお、ShuffleフェーズではMapperの出力のkeyに注目し、同じkeyのデータは必ず同じReducerへと渡してくれるように設計されています(図2-7)。

図2-7 Shuffleフェーズの役割 図2-7 Shuffleフェーズの役割

 もっと一般的に、Reducerの数よりもkeyの数の方が多い場合には、このように1つのReducerに複数のkeyが渡されます(図2-8)。

図2-8 Shuffleフェーズの役割(keyが多数ある場合) 図2-8 Shuffleフェーズの役割(keyが多数ある場合)

 さらに、各ReducerではSortまで行ってくれるため、そのあとのReducerの処理が大変やりやすくなります。これらの処理は自動的に行われるため、ユーザー側で何かしなければいけないわけではありませんが、この挙動を利用する形でMapperやReducerを記述する必要があります。Hadoopを利用するために最低限把握しておかないといけない仕様だといってもよいでしょう(図2-9)。

図2-9 Sortは各Reducer内で行われる 図2-9 Sortは各Reducer内で行われる

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。