spark无法从s3读取

时间:2018-08-22 06:13:38

标签: scala amazon-web-services apache-spark

我正在使用以下命令创建我的spark-shell。

spark-shell --packages org.apache.hadoop:hadoop-aws:3.1.1,com.amazonaws:aws-java-sdk-pom:1.11.392,org.wso2.orbit.joda-time:joda-time:2.9.4.wso2v1

然后我运行下面的代码来访问S3中的文件。

val accessKeyId = "myid"
val secretAccessKey = "mykey"
sc.hadoopConfiguration.set("fs.s3a.awsAccessKeyId", accessKeyId)
sc.hadoopConfiguration.set("fs.s3a.awsSecretAccessKey",secretAccessKey)
sc.hadoopConfiguration.set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
val lines = sc.textFile("s3a://bucket-name/path-to-file")

现在运行以下代码会给我以下错误。

scala> lines.count()
java.lang.NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:368)

2 个答案:

答案 0 :(得分:0)

找不到org.apache.hadoop.fs.StreamCapabilities的依存关系。使用

hadoop-common-3.1.jar

答案 1 :(得分:0)

当您尝试混合hadoop- * JAR时,您的堆栈跟踪便会发生。你不能那样做。您要做的就是移动堆栈跟踪。

the latest s3a docs

中对此进行了介绍

ps:这些不是s3a登录详细信息的属性名称。阅读该hadoop文档