私は現在、書き込み可能な SequenceFiles で Hadoop mapreduce ジョブを使用しています。システムの非 Hadoop 関連部分でも、同じ Writable タイプがシリアル化に使用されます。
この方法は保守が困難です。主な理由は、スキーマがなく、バージョン変更を手動で処理する必要があるためです。
apache avro がこれらの問題を処理しているようです。
問題は、移行中にデータが両方の形式になることです。移行を処理する簡単な方法はありますか?
私は現在、書き込み可能な SequenceFiles で Hadoop mapreduce ジョブを使用しています。システムの非 Hadoop 関連部分でも、同じ Writable タイプがシリアル化に使用されます。
この方法は保守が困難です。主な理由は、スキーマがなく、バージョン変更を手動で処理する必要があるためです。
apache avro がこれらの問題を処理しているようです。
問題は、移行中にデータが両方の形式になることです。移行を処理する簡単な方法はありますか?
私は自分で試したことはありませんが、AvroSequenceFile
フォーマットを使用すると役立つかもしれません。これは単なるラッパーでSequenceFile
あるため、理論的には、古いSequenceFile
形式と新しいAvro
形式の両方でデータを書き込むことができるため、移行が容易になります。
この形式の詳細については、こちらをご覧ください。
一般に、Avro データと SequenceFiles を交互に使用することを妨げるものは何もありません。必要なデータのタイプに必要な InputFormat を使用してください。もちろん、出力には、実用的な場合は常に Avro 形式を使用するのが理にかなっています。入力が異なる形式である場合は、MultipleInputsを見てください。基本的に、別の Mappers を実装する必要がありますが、Map の入力キー/値が異なることを考えると、それは当然のことです。
Avro への移行は賢明な選択です。時間とハードウェアに余裕がある場合は、データを SequenceFile から Avro にすぐに明示的に変換する価値があるかもしれません。これを行うために、SequenceFiles もサポートしている Avro でサポートされている任意の言語を使用できます。Java は確かにそうしますが (明らかに)、Pig もこれを行うのに非常に便利です。
ユーザーが提供した PiggyBank プロジェクトには、SequenceFile を読み取る機能があり、同じ PiggyBank プロジェクトの AvroStorage を適切な Avro スキームと共に使用するだけで、Avro ファイルを取得できます。
Pig だけがファイルからの Avro スキーマのロードをサポートしていれば.. ! Pig を使用する場合、残念ながら、Avro スキーマを明示的に含むスクリプトを作成する必要があり、これは少し面倒です。