1

仕事にデータフローを使用して、データをビッグテーブルに書き込んでいます。
現在、ビッグテーブルから行を読み取るタスクがあります。
ただし、bigtable-hbase-dataflow を使用して bigtable から行を読み取ろうとすると、失敗し、次のように不平を言います。

 Error:   (3218070e4dd208d3): java.lang.IllegalArgumentException: b <= a
at org.apache.hadoop.hbase.util.Bytes.iterateOnSplits(Bytes.java:1720)
at org.apache.hadoop.hbase.util.Bytes.split(Bytes.java:1683)
at org.apache.hadoop.hbase.util.Bytes.split(Bytes.java:1664)
at com.google.cloud.bigtable.dataflow.CloudBigtableIO$AbstractSource.split(CloudBigtableIO.java:512)
at com.google.cloud.bigtable.dataflow.CloudBigtableIO$AbstractSource.getSplits(CloudBigtableIO.java:358)
at com.google.cloud.bigtable.dataflow.CloudBigtableIO$Source.splitIntoBundles(CloudBigtableIO.java:593)
at com.google.cloud.dataflow.sdk.runners.worker.WorkerCustomSources.performSplit(WorkerCustomSources.java:413)
at com.google.cloud.dataflow.sdk.runners.worker.WorkerCustomSources.performSplitWithApiLimit(WorkerCustomSources.java:171)
at com.google.cloud.dataflow.sdk.runners.worker.WorkerCustomSources.performSplit(WorkerCustomSources.java:149)
at com.google.cloud.dataflow.sdk.runners.worker.SourceOperationExecutor.execute(SourceOperationExecutor.java:58)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.executeWork(DataflowWorker.java:288)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.doWork(DataflowWorker.java:221)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.getAndPerformWork(DataflowWorker.java:173)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.doWork(DataflowWorkerHarness.java:193)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:173)
at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:160)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

現在、「com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:1.6.0」と「com.google.cloud.bigtable:bigtable-hbase-dataflow:0.9.0」を使用しています。

これが私のコードです。

CloudBigtableScanConfiguration config = new CloudBigtableScanConfiguration.Builder()
    .withProjectId("project-id")
    .withInstanceId("instance-id")
    .withTableId("table")
    .build();
pipeline.apply(Read.<Result>from(CloudBigtableIO.read(config)))
    .apply(ParDo.of(new Test()));

参考までに、Bigtable から読み取り、テスト DoFn でアグリゲーターを使用して行をカウントするだけです。

static class Test extends DoFn<Result, Result> {
    private static final long serialVersionUID = 0L;
    private final Aggregator<Long, Long> rowCount = createAggregator("row_count", new Sum.SumLongFn());

    @Override
    public void processElement(ProcessContext c) {
        rowCount.addValue(1L);
        c.output(c.element());
    }
}

データフロードキュメントのチュートリアルに従いましたが、失敗します。誰でも私を助けることができますか?

4

1 に答える 1