Hadoop本 4章 HadoopのI/Oの疑問点や気になる点について記述してください。
※記入者、該当ページ・該当行は忘れずに書いて下さい。

圧縮されたHDFS上のファイルをMapReduceにかける際の注意

  • [記入者] terurou
  • [該当箇所] 89〜90ページ(4.2.2 圧縮と入力スプリット)
  • 圧縮ファイルがHDFSのブロックサイズ大きな場合、スプリット可能な圧縮フォーマットでないと、mapが複数のノードに分散されない(ローカリティが犠牲になる)。
  • スプリット可能なフォーマットはbzip2とZIP。ただしZIPはファイルの境界のみ可能。

mapの出力の圧縮

  • [記入者] terurou
  • [該当箇所] 92〜93ページ(4.2.3.1 mapの出力の圧縮)
  • mapの出力も圧縮可能。
  • mapの出力はネットワーク経由でreducerへ転送されるため、LZOのような高速な圧縮フォーマットであれば、性能が向上する可能性がある。

HadoopのRPCプロトコル

  • [記入者] terurou
  • [該当箇所] 93〜112ページ(4.3 シリアライゼーション)
  • 標準ではWratableというHadoop独自のバイナリプロトコルが使われている。
  • WritableではJava以外の言語との相互運用に難がある(他言語の実装が揃っていない)ため、今後はAvroに移行していく予定らしい。(本書ではThriftについても触れられているが、3章のメモで記述したように、現状Thriftは積極的にメンテされていない)

Hadoopのバイナリデータファイルフォーマット

  • [記入者] terurou
  • [該当箇所] 112〜125ページ(4.4 ファイルベースのデータ構造)
  • SequenceFile
    • 複数のバイナリレコード(バイナリのキーと値のペア)を1つのファイルとしてまとめたもの。
    • バイナリログファイルの格納が利用例。キーがタイムスタンプ、値がログ。
    • 書き込み時はWritable以外のシリアライゼーションフレームワークを利用可。
  • MapFile
    • キーでのルックアップができるようにインデックスを持ち、ソートされているSequenceFile。
    • SequenceFileと異なり、Writableでしか書き込めない。

SequenceFileの「同期点」って何?

  • [記入者] terurou
  • [該当箇所] 116〜118ページ(4.4.1.2 SequenceFileの読み込み)
  • 同期点は数レコードごとにレコード境界に埋め込まれる。
  • SequenceFileはバイナリデータファイルなので、シーク位置が1バイトでもずれるとデータが読み込めなくなってしまう。本書では「リーダーが迷う」という言葉で表現している。
  • 「リーダーが迷って」しまった場合、同期点を元にシーク位置をレコード境界に再度位置あわせする。
  • SequenceFileの書き込みの際、同期点を挿入する位置を制御できる。
  • SequenceFileをMapReduceの入力とする際、同期点によってファイル分割され、mapを分散できる。

SequenceFileの圧縮

  • [記入者] terurou
  • [該当箇所] 129ページ(4.4.1.5 SequenceFileのフォーマット)
  • SequenceFileはデータの圧縮の有効・無効を選択できる。
  • レコード圧縮
    • SequenceFile内のヘッダで指定されたフォーマットでレコードの値が圧縮される。キーは圧縮されない。
  • ブロック圧縮
    • 複数のレコードをまとめて圧縮する。
    • レコード圧縮より圧縮効率が高く、一般にはブロック圧縮のほうを使う方がよい。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます