Amazon ec2 Spark 1.3.1:无法从S3存储桶中读取文件,org/jets3t/service/ServiceException
我在AWSEC2虚拟机(Ubuntu14.04)上,愿意使用S3文件中的Spark on RDD做一些基础工作。成功运行此脏命令时(暂时不使用Amazon ec2 Spark 1.3.1:无法从S3存储桶中读取文件,org/jets3t/service/ServiceException,amazon-ec2,amazon-s3,apache-spark,hadoop2,Amazon Ec2,Amazon S3,Apache Spark,Hadoop2,我在AWSEC2虚拟机(Ubuntu14.04)上,愿意使用S3文件中的Spark on RDD做一些基础工作。成功运行此脏命令时(暂时不使用sparkContext.hadoopConfiguration) 我以前 定义了一个AWS IAM用户,该用户具有相应的AWS\u访问\u密钥\u ID和AWS\u机密\u访问\u密钥 在.bashrc中添加了两个键的导出,作为env变量 内置Spark 1.3.1,带有Spark\u HADOOP\u版本=2.6.0-cdh5.4.1 sbt/sbt
sparkContext.hadoopConfiguration
)
我以前
- 定义了一个AWS IAM用户,该用户具有相应的AWS\u访问\u密钥\u ID和AWS\u机密\u访问\u密钥
- 在.bashrc中添加了两个键的
,作为env变量导出
- 内置Spark 1.3.1,带有
Spark\u HADOOP\u版本=2.6.0-cdh5.4.1 sbt/sbt组件
- 安装并运行hadoop2.6-cdh5.4.1(伪分布式)
文本文件(“s3n/…”
的语法有关?我尝试过其他方法,包括s3://
,但没有成功
谢谢您需要在类路径中包含hadoop mapreduce客户端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
- 将Jets3t jar包含到类路径中。添加与当前设置兼容的正确版本。您需要将ServiceException添加到类路径中。我也遇到了同样的问题。尽管它发生在使用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
之后解决了这个问题,在找到jar的位置后,我运行了这个命令/spark-1.3.1/bin/spark-shell-classpath/usr/local/hadoop/share/hadoop/mapreduce/*
,但在运行distFile.count()时仍然会得到完全相同的错误
尝试将这些罐子放在Spark的lib文件夹中。事实上,我在Spark的lib_managed/jars文件夹中找到了罐子,所以我运行了/Spark-1.3.1/bin/Spark-shell-classpath Spark-1.3.1/lib_managed/jars/*
,但不幸的是仍然得到了相同的jets3t错误:,原因是:java.lang.ClassNotFoundException:org.jets3t.service.S3ServiceException
我还使用了命令spark shell--jars$(echo/home/ubuntu/spark-1.3.1/lib_managed/jars/*.jar | tr'',')
下面的线程“spark shell:如何定义jar加载顺序”,得到了相同的错误。我还为我的S3文件授予了打开/上传权限,以防万一。这很有帮助!谢谢你能解释一下怎么做吗?我正在运行一个jupyter笔记本,它给出了相同的错误。您能告诉我在哪里可以找到build.sbt吗?
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)
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)