2016-07-12 8 views
1

데이터 흐름을 사용하여 일부 데이터를 bigtable에 씁니다.
현재 bigtable에서 행을 읽는 작업이 있습니다.
그러나 bigtable-hbase-dataflow를 사용하여 bigtable에서 행을 읽으려고 할 때마다 오류가 발생하고 다음과 같이 불평합니다.
데이터 흐름에서 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을 1.6.0 : - 클라우드 데이터 흐름 자바 SDK 모두를 구글에서'사용하고 '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에 애그리 게이터 (aggregator)를 사용하여 행을 계산합니다.

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()); 
    } 
} 

은 그냥 흐름 document에 튜토리얼을 따라하지만 실패합니다. 누구든지 나를 도울 수 있습니까?

가 이전에, 우리의 빌드 파일이 의존성을 생략 :

+1

실제 코드에서'project-id','instance-id' 및'table'을 실제 값으로 바꿨습니다, 그렇습니까? –

+1

예. 당연히 했지 :) –

+1

이것은 클라우드 bigtable 클라이언트의 버그처럼 보입니다. 이 문제를 추적하기 위해 github 문제를 만들었습니다. https://github.com/GoogleCloudPlatform/cloud-bigtable-client/issues/912 –

답변

관련 문제