我正在做一些关于spark_with_hadoop2.7(2.4.3(,hadoop(3.2.0(和ceph发光的组合。当我尝试使用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-a-nosuchmethoderror。编译的类版本不同。
访问Ceph
,与AWS相关的JARS aws-java-sdk-bundle-1.11.375.jar
和hadoop-aws-3.2.0.jar
$HADOOP_HOME/share/hadoop/tools/lib
下实际使用。我在下面进行了操作:
1,将这两个罐子复制到$SPARK_HOME/jars
2,修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
以添加下面的语句:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/tools/lib/*
通过在上面的步骤中,我可以启动HDFS访问CEPH,例如,我可以使用hdfs dfs -ls
在Ceph Bucket下列出文件夹。它证明了与AWS相关的罐子的工作正常。(按照我的理解(。
但是,当我调用Spark时,为什么关于AWS S3A投掷的例外?
所有的hadoop-* jar需要在版本上100%匹配,否则您可以看到这样的堆栈痕迹。
有关更多信息,请重读