分块从HBase读取数据流/波束
我试图理解如何将hbase数据库以10条记录为一批地摄取到ApacheBeam/Dataflow中 到目前为止,我已经尝试了下面的方法,为每一行提供触发器分块从HBase读取数据流/波束,hbase,google-cloud-dataflow,apache-beam,google-cloud-bigtable,Hbase,Google Cloud Dataflow,Apache Beam,Google Cloud Bigtable,我试图理解如何将hbase数据库以10条记录为一批地摄取到ApacheBeam/Dataflow中 到目前为止,我已经尝试了下面的方法,为每一行提供触发器 PCollection<KV<Integer,String>> records = p.apply("read",HBaseIO.read() .withConfiguration(conf) .withTableId("Data")
PCollection<KV<Integer,String>> records = p.apply("read",HBaseIO.read()
.withConfiguration(conf)
.withTableId("Data")
.withScan(scan))
.apply(ParDo.of(new DoFn<Result, KV<Integer,String>>() {
@DoFn.ProcessElement
public void process(ProcessContext c){
Long ts = Bytes.toLong(c.element().getValue(Bytes.toBytes("timestamp"),Bytes.toBytes("timestamp")));
System.out.println(Long.toString(ts));
Integer pid = Bytes.toInt(c.element().getValue(Bytes.toBytes("patientid"),Bytes.toBytes("patientid")));
c.outputWithTimestamp(KV.of(pid,Long.toString(ts)),new Instant(ts));
}
@Override
public Duration getAllowedTimestampSkew(){
return Duration.standardDays(1);
}
}));
但我需要的是将它们分成10个连续的行,然后运行下游管道
我尝试使用Windowing将数据分组到窗口中,因为我不断地丢失数据点。没有包含在任何窗口中,或者某些窗口即使准备好数据集也无法完成
请提供您的观点和想法来解决这类问题
谢谢。模型上说:
梁管道通常关注于“”问题。因此,API强调并行处理元素,这使得表达“为PCollection中的每个元素分配序列号”之类的操作变得困难。这是有意为之的,因为这样的算法更容易受到可伸缩性问题的影响
因此,您不应该对PCollections中的排序进行假设。能否详细说明为什么要将行分组为10个批次?哪些特定的行在同一个组中结束有关系吗?实际上,我想要的是将有序数据集摄取到dataflow/beam中,并每10秒触发一个窗口。使用原始事件时间戳。但是经过多次尝试,我看到很多不完整的窗口,一些窗口根本没有触发,甚至原始源也有所有的数据。听起来可能是您的窗口或触发策略设置不正确。您能否提供更多详细信息,例如您的代码、数据流作业ID以及预期行为和实际行为?我试图将数据库中的10行读取到PCollection中的单个对象中。即,PCollection的单个元素将包含10行元素。理想情况下,该批处理应该通过窗口处理来完成,这在目前看来是不一致的。