Apache Beam计数HBase行块而不返回

时间:2017-03-29 11:18:30

标签: apache-beam apache-beam-io

开始试用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时,该过程永远不会完成。将其注释掉时,该过程将打印所有行。

任何想法?

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的光束?

感谢您提出此问题。我试图重现你的情况,事实上似乎存在碰撞版本的番石榴破坏HBaseIO转换的问题。我发送了一个pull request来修复它的阴影,我会在合并后让你更新,这样你就可以测试它是否有效。

再次感谢。