apache-spark - Spark使用s3a:java.lang.NoSuchMethodError

标签 apache-spark hadoop ceph

我正在做一些关于spark_with_hadoop2.7(2.4.3),hadoop(3.2.0)和Ceph luminous的组合。当我尝试使用spark访问ceph(例如,在shell上启动spark-sql)时,出现如下异常:

 INFO impl.MetricsSystemImpl: s3a-file-system metrics system started
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.ProviderUtils.excludeIncompatibleCredentialProviders(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/Class;)Lorg/apache/hadoop/conf/Configuration;
        at org.apache.hadoop.fs.s3a.S3AUtils.getAWSAccessKeys(S3AUtils.java:740)
        at org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider.<init>(SimpleAWSCredentialsProvider.java:58)
        at org.apache.hadoop.fs.s3a.S3AUtils.createAWSCredentialProviderSet(S3AUtils.java:600)

对于NoSuchMethodError,最有可能是因为根据how-do-i-fix-a-nosuchmethoderror,已编译的类版本与运行的类版本不同。

要访问Ceph,在aws-java-sdk-bundle-1.11.375.jar下的aws相关jars hadoop-aws-3.2.0.jar$HADOOP_HOME/share/hadoop/tools/lib实际使用。我做了以下操作:

1,将这两个 jar 复制到$SPARK_HOME/jars2,修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh在下面添加语句:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/tools/lib/*
通过执行上述步骤,我可以启动hdfs来访问ceph,例如,我可以使用hdfs dfs -ls列出ceph存储桶下的文件夹。事实证明,与aws相关的 jar 工作正常。(据我了解)。

但是,为什么在我调用spark时有关aws s3a的异常抛出?

最佳答案

所有hadoop- * JAR都必须在版本上100%匹配,否则您将看到这样的堆栈跟踪。

有关更多信息,请重读

关于apache-spark - Spark使用s3a:java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242548/

相关文章:

apache-spark - Spark RDD foreachPartition 到 S3

hadoop - 得到错误的 FS : file while running hive query

scala - 如何在 Spark 2.1 中保存分区的 Parquet 文件?

scala - 提高Spark SQL重复调用groupBy/count的效率。枢轴结果

hadoop - 在 Hadoop 中包含第三方 Jar

java - 安装 Hadoop、Java 关于索引 7 处非法字符的异常?

storage - Ceph 原始存储使用与池存储使用

kubernetes - Rook ceph 在 kubernetes 上坏了?

kubernetes - 在 Kubernetes 错误中使用 RBD

azure - 写入 Azure Cosmos,吞吐量 RU