这是一个老问题,我已经解决了它按照答案在这篇文章:如何从本地安装的Hadoop 2.6访问S3/S3n ?
Kamil Sindi的答案对我有用,通过在spark-shell选项中添加包:
spark-shell --packages com.amazonaws:aws-java-sdk:1.11.967,org.apache.hadoop:hadoop-aws:3.2.0
当我输入下面的命令时,它工作了。
scala> sc.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
scala> sc.textFile("s3://test/testdata.txt").foreach(println)
但是当我像下面这样添加jar时:
spark-shell --jars /tmp/hadoop-aws-3.2.0.jar , /tmp/aws-java-sdk-1.11.967.jar
抛出如下错误:
java.lang.NoClassDefFoundError: com/amazonaws/AmazonServiceException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
谁能告诉我为什么添加jar不能工作?我如何通过添加jar来解决这个问题?
解决。请使用bundle jar,它位于
$ HADOOP_HOME/分享/hadoop/工具/lib/
spark-shell——jar/data/workspace/files/hadoop-aws-3.2.0.jar,/data/workspace/files/aws-java-sdk-bundle-1.11.563.jar