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

guz*_*u92 5 amazon-s3 amazon-ec2 apache-spark hadoop2

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

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

然后我在运行时收到以下错误 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)
Run Code Online (Sandbox Code Playgroud)

我以前有

  • 使用相应的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 定义了一个 AWS IAM 用户
  • export在 .bashrc 中添加了两个键作为环境变量
  • 内置 Spark 1.3.1 SPARK_HADOOP_VERSION=2.6.0-cdh5.4.1 sbt/sbt assembly
  • 安装并运行 hadoop 2.6-cdh5.4.1(伪分布式)

它与 的语法有关textFile("s3n// ...")吗?我试过其他人,包括s3://没有成功......

谢谢

小智 0

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

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

  • hadoop-mapreduce-client-jobclient-2.6.0.jar
  • hadoop-mapreduce-client-hs-plugins-2.6.0.jar
  • hadoop-mapreduce-client-shuffle-2.6.0.jar
  • hadoop-mapreduce-client-jobclient-2.6.0-tests.jar
  • hadoop-mapreduce-client-common-2.6.0.jar
  • hadoop-mapreduce-client-app-2.6.0.jar
  • hadoop-mapreduce-client-hs-2.6.0.jar
  • hadoop-mapreduce-client-core-2.6.0.jar