【发布时间】:2016-09-13 17:39:28
【问题描述】:
我正在使用Apache's Beam sdk 版本0.2.0-incubating-SNAPSHOT
并尝试使用Dataflow 运行器将数据拉到一个大表中。不幸的是,在执行我使用BigTableIO.Write 作为接收器的数据流管道时,我得到了NullPointerException。根据我的需要,已经检查了我的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,在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)
我检查了此方法是否在处理所有元素之前在 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;
}
谢谢。
【问题讨论】:
-
您能否澄清一些事情:1)您使用的是什么版本的SDK? 2)你用的是什么跑步者? (direct runner、Spark、Flink、Dataflow?)如果是Dataflow,能否给出job ID?
-
@jkff 感谢您的评论。是的,刚刚编辑了我的问题,包括版本。所以,是的,我正在使用 Dataflow 运行器。它的工作ID是2016-09-13_08_29_14-14276852956124203982
-
我查看了作业及其类路径,如果我没记错的话,看起来您使用的是 beam-sdks-java-{core,io 的 0.3.0-incubating-SNAPSHOT 版本},但是 google-cloud-dataflow-java 的 0.2.0-incubating-SNAPSHOT 版本。我相信问题是因为这个 - 你必须使用相同的版本(更多细节:版本 0.3.0 中的 BigtableIO 使用 \@Setup 和 \@Teardown 方法,但 runner 0.2.0 还不支持它们)。跨度>
-
@jkff 正是这个问题,刚刚在这里修复。谢谢。
-
@jkff - 请将您的评论移到答案中,以便可以接受并且可以将此问题标记为已关闭。感谢您解决问题!
标签: nullpointerexception google-cloud-dataflow google-cloud-bigtable apache-beam apache-beam-io