0

我想运行数据流作业以将数据从 google-project-1-table 迁移到 google-project-2-table。(从一个读取并写入另一个)。这样做时我遇到了许可问题。我已将“GOOGLE_APPLICATION_CREDENTIALS”设置为指向我的项目 1 的凭据文件。下面的 project-2 是 project-1 的权限/角色。1) 服务帐户(角色 - 编辑) 2) -compute@developer.gserviceaccount.com(角色 - 编辑) 3) @cloudservices.gserviceaccount.com(角色 - 编辑)。

我还需要做些什么来完成这项工作吗?

原因:com.google.bigtable.repackaged.com.google.cloud.grpc.io.IOExceptionWithStatus:com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResultQueueEntry$ExceptionResultQueueEntry 的响应流错误。 getResponseOrThrow(ResultQueueEntry.java:66) 在 com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResponseQueueReader.getNextMergedRow(ResponseQueueReader.java:55) 在 com.google.bigtable.repackaged.com.google。 cloud.grpc.scanner.StreamingBigtableResultScanner.next(StreamingBigtableResultScanner.java:42) 在 com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.StreamingBigtableResultScanner.next(StreamingBigtableResultScanner.java:27) 在 com.google。 bigtable.repackaged.com.google.cloud.grpc.scanner.ResumingStreamingResultScanner.next(ResumingStreamingResultScanner.java:89) at com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResumingStreamingResultScanner.next(ResumingStreamingResultScanner.java:45) at com.google.cloud.bigtable.dataflow.CloudBigtableIO$1.next(CloudBigtableIO .java:221) 在 com.google.cloud.bigtable.dataflow.CloudBigtableIO$1.next(CloudBigtableIO.java:216) 在 com.google.cloud.bigtable.dataflow.CloudBigtableIO$Reader.advance(CloudBigtableIO.java:775)在 com.google.cloud.bigtable.dataflow.CloudBigtableIO$Reader.start(CloudBigtableIO.java:799) 在 com.google.cloud.dataflow.sdk.io.Read$Bounded$1.evaluateReadHelper(Read.java:178) 。 .. 还有 18 个原因:com.google.bigtable.repackaged.io.grpc.StatusRuntimeException:PERMISSION_DENIED:用户无法访问项目:com.google.bigtable.repackaged 的​​项目 2。io.grpc.Status.asRuntimeException(Status.java:431) 在 com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.StreamObserverAdapter.onClose(StreamObserverAdapter.java:48) 在 com.google.bigtable。 repackaged.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 com.google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54) 在 com.google .bigtable.repackaged.io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker .run(ThreadPoolExecutor.java:617) ... 还有 1 个com.google.cloud.grpc.scanner.StreamObserverAdapter.onClose(StreamObserverAdapter.java:48) 在 com.google.bigtable.repackaged.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 com .google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54) 在 com.google.bigtable.repackaged.io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 还有 1 个com.google.cloud.grpc.scanner.StreamObserverAdapter.onClose(StreamObserverAdapter.java:48) 在 com.google.bigtable.repackaged.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 com .google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54) 在 com.google.bigtable.repackaged.io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 还有 1 个ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 com.google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54) 在 com.google.bigtable.repackaged.io.grpc .internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617 ) ... 还有 1 个ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 com.google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54) 在 com.google.bigtable.repackaged.io.grpc .internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617 ) ... 还有 1 个runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 还有 1 个runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 还有 1 个

4

1 回答 1

2

Dataflow 安全和权限指南的“跨多个云平台项目访问云平台资源”部分对此有一些说明。

由于该指南没有明确涉及 Cloud BigTable,因此我将尝试根据您的问题在此处清楚地写出要求。

使用虚假的项目 ID 号,您似乎拥有:

  • 一个project-1id 为12345的项目。
  • project-2id为 9876的项目
  • 一个大表google-project-1-tableproject-1
  • 一个大表google-project-2-tableproject-2
  • 将在 中运行的数据流管道,project-1您希望:
    • 读自google-project-1-table
    • 写给google-project-2-table

那准确吗?

写入 Bigtable 的 Dataflow 工作人员作为计算引擎服务帐户运行。那就是12345-compute@developer.gserviceaccount.com。此帐户需要能够访问project-2和写入google-project-2-table.

您的错误消息暗示权限失败发生在最粗粒度 - 帐户根本无法访问project-2

于 2016-10-13T18:24:48.093 回答