微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NoSuchMethodError: com.google.common.hash.Hashing.crc32c

如何解决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 上遇到此问题。

我正在尝试使用以下方法在 GCS 中创建文件

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 举报,一经查实,本站将立刻删除。