如何解决NoSuchMethodError: com.google.common.hash.Hashing.crc32c
我正在尝试通过我的 Spark 代码访问 Google 云存储。但是在 GCS 中创建文件时出现以下错误。
java.lang.NoSuchMethodError: com.google.common.hash.Hashing.crc32c()Lcom/google/common/hash/HashFunction; 在 com.google.cloud.storage.StorageImpl.create(StorageImpl.java:169)
当我尝试在我的代码中访问相同的方法时,它在我的 IDE 中没有显示任何错误。我仅在 spark-submit
上遇到此问题。
val storage: Storage = StorageOptions.newBuilder.setCredentials(credentials).build.getService
val blobId = BlobId.of(bucket,outputFile)
val blobInfo = BlobInfo.newBuilder(blobId).setContentType(contentType).build
storage.create(blobInfo,data)
这是我的pom.xml
。
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.113.1</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>failureaccess</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>listenablefuture</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.compat.version}</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
这里有什么我遗漏的吗?
编辑 #1: 相同的代码通过 spark-shell
运行良好。只有在尝试使用 spark-submit
时才会失败。我已经尝试从 pom 中的每个依赖项中排除 guava
工件。尽管如此,它还是因为同样的错误而失败。
编辑 #2:我对 spark-submit
使用以下命令。
spark-submit \
--master yarn \
--conf spark.driver.extraClasspath=${JAR_FILE} \
--conf spark.executor.extraClasspath=${JAR_FILE} \
--conf spark.yarn.maxAppAttempts=1 \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.driver.extrajavaoptions="${EXTRA_JAVA_OPTIONS}" \
--conf spark.executor.extrajavaoptions=-XX:+UseG1GC \
--conf spark.dynamicAllocation.maxExecutors=80 \
--num-executors 80 \
--executor-cores 5 \
--executor-memory 16G \
--driver-memory 6G \
--name ${APP_NAME} \
--class ${CLASS_NAME} \
--deploy-mode cluster ${JAR_FILE}
还有这个用于输入 spark-shell
的命令。
spark-shell --files ${JAR_FILE} \
--conf spark.driver.extraClasspath=${JAR_FILE} \
--conf spark.executor.extraClasspath=${JAR_FILE} \
--conf spark.yarn.maxAppAttempts=1 \
--conf spark.executor.extrajavaoptions=-XX:+UseG1GC \
--conf spark.driver.extrajavaoptions="${EXTRA_JAVA_OPTIONS}" \
--num-executors 80 \
--executor-cores 5 \
--executor-memory 16G \
--driver-memory 6G
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。