2

私は現在、書き込み可能な SequenceFiles で Hadoop mapreduce ジョブを使用しています。システムの非 Hadoop 関連部分でも、同じ Writable タイプがシリアル化に使用されます。

この方法は保守が困難です。主な理由は、スキーマがなく、バージョン変更を手動で処理する必要があるためです。

apache avro がこれらの問題を処理しているようです。

問題は、移行中にデータが両方の形式になることです。移行を処理する簡単な方法はありますか?

4

2 に答える 2

2

私は自分で試したことはありませんが、AvroSequenceFileフォーマットを使用すると役立つかもしれません。これは単なるラッパーでSequenceFileあるため、理論的には、古いSequenceFile形式と新しいAvro形式の両方でデータを書き込むことができるため、移行が容易になります。

この形式の詳細については、こちらをご覧ください。

于 2013-11-18T03:45:59.327 に答える
1

一般に、Avro データと SequenceFiles を交互に使用することを妨げるものは何もありません。必要なデータのタイプに必要な InputFormat を使用してください。もちろん、出力には、実用的な場合は常に Avro 形式を使用するのが理にかなっています。入力が異なる形式である場合は、MultipleInputsを見てください。基本的に、別の Mappers を実装する必要がありますが、Map の入力キー/値が異なることを考えると、それは当然のことです。

Avro への移行は賢明な選択です。時間とハードウェアに余裕がある場合は、データを SequenceFile から Avro にすぐに明示的に変換する価値があるかもしれません。これを行うために、SequenceFiles もサポートしている Avro でサポートされている任意の言語を使用できます。Java は確かにそうしますが (明らかに)、Pig もこれを行うのに非常に便利です。

ユーザーが提供した PiggyBank プロジェクトには、SequenceFile を読み取る機能があり、同じ PiggyBank プロジェクトの AvroStorage を適切な Avro スキームと共に使用するだけで、Avro ファイルを取得できます。

Pig だけがファイルからの Avro スキーマのロードをサポートしていれば.. ! Pig を使用する場合、残念ながら、Avro スキーマを明示的に含むスクリプトを作成する必要があり、これは少し面倒です。

于 2013-11-20T08:02:38.350 に答える