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 클래스 :

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

는 내가 같은 예외 초과 내가이 pipelin을 실행지고있어 이유에서 Bigtable에 쓸 수 있지만하지 않도록하기 전에이 방법은 모든 요소를 ​​처리 확인 이자형. 아래의 코드에 따르면이 방법은 속성을 사용하여 각 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?) 데이터 흐름 인 경우 작업 ID를 부여 할 수 있습니까? – jkff

+0

@jkff 코멘트 주셔서 감사합니다. 예, 방금 버전을 포함한 내 질문을 편집했습니다. 그래, 나는 Dataflow 러너를 사용하고있다. 그 직업 ID는 2016-09-13_08_29_14-14276852956124203982 –

+0

입니다. 저는 직업과 그 클래스 패스를 찾았습니다. 만약 당신이 0.3.0 인큐베이팅 버전을 사용하고있는 것처럼 보이지 않는다면, 빔 - sdks-java- {core, io}이지만 google-cloud-dataflow-java의 버전 0.2.0-incubating-SNAPSHOT입니다. 나는이 문제가 이것 때문이라고 생각한다 - 당신은 동일한 버전을 사용해야한다. (더 자세한 사항 : 버전 0.3.0의 BigtableIO는 \ @Setup과 \ @Teardown 메소드를 사용하지만 러너 0.2.0은 아직 지원하지 않는다.) – jkff

답변

2

나는 직업과 그 classpath를 찾았고, 당신이 0.3.0-incubating-SNAPSHOTbeam-sdks-java-{core,io}이지만, 이 google-cloud-dataflow-java 인 것처럼 오해하지 않았다. (: 0.3.0이 @Setup@Teardown 방법을 사용 버전 BigtableIO하지만 주자 0.2.0은 아직 지원하지 않습니다 자세한 내용) 같은 버전을 사용해야합니다 -

나는 문제가 이것 때문에 믿습니다.