Google Cloud Dataproc 删除 BigQuery 表不起作用

Posted

技术标签:

【中文标题】Google Cloud Dataproc 删除 BigQuery 表不起作用【英文标题】:Google Cloud Dataproc drop BigQuery table not working 【发布时间】:2019-01-21 09:14:53 【问题描述】:

您好,我尝试在 Dataproc 中使用 java client library 从 BigQuery 中删除一个表,启动 spark-shell 如下:

spark-shell --packages com.google.cloud:google-cloud-bigquery:1.59.0

并导入以下依赖项

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryResponse;
import com.google.cloud.bigquery.TableResult;
import java.util.UUID;

val bigquery = BigQueryOptions.getDefaultInstance().getService() 
bigquery.delete("test","temp")

这里的 test 和 temp 分别是我的数据集和表名,但运行上述语句后显示以下错误:

java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
  at com.google.api.gax.retrying.BasicRetryingFuture.<init>(BasicRetryingFuture.java:82)
  at com.google.api.gax.retrying.DirectRetryingExecutor.createFuture(DirectRetryingExecutor.java:88)
  at com.google.api.gax.retrying.DirectRetryingExecutor.createFuture(DirectRetryingExecutor.java:74)
  at com.google.cloud.RetryHelper.run(RetryHelper.java:75)
  at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
  at com.google.cloud.bigquery.BigQueryImpl.delete(BigQueryImpl.java:386)
  at com.google.cloud.bigquery.BigQueryImpl.delete(BigQueryImpl.java:375)
  ... 48 elided   

【问题讨论】:

检查访问控制cloud.google.com/bigquery/docs/access-control @Bira 感谢分享链接,我尝试设置管理员用户并再次尝试,但显示与上述错误相同。 【参考方案1】:

这是因为您在类路径中有一个较旧的 Guava library 版本(作为 Hadoop/Spark 依赖项提供),它没有 MoreExecutors.directExecutor 方法。

要解决此问题,您需要在应用程序的UberJar 中包含和shade/relocate(以避免与类路径上的其他库冲突)google-cloud-bigquery 库及其依赖项(包括 Guava)。

Here is 一个使用Maven Shade 插件的示例。

【讨论】:

以上是关于Google Cloud Dataproc 删除 BigQuery 表不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 google-cloud-python API 访问 Dataproc 时出现无效区域错误

来自 DataProc 集群的 Google Cloud Sdk

如何在 Google Cloud Platform 上查看 Dataproc 作业的输出文件

在 Google Cloud DataProc 上安排 cron 作业

Google Cloud Dataproc 上的 Pyspark 作业失败

Google Cloud Dataproc 无法使用初始化脚本创建新集群