2

現在、次のコードを使用して既存のSequenceFileに追加します。

// initialize sequence writer
Writer writer = SequenceFile.createWriter(
        FileContext.getFileContext(this.conf), 
        this.conf, 
        new Path("/tmp/sequencefile"), 
        Text.class,
        BytesWritable.class, 
        CompressionType.NONE,
        null, 
        new Metadata(),
        EnumSet.of(CreateFlag.CREATE, CreateFlag.APPEND), 
        CreateOpts.blockSize(64 * 1024 * 1024));

writer.append(key, value);

// close writer
writer.hsync();
writer.close();

シーケンスファイルが存在しない場合はすべて機能しますが、ファイルが存在する場合、Hadoop はファイルの途中でSequenceFileヘッダー (SEQ ...) を再度書き込み、ファイルは Hadoop で読み取り不能になります。

Hadoop 2.6.0 を使用しています

4

1 に答える 1

1

既存のシーケンスファイルに追加することはできないと思います。2.5.2 と 2.6.0-CDH5.5 のソース コードを分析しました。Writer のすべてのコンストラクターに「シーケンス ファイル ヘッダー」が書き込まれます (init 関数から)。

この機能をサポートするパスがありますhttps://issues.apache.org/jira/browse/HADOOP-7139が、公式リリースにはプッシュされていません。

更新: 問題 HADOOP-7139 は現在クローズされており、バージョン 2.6.1 / 2.7.2 から、既存の SequenceFile に追加することが可能です:)

于 2015-03-12T08:37:32.740 に答える