开始试用Apache Beam并尝试使用它来读取和计算HBase表。当尝试在没有Count.globally的情况下读取表时,它可以读取行,但是当尝试计算行数时,进程挂起并且永远不会退出。
这是非常简单的代码:
Pipeline p = Pipeline.create(options);
p.apply("read", HBaseIO.read().withConfiguration(configuration).withTableId(HBASE_TABLE))
.apply(ParDo.of(new DoFn<Result, String>() {
@ProcessElement
public void processElement(ProcessContext c) {
Result result = c.element();
String rowkey = Bytes.toString(result.getRow());
System.out.println("row key: " + rowkey);
c.output(rowkey);
}
}))
.apply(Count.<String>globally())
.apply("FormatResults", MapElements.via(new SimpleFunction<Long, String>() {
public String apply(Long element) {
System.out.println("result: " + element.toString());
return element.toString();
}
}));
当使用Count.globally时,该过程永远不会完成。将其注释掉时,该过程将打印所有行。
任何想法?
答案 0 :(得分:0)
您使用的是哪个版本的光束?
感谢您提出此问题。我试图重现你的情况,事实上似乎存在碰撞版本的番石榴破坏HBaseIO转换的问题。我发送了一个pull request来修复它的阴影,我会在合并后让你更新,这样你就可以测试它是否有效。
再次感谢。