使用 java 从 Dataproc 读取 google 云存储时出现 NoSuchMethodError
NoSuchMethodError while reading from google cloud storage from Dataproc using java
这是我读取云存储文件的方法
public static String getStringObject(String bucketName, String fileName) throws Exception{
BlobId blobId = BlobId.of(bucketName, fileName);
byte[] content = storage.readAllBytes(blobId);
String contentString = new String(content, UTF_8);
return contentString;
}
当我从我的开发环境调用此方法以从存储桶中读取文件时,它工作正常。但是当我在 运行 spark 作业时从 Dataproc 集群调用此方法时,它会抛出以下错误。
Exception in thread "main" 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.readAllBytes(StorageImpl.java:460)`
这是我的 Maven 的一部分 pom.xml
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.22.0</version>
</dependency>
我做错了什么?
当 运行 在 Dataproc 上时,您通常会在客户端应用程序类路径中找到 Hadoop 库。这允许与 HDFS 和 GCS 交互,但也意味着存在 guava 的 Hadoop 版本。
您可以在
中找到使用阴影解决此问题的方法
这是我读取云存储文件的方法
public static String getStringObject(String bucketName, String fileName) throws Exception{
BlobId blobId = BlobId.of(bucketName, fileName);
byte[] content = storage.readAllBytes(blobId);
String contentString = new String(content, UTF_8);
return contentString;
}
当我从我的开发环境调用此方法以从存储桶中读取文件时,它工作正常。但是当我在 运行 spark 作业时从 Dataproc 集群调用此方法时,它会抛出以下错误。
Exception in thread "main" 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.readAllBytes(StorageImpl.java:460)`
这是我的 Maven 的一部分 pom.xml
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.22.0</version>
</dependency>
我做错了什么?
当 运行 在 Dataproc 上时,您通常会在客户端应用程序类路径中找到 Hadoop 库。这允许与 HDFS 和 GCS 交互,但也意味着存在 guava 的 Hadoop 版本。
您可以在