spark使用s3a:java.lang.nosuchmethoderror

ivqmmu1c  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(634)

我正在做一些关于spark\u与hadoop2.7(2.4.3)、hadoop(3.2.0)和ceph的结合。当我尝试使用spark访问ceph时(例如,start) spark-sql 在shell上),下面这样的异常显示:

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相关jar aws-java-sdk-bundle-1.11.375.jar 以及 hadoop-aws-3.2.0.jar 低于 $HADOOP_HOME/share/hadoop/tools/lib 实际使用的。我做了以下操作:
1,把那两个jar复制到 $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相关的jar工作正常(据我所知)。
但是为什么当我调用spark时抛出异常呢?

i2loujxw

i2loujxw1#

所有hadoop-*jar都需要在版本上100%匹配,否则就会看到这样的堆栈跟踪。
更多信息请重读

相关问题