0

Apache's BeamSDK バージョンを使用0.2.0-incubating-SNAPSHOT しており、ランナーを使用してデータをビッグテーブルにプルしようとしていますDataflow。残念ながら、シンクとしてNullPointerException使用しているデータフロー パイプラインを実行すると、エラーが発生します。BigTableIO.Writeすでにチェック済みBigtableOptionsで、必要に応じてパラメーターは問題ありません。

基本的に、私は作成し、パイプラインのある時点でPCollection<KV<ByteString, Iterable<Mutation>>>、目的のビッグテーブルに書き込むステップがあります。

final BigtableOptions.Builder optionsBuilder =
    new BigtableOptions.Builder().setProjectId(System.getProperty("PROJECT_ID"))
        .setInstanceId(System.getProperty("BT_INSTANCE_ID"));

// do intermediary steps and create PCollection<KV<ByteString, Iterable<Mutation>>> 
// to write to bigtable

// modifiedHits is a PCollection<KV<ByteString, Iterable<Mutation>>>
modifiedHits.apply("writting to big table", BigtableIO.write()
    .withBigtableOptions(optionsBuilder).withTableId(System.getProperty("BT_TABLENAME")));

p.run();

パイプラインを実行すると、メソッドNullPointerExceptionで BigtableIO クラスを正確に指すが得られました。public void processElement(ProcessContext c)

(6e0ccd8407eed08b): java.lang.NullPointerException at org.apache.beam.sdk.io.gcp.bigtable.BigtableIO$Write$BigtableWriterFn.processElement(BigtableIO.java:532)

bigtable に書き込む前に、このメソッドがすべての要素を処理していることを確認しましたが、このパイプラインを実行すると、なぜそのような例外が発生するのかわかりません。以下のコードによると、このメソッドはbigtableWriter属性を使用して各 を処理しますc.element()が、ブレークポイントを設定してデバッグすることさえできませんnull。この問題を解決するためのアドバイスや提案はありますか?

@ProcessElement
  public void processElement(ProcessContext c) throws Exception {
    checkForFailures();
    Futures.addCallback(
        bigtableWriter.writeRecord(c.element()), new WriteExceptionCallback(c.element()));
    ++recordsWritten;
  }

ありがとう。

4

1 に答える 1

2

0.3.0-incubating-SNAPSHOTジョブとそのクラスパスを調べたところ、間違いがなければ のバージョンを使用しているように見えますbeam-sdks-java-{core,io}version 0.2.0-incubating-SNAPSHOTgoogle-cloud-dataflow-java.

問題の原因はこれだと思います - 同じバージョンを使用する必要があります (詳細: バージョン 0.3.0 の BigtableIO は使用@Setup@Teardownメソッドを使用していますが、ランナー 0.2.0 はまだそれらをサポートしていません)。

于 2016-09-15T04:23:56.547 に答える