Spark 1.3.1:无法从S3存储桶中读取文件,org / jets3t / service / ServiceException

时间:2015-05-23 12:56:23

标签: amazon-ec2 amazon-s3 apache-spark hadoop2

我在AWS EC2 VM(Ubuntu 14.04)上,愿意从我的S3文件中使用Spark on RDDs做一些基础知识。在成功运行此脏命令时(暂时不使用sparkContext.hadoopConfiguration

scala> val distFile = sc.textFile("s3n://< AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@bucketname/folder1/folder2/file.csv")

运行distFile.count()

时出现以下错误
java.lang.NoClassDefFoundError: org/jets3t/service/ServiceException
         at org.apache.hadoop.fs.s3native.NativeS3FileSystem.createDefaultStore(NativeS3FileSystem.java:334)
         at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:324)
         at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2596)
...
...
Caused by: java.lang.ClassNotFoundException: org.jets3t.service.ServiceException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

我以前

  • 使用相应的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
  • 定义了AWS IAM用户
  • 将两个键的export添加为.bashrc
  • 中的env变量
  • 使用SPARK_HADOOP_VERSION=2.6.0-cdh5.4.1 sbt/sbt assembly
  • 构建Spark 1.3.1
  • 安装并运行hadoop 2.6-cdh5.4.1 (伪分发)

是否与textFile("s3n// ...")的语法有关?我尝试了其他人,包括s3://没有成功......

谢谢

3 个答案:

答案 0 :(得分:1)

将Jets3t jar包含到您的类路径中。使用当前设置添加适当的兼容版本。您需要将ServiceException添加到类路径中。

答案 1 :(得分:0)

您需要在CLASSPATH中包含hadoop-mapreduce-client jar。就我而言,我使用这些依赖项进行了自己的发布。

我将以下文件放在lib文件夹中:

  • Hadoop的MapReduce的客户端 - jobclient-2.6.0.jar
  • Hadoop的MapReduce的客户端 - HS-插件-2.6.0.jar
  • Hadoop的MapReduce的客户洗牌-2.6.0.jar
  • Hadoop的MapReduce的客户端 - jobclient-2.6.0-tests.jar
  • Hadoop的MapReduce的客户端 - 共2.6.0.jar
  • Hadoop的MapReduce的客户端应用程序内-2.6.0.jar
  • Hadoop的MapReduce的客户端 - HS-2.6.0.jar
  • Hadoop的MapReduce的客户端 - 芯 - 2.6.0.jar

答案 2 :(得分:0)

我遇到了同样的问题。尽管它发生在带有hadoop v2.7.2环境的spark v2.1.0,但是我把它留在这里是因为它会是同样的原因。这就是我所拥有的。

A needed class was not found. This could be due to an error in your runpath. Missing class: org/jets3t/service/ServiceException
java.lang.NoClassDefFoundError: org/jets3t/service/ServiceException
at      org.apache.hadoop.fs.s3native.NativeS3FileSystem.createDefaultStore(NativeS3FileSystem.java:342)
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:332)
at
...
...
 Caused by: java.lang.ClassNotFoundException: org.jets3t.service.ServiceException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

这是因为类路径获得net.java.dev.jets3t:jets3t依赖项的较低版本而不是org.apache.hadoop:hadoop-aws所需的版本。

我在build.sbt

中添加net.java.dev.jets3t:jets3t:0.9.0后解决了这个问题