小编Sha*_*kar的帖子

在 Dataproc 上使用 Spark 进行跨账户 GCS 访问

我正在尝试使用在帐户 B 中的 Dataproc 上运行的 Spark 将帐户 A 的 GCS 中的数据提取到帐户 B 的 BigQuery。

我试图设置GOOGLE_APPLICATION_CREDENTIALS为服务帐户密钥文件,该文件允许访问帐户 A 中的必要存储桶。但是如果我开始,spark-shell我会收到以下错误。

Exception in thread "main" java.io.IOException: Error accessing Bucket dataproc-40222d04-2c40-42f9-a5de-413a123f949d-asia-south1
Run Code Online (Sandbox Code Playgroud)

按照我的理解,设置环境变量就是将访问权限从账户B切换到账户A。

有没有办法在 Spark 中同时拥有访问权限,即对帐户 B 的默认访问权限和对帐户 A 的额外访问权限?

更新:我尝试spark-shell按照Igor's Answer 的配置运行,但错误仍然存​​在。这是我尝试过的命令和堆栈跟踪。

$ spark-shell --conf spark.hadoop.fs.gs.auth.service.account.json.keyfile=/home/shasank/watchful-origin-299914-fa29998bad08.json --jars gs://hadoop-lib/bigquery/bigquery-connector-hadoop2-latest.jar
Run Code Online (Sandbox Code Playgroud)
Exception in thread "main" java.io.IOException: Error accessing Bucket dataproc-40999d04-2b99-99f9-a5de-999ad23f949d-asia-south1
  at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.getBucket(GoogleCloudStorageImpl.java:1895)
  at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.getItemInfo(GoogleCloudStorageImpl.java:1846)
  at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageFileSystem.getFileInfoInternal(GoogleCloudStorageFileSystem.java:1125)
  at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageFileSystem.getFileInfo(GoogleCloudStorageFileSystem.java:1116)
  at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageFileSystem.exists(GoogleCloudStorageFileSystem.java:440)
  at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.configureBuckets(GoogleHadoopFileSystemBase.java:1738)
  at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.configureBuckets(GoogleHadoopFileSystem.java:76)
  at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.configure(GoogleHadoopFileSystemBase.java:1659)
  at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.initialize(GoogleHadoopFileSystemBase.java:683)
  at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.initialize(GoogleHadoopFileSystemBase.java:646) …
Run Code Online (Sandbox Code Playgroud)

google-cloud-storage google-bigquery apache-spark google-cloud-platform google-cloud-dataproc

5
推荐指数
1
解决办法
1026
查看次数