我正在使用以下命令创建我的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)
答案 0 :(得分:0)
找不到org.apache.hadoop.fs.StreamCapabilities
的依存关系。使用
hadoop-common-3.1.jar
答案 1 :(得分:0)
当您尝试混合hadoop- * JAR时,您的堆栈跟踪便会发生。你不能那样做。您要做的就是移动堆栈跟踪。
中对此进行了介绍ps:这些不是s3a登录详细信息的属性名称。阅读该hadoop文档