[英]How to write to BigTable using Apache Beam direct-runner in java?
[英]Streaming pubsub -bigtable using apache beam dataflow java
嘗試將 pubsub json 消息更新到 bigtable。我正在從本地計算機運行代碼。正在創建數據流作業。但是我沒有看到 bigtable 實例中有任何數據更新,而且它也不會在控制台或數據流作業中引發任何錯誤。我還嘗試具有硬編碼值並嘗試在 bigtable 中更新,但仍然沒有用。 請任何人在這個問題上建議或指導我
try{
PipelineOptions options = PipelineOptionsFactory.fromArgs(projectArgs).create();
options.setRunner(DataflowRunner.class);
System.out.println("tempfile-" + options.getTempLocation());
Pipeline p = Pipeline.create(options);
System.out.println("options" + options.getTempLocation());
p.apply("Read PubSub Messages", PubsubIO.readStrings().fromTopic(PUBSUB_SUBSCRIPTION))
.apply(Window.into(FixedWindows.of(Duration.standardMinutes(1))))
.apply(ParDo.of(new RowGenerator())).apply(CloudBigtableIO.writeToTable(bigtableConfig));
p.run();
}catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
}
@ProcessElement public void processElement(ProcessContext context) {
try {
System.out.println("In for RowGenerator");
String decodedMessageAsJsonString = context.element();
System.out.println("decodedMessageAsJsonString"+decodedMessageAsJsonString);
String rowKey = String.valueOf(
LocalDateTime.ofInstant(Instant.now(), ZoneId.of("UTC"))
.toEpochSecond(ZoneOffset.UTC));
System.out.println("rowKey"+rowKey);
Put put = new Put(rowKey.getBytes());
put.addColumn("VALUE".getBytes(), "VALUE".getBytes(), decodedMessageAsJsonString.getBytes());
// put.addColumn(Bytes.toBytes("IBS"), Bytes.toBytes("name"),Bytes.toBytes("ram"));
context.output(put);
}catch (Throwable e) {
// TODO: handle exception
System.out.println(e);
}
我沒有發現模板的 Bigtable 端有任何問題。 只需確保列族(我假設它是“VALUE”)存在於目標表中。
您確定您正在閱讀正確的 PubSub 訂閱並且有消息被發送到 PubSub。 如果一切正確,則 PubSub 配置中似乎存在一些問題。 也許在問題上添加 PubSub 標簽,pubsub 社區的人可以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.