PR
4.2.2 Hadoopの性能向上に関する課題と工夫

 Hadoopクラスタにおいてリアルタイムに近い環境を実現するには,Flumeで集約したデータを,可能な限り早くHadoopクラスタに書き込む必要がある.これを実現するためには,データチャンクのサイズを小さくする必要があるが,これはHadoopのパフォーマンス低下を併発することになる. なぜなら,Hadoopでは,パフォーマンス向上のために,データチャンクのサイズを大きめに設定することが欠かせないからである.この問題は,楽天に限らず,Twitter社等様々な企業が抱えている問題である[9].

 この問題を解決するために,Leeらは,データチャンクのサイズが異なる複数のHadoopクラスタを構築することで解決を図っている[9].具体的には,データが到着した段階で,データチャンクサイズが小さいHadoopクラスタに書き込みを行い,すぐに解析ができるような状況を作る.その後,複数のデータを集約し,データチャンクサイズが大きく設定されているHadoopクラスタに配置しなおすことで,より高パフォーマンスな環境にデータを移動させる.このアプローチを繰り返していきながら,最終的に,大きなデータチャンクサイズが設定されている中央のHadoopクラスタに集約することで,リアルタイム性を確保しつつ,パフォーマンスの向上を図っている[9].

 これに対し,我々は,HDFSの“append”関数を用いたアプローチ方法を実験している.つまり,複数のデータを集約したうえで,同一Hadoopクラスタ内に格納するアプローチである.この同一クラスタ内にデータを集約するアプローチをとることで,データの集約に伴うデータの移動コストを低くすることができ,文献9)で提案されている手法に比べ,ネットワーク負荷の軽減が実現できることが見込まれている.

4.2.3 多種多様なデータソースに関する課題と工夫

 第4章冒頭で示した通り,GEAPが対象とするデータは,様々なサービスから生成される様々なフォーマットのデータである.また,今後も日本国内外で提供するサービス数が増加していくことが予測されるため,フォーマットが異なる様々なデータを,いかにして柔軟に扱い,単一のストレージ基盤に蓄積していくかが,非常に重要なポイントである.

 そこで我々は,様々なデータに共通して存在する共通要素を抽出し,共通要素を利用して任意のデータを統一的な形式で表現できるようにすることで,この問題を解決している.具体的には,下記のような手法により,任意のデータを統一フォーマットに変換している.

  • データを共通要素に関するデータと,それ以外のデータに分割する
  • 共通要素以外のデータを,json形式に変換する
  • 任意のデータは,共通要素とそれに紐づくjson形式のフォーマットに変換する

 共通要素は,Hadoopにデータをバケットする用途, Hiveパーテションを作成する用途としても活用されており,分散処理・ストレージ基盤部のパフォーマンス向上にも寄与している.