我们将spark 1.6.1与mesos一起使用,并且我们从spark那里得到了很多关于s3的问题。我把答案归功于cfeduke。我做的一个小小的改变是在spark-defaults.conf文件中的spark.jar配置中添加maven坐标。我试过hadoop-aws:2.7.2 but 仍然有很多错误,所以我们回到2.7.1。以下是spark-defaults.conf中为我们所做的更改:
# make sure jars are added to CLASSPATH
spark.yarn.jars=file://{spark/home/dir}/jars/*.jar,file://{hadoop/install/dir}/share/hadoop/tools/lib/*.jar
spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key={s3a.access.key}
spark.hadoop.fs.s3a.secret.key={s3a.secret.key}
# you can set above 3 properties in hadoop level `core-site.xml` as well by removing spark prefix.
10条答案
按热度按时间vojdkbi01#
正如你所说,Hadoop2.6不支持s3a,最新的spark版本1.6.1也不支持Hadoop2.7,但是spark 2.0绝对没有Hadoop2.7和s3a的问题。
对于spark1.6.x,我们做了一些肮脏的黑客,使用emr的s3驱动程序。。。你可以看看这个医生:https://github.com/zalando/spark-appliance#emrfs-支持
如果您仍然想尝试在spark 1.6.x中使用s3a,请参考以下答案:https://stackoverflow.com/a/37487407/5630352
ldioqlga2#
还可以使用将s3a依赖项添加到类路径
spark-defaults.conf
.例子:
或者只是:
只需确保将您的aws sdk版本与hadoop版本匹配即可。有关这方面的更多信息,请查看以下答案:无法使用spark 2.2访问s3数据
gpfsuwkq3#
亲身体验了s3a和s3n之间的差异—在s3a上传输7.9gb的数据大约需要7分钟,而在s3n上传输7.9gb的数据需要73分钟[us-east-1到us-west-1不幸的是,在这两种情况下;红移和lambda在这个时候是us-east-1]这是一个非常重要的一块堆栈得到正确的,值得沮丧。
以下是截至2015年12月的关键部分:
您的spark群集将需要hadoop 2.x或更高版本。如果您使用了sparkec2安装脚本,并且可能没有使用它,那么使用1.0以外的东西的开关是指定
--hadoop-major-version 2
(在撰写本文时使用cdh 4.2)。您将需要为最晚2.7.1(稳定版)的hadoop版本提供一个最新的aws java sdk库(在2014年作为1.7.4版构建):aws java sdk 1.7.4。据我所知,在1.10.8的特定awssdkjar中使用这个并没有破坏任何东西。
类路径上还需要hadoopaws2.7.1jar。这个jar包含类
org.apache.hadoop.fs.s3a.S3AFileSystem
.在
spark.properties
您可能需要如下设置:spark.hadoop.fs.s3a.access.key=accesskey
spark.hadoop.fs.s3a.secret.key=秘钥
我已经在我写的一篇文章中更详细地描述了这个列表。此外,我已经涵盖了所有的例外情况,我击中了一路,我认为是什么原因,每一个以及如何解决他们。
dw1jzc5e4#
使用与hadoop 2.6一起预构建的spark 1.4.1,通过将hadoop 2.7.1发行版中的hadoop aws和aws java sdk jar文件(位于hadoop 2.7.1的$hadoop\u home/share/hadoop/tools/lib下)添加到我的$spark\u home/conf/spark-env.sh文件中的spark\u classpath环境变量中,我可以让s3a://在部署到spark独立集群时工作。
zengzsys5#
我使用spark1.4.1和hadoop2.6预先构建的二进制文件来运行它,确保您将两者都设置为
spark.driver.extraClassPath
以及spark.executor.extraClassPath
如果在集群上运行,请指向两个jar(hadoopaws和awsjavasdk),确保执行者可以访问集群上的jar文件。yrefmtwq6#
以下是截至2016年10月在spark summit eu:apache spark和object stores上的详细信息。
重点
由于数据损坏的风险/经验,直接输出提交器已从spark 2.0中消失。
fileoutputcommitter上有一些设置可以减少重命名,但不能消除它们
我和一些同事一起做了一个o(1)提交者,依靠ApacheDynamo来提供我们需要的一致性。
要使用s3a,请正确设置类路径。
使用hadoop2.7.z;2.6.x有一些问题,hadoop-11571解决了这些问题。
spark-7481下有一个pr,把所有东西都放到你自己打造的spark发行版中。否则,请提供给二进制文件的人来做这项工作。
hadoop2.8将添加hadoop-11694的主要性能改进。
植入式广告:hdp2.5包含hadoop-11694的读性能端;spark和s3文档可能会引起人们的兴趣,尤其是调优选项。
yrdbyhpb7#
我们将spark 1.6.1与mesos一起使用,并且我们从spark那里得到了很多关于s3的问题。我把答案归功于cfeduke。我做的一个小小的改变是在spark-defaults.conf文件中的spark.jar配置中添加maven坐标。我试过hadoop-aws:2.7.2 but 仍然有很多错误,所以我们回到2.7.1。以下是spark-defaults.conf中为我们所做的更改:
谢谢你抽出时间来写你的文章。这很有帮助。
nukf8bse8#
以下是pyspark的解决方案(可能使用代理):
fxnxkyjh9#
我使用的是spark版本2.3,当我使用spark保存数据集时:
它工作得很好,并将我的数据保存到s3中。
yduiuuwa10#
我写这个答案是为了在hadoop2.7.3上使用spark2.0.1中的s3a访问文件
复制aws jars(
hadoop-aws-2.7.3.jar
以及aws-java-sdk-1.7.4.jar
)默认情况下,hadoop附带了提示:如果jar的位置不确定?以特权用户身份运行find命令会有所帮助;命令可以是
进入包含所有spark jar的spark类路径
提示:我们不能直接指出位置(它必须在属性文件中),因为我想为发行版和linux风格提供一个通用的答案。spark类路径可以通过下面的find命令识别
在spark-defaults.conf中
提示:(主要放在
/etc/spark/conf/spark-defaults.conf
)包括jar(
aws-java-sdk
以及hadoop-aws
)在--driver-class-path
如果需要的话。注:
在运行
find
阻止错误的命令权限被拒绝