在 bigquery 中创建数据集时,谷歌 App 引擎出错
Posted
技术标签:
【中文标题】在 bigquery 中创建数据集时,谷歌 App 引擎出错【英文标题】:Error in google App engine when creating a dataset in bigquery 【发布时间】:2017-08-07 13:25:25 【问题描述】:我正在开发一个 App Engine 应用程序来从 BigQuery 进行查询。当我创建一个 bigquery 实例,然后我想创建一个数据集或获取对数据集的引用时,会发生以下错误。这只发生在我在 App Engine 上部署应用程序时,但是当我使用本地应用程序引擎 sdk 测试我的应用程序时,我没有任何问题
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
at com.google.api.gax.retrying.BasicRetryingFuture.<init> (BasicRetryingFuture.java:77)
at com.google.api.gax.retrying.DirectRetryingExecutor.createFuture (DirectRetryingExecutor.java:75)
at com.google.cloud.RetryHelper.runWithRetries (RetryHelper.java:53)
at com.google.cloud.bigquery.BigQueryImpl.getDataset (BigQueryImpl.java:227)
at com.google.cloud.bigquery.BigQueryImpl.getDataset (BigQueryImpl.java:218)
at com.example.Edmonds.myapplication.backend.MyServlet.doGet (MyServlet.java:75)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:717)
我尝试这样做的部分如下:
InputStream ios = getServletContext().getResourceAsStream("/WEB-INF/BackendTestMac-f8739513cc27.json") ;
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(getServletContext().getResourceAsStream("/WEB-INF/BackendTestMac-f8739513cc27.json"))
.setDatabaseUrl("https://backendtestmac.firebaseio.com/")
.build();
BigQuery bigQuery = BigQueryOptions.newBuilder().setProjectId("backendtestmac").setCredentials(ServiceAccountCredentials.fromStream(ios)).build().getService() ;
String datasetId = "my_dataset_id";
Dataset dataset = bigQuery.create(DatasetInfo.newBuilder(datasetId).build()) ;
【问题讨论】:
您是否尝试过使用适用于 App Engine 的 Java 8 运行时?还是这是 Java 7?我相信 Java 7 版本的 App Engine 可能与某些 Google Cloud 客户端库不兼容,因此如果需要 Java 7,您可能必须使用 Google API 客户端库developers.google.com/api-client-library/java/apis/bigquery/v2 @TimSwast 你如何告诉 Google Cloud 客户端库与哪个 Java 版本兼容? 如何在本地运行项目? 【参考方案1】:我在做标准应用引擎教程时遇到了类似的异常:
在页面上:
Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds
在服务器日志中
Error for /create
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
at com.google.api.gax.retrying.BasicRetryingFuture.<init>(BasicRetryingFuture.java:77)
at com.google.api.gax.retrying.DirectRetryingExecutor.createFuture(DirectRetryingExecutor.java:75)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:53)
at com.google.cloud.storage.StorageImpl.create(StorageImpl.java:148)
at com.google.cloud.storage.StorageImpl.create(StorageImpl.java:141)
at com.example.getstarted.util.CloudStorageHelper.uploadFile(CloudStorageHelper.java:65)
at com.example.getstarted.basicactions.CreateBookServlet.doPost(CreateBookServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.example.getstarted.util.DatastoreSessionFilter.doFilter(DatastoreSessionFilter.java:98)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcmysqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
上传图片时,它在本地运行良好,但升级到 apppot 时崩溃
但是,在用户身份验证部分之后,登录后,我没有收到错误。如果是匿名的 - 得到那个错误。它可能在最近的补丁中被破坏。因为我认为他们不会在不提及它的情况下发布该核心教程。
教程链接为:https://cloud.google.com/java/getting-started-appengine-standard/tutorial-app
也许这会有所帮助。如果您发现更多信息,请告诉我!
【讨论】:
【参考方案2】:您应该检查应用程序的类路径。很可能你的 CP 上有旧版本的番石榴
【讨论】:
以上是关于在 bigquery 中创建数据集时,谷歌 App 引擎出错的主要内容,如果未能解决你的问题,请参考以下文章
在 pyspark 中创建训练集和测试集时,如何跨不同组进行分层抽样? [关闭]
谷歌数据工作室在不同时间显示不同数据值的问题(BigQuery+Data Studio)