我的传奇还在继续-
简而言之,我正在尝试为spark-aim创建一个测试堆栈,即从s3存储桶中读取一个文件,然后将其写入另一个存储桶。windows环境。
我在尝试访问s3或s3n时多次遇到错误,因为抛出了classnotfoundexception。这些类作为s3和s3n.impl添加到core-site.xml中
我将hadoop/share/tools/lib添加到类路径中,但没有效果,然后添加了 aws-java-jdk
以及 hadoop-aws
jars到share/hadoop/common文件夹,现在我可以在命令行上使用haddop列出bucket的内容。 hadoop fs -ls "s3n://bucket"
给我看内容,这是个好消息:)
在我看来,hadoop配置应该由spark来选择,所以解决一个应该解决另一个,但是当我运行sparkshell并尝试将一个文件保存到s3时,我得到了通常的classnotfoundexception,如下所示。
我对这个还很陌生,不确定自己是否错过了一些明显的东西,希望有人能帮我解开谜团?非常感谢您的帮助,谢谢。
例外情况:
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3native.NativeS3FileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
我的核心站点.xml(我认为现在是正确的,因为hadoop可以访问s3):
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
<description>The FileSystem for s3n: (Native S3) uris.</description>
</property>
最后是hadoop-env.cmd,显示类路径(看起来被忽略了):
set HADOOP_CONF_DIR=C:\Spark\hadoop\etc\hadoop
@rem ##added as s3 filesystem not found.http://stackoverflow.com/questions/28029134/how-can-i-access-s3-s3n-from-a-local-hadoop-2-6-installation
set HADOOP_USER_CLASSPATH_FIRST=true
set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%:%HADOOP_HOME%\share\hadoop\tools\lib\*
@rem Extra Java CLASSPATH elements. Automatically insert capacity-scheduler.
if exist %HADOOP_HOME%\contrib\capacity-scheduler (
if not defined HADOOP_CLASSPATH (
set HADOOP_CLASSPATH=%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
) else (
set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
)
)
编辑:spark-defaults.conf
spark.driver.extraClassPath=C:\Spark\hadoop\share\hadoop\common\lib\hadoop-aws-2.7.1.jar:C:\Spark\hadoop\share\hadoop\common\lib\aws-java-sdk-1.7.4.jar
spark.executor.extraClassPath=C:\Spark\hadoop\share\hadoop\common\lib\hadoop-aws-2.7.1.jar:C:\Spark\hadoop\share\hadoop\common\lib\aws-java-sdk-1.7.4.jar
1条答案
按热度按时间uemypmqf1#
你需要传递一些参数给你的Spark壳。试试这个旗子
--packages org.apache.hadoop:hadoop-aws:2.7.2
.