0

Apache's Beam sdkバージョン0.2.0-incubating-SNAPSHOT を使用していて、Dataflowランナーでbigtableにデータをプルしようとしています。残念ながらNullPointerExceptionを私のデータフローパイプラインを実行するときに私はBigTableIO.Writeを私のシンクとして使用しています。すでに私のBigtableOptionsをチェックしていて、私の必要に応じてパラメータが正常です。Apache BeamのデータフローSDKを使用してBigTableに書き込むときにNullPointerExceptionが発生する

は基本的に、私が作成し、私のパイプラインのいくつかの時点で、私は私の希望のBigtableへ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を得ましたpublic void processElement(ProcessContext c)方法でBigtableIOクラス:私はBigtableの上で書くことの前に、この方法は、すべての要素を処理しているが、わからない、なぜ私は、このような例外残業を取得しています確認

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

私はこのpipelinを実行e。以下のコードによれば、この方法では属性を使用してそれぞれc.element()を処理しますが、デバッグするためにブレークポイントを設定することはできません。正確にはnullです。どのようにこの問題を解決するためのアドバイスや提案?

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

ありがとうございます。

+0

いくつかを明確にしてください:1)使用しているSDKのバージョンは何ですか? 2)あなたはどんなランナーを使っていますか? (ダイレクトランナー、Spark、Flink、Dataflow?)それがDataflowなら、あなたはジョブIDを渡すことができますか? – jkff

+0

@jkffコメントありがとうございます。はい、バージョンを含めて私の質問を編集しました。ですから、Dataflowランナーを使用しています。その仕事のIDは2016-09-13_08_29_14-14276852956124203982 –

+0

です。私は仕事とそのクラスパスを調べました。あなたがバージョン0.3.0を使用しているように見えても間違いではないと思います.-インキュベーション - ビーム-SDKS-Java- {core、io}ですが、バージョン0.2.0-incubating-google-cloud-dataflow-javaのスナップショットです。私はこの問題が原因だと信じています - 同じバージョンを使う必要があります(詳細:バージョン0.3.0のBigtableIOは\ @Setupと\ @Teardownメソッドを使用しますが、ランナー0.2.0はまだサポートしていません)。 – jkff

答えて

2

私はジョブとそのクラスパスを調べました。バージョン0.3.0-incubating-SNAPSHOTbeam-sdks-java-{core,io}ですが、がgoogle-cloud-dataflow-javaのように見えます。

私はこの問題が原因だと信じています - 同じバージョンを使用しなければなりません(バージョン0.3.0のBigtableIOは@Setup@Teardownメソッドを使用しますが、ランナー0.2.0はまだサポートしていません)。

関連する問題