2009年7月7日火曜日

Hadoop The Definitive Guide エッセンス翻訳(1)

yoshitsugu です。
Hadoopが0.20.0で大きくAPIが変わったのですが、それに関する記事を「Hadoop The Definitive Guide」で見つけたので、概訳しておきます。

Hadoop 0.20.0 リリースでは、一部で"Contextオブジェクト"と呼ばれている、将来の発展性を高めるように設計された新たなJava MapReduce APIが含まれた。新しいAPIは旧APIとの型互換性はない。そのため、新しいAPIを利用するためには今までのアプリケーションを書き換える必要がある。

新旧のAPIにはいくつか注意すべき相違点がある
  • 新APIはインターフェースよりも抽象クラスをより多く用いている。それは抽象クラスのほうがより発展させやすいからである。たとえば、抽象クラスには、クラスの古い実装を影響することなく(デフォルトの実装を備えた)メソッドを追加することができる。新APIではMapperとReducerインターフェースは抽象クラスになっている。
  • 新しいAPIは、org.apache.hadoop.mapreduceパッケージとサブパッケージに含まれている。旧APIはorg.apache.hadoop.mapredパッケージにある。
  • 新APIはContextオブジェクトの拡張的な使用法を提供している。それによってユーザーのプログラムコードとMapReduceシステムとのコミュニケーションが可能となっている。たとえば、MapContextはJobConfとOutputCollectorとReporterの役割を本質的に統一している。
  • 新APIは"push"/"pull"スタイルによる反復処理をサポートしている。新旧両方のAPIで、key-valueのレコードペアがmapperにプッシュされるが、さらに新APIではmapperでmapメソッド内からレコードを取り出すことができるようになった。同じことがreducerにも言える。"pull"スタイルがどれだけ便利であるかの例は、バッチ内のレコードを処理するのに1件1件処理するよりむしろまとめて扱ったほうが便利であるといった形で表れる。
  • 構成設定が統一された。旧APIではJobの設定に特別なJobConfオブジェクトを使用していた。それはHadoopの拡張されてないConfigurationオブジェクトの拡張であった(デーモンの構成設定で用いられていた。「Hadoop The Definitive Guide」の"構成設定API"参照(英語版 p116))。新APIではこのような特別扱いはなくなり、Jobの設定にも拡張されていないConfigurationオブジェクトを用いるようになった。
  • Jobの制御はJobClientクラスではなくJobクラスを通じて行われる。JobClientクラスはもはや新APIには存在しない。(※訳者注:非推奨扱いでは存在している)
以上。

訳におかしなところがあればご指摘ください。

yoshitsugu