我有端点服务器,这是工作良好的s3a文件系统在Spark现在我想支持 s3n:// 以及 s3:// 有人有什么建议吗?
s3n://
s3://
i86rm4rw1#
问:sparks3n支持的端点和s3a类似吗?回答:是的。下面是您需要在配置中提供的类,这些类来自 hadoop-aws.jar .
hadoop-aws.jar
org.apache.hadoop.fs.s3native.NativeS3FileSystem, org.apache.hadoop.fs.s3.S3FileSystem
声明方式:在core-site.xml中
<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> </property>
或者你可以像下面那样编程设置它们。。编程方式:例子:
spark.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "AccessKey") spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "SecretKey")
s3也是如此。hadoop-aws.jar有这些类,所以您需要为spark提交作业提供jar,使用。。。
--jars /usr/hadoop/hadoop-aws.jar
进一步阅读这里
2mbi3lxu2#
我在spark中找到了以下属性,可以为s3n和s3设置endpoint,这些属性适用于spark.hadoop.fs.s3.endpoint=http://endpoint_host:端口spark.hadoop.fs.s3n.endpoint=http://endpoint_host:端口
mkshixfv3#
没有人需要为x的任何值设置fs.s3x.impl。它是在hadoop common的core-default.xml文件中预定义的。“你必须声明”这条规则只是一些从未尝试过不同事物的人流传下来的迷信。在hadoop-2.7发布时,s3n已经过时了(通常是spark中捆绑的版本),自从hadoop-2.6发布后,就没有任何维护了。它已经从最新版本中删除,因为每个人都应该已经迁移了。它有基本的局限性,包括残暴地处理 seek() 对大文件的操作(底层库现在在每次向后查找时读取到文件的末尾)。这会降低列式orc/Parquet数据的性能。不支持v4身份验证协议,因此不支持aws frankfurt、seoul、london&c。不支持加密不支持恢复瞬时故障不支持大文件的并行和增量上传。s3a在输出仍在生成时一次将文件写入一个块由于这些问题和它过时的事实,所有与asf jira上的s3n相关的bug都被关闭为wontfix。从s3n开始,转到s3a。你的生活会更好。要知道,当您使用s3a时,aws库的版本和所有hadoop-*jar必须是同步的。hadoop-*jar依赖于彼此的同步,而aws-*jar随着时间的推移变得足够脆弱,因此hadoop需要在每次升级时进行认真的重新测试,经常会更改api,针对aws sdk团队的bug等等。混合这些东西只会创建不寻常的堆栈跟踪,这些跟踪被关闭为无效:“那就不要这样做”。现在,如果你真的想测试s3n支持,查看hadoop源代码树以获取您希望spark运行的hadoop版本按照测试说明针对您的端点测试s3a和s3n。尤其是针对非awss3服务的测试位。为了获得最佳的s3a测试,请查看hadoop trunk并运行这些测试。如前所述,s3n的问题不会得到解决。你的家庭作业。也许是s3a的,但是你必须证明这是s3a库本身的一个错误。
seek()
3条答案
按热度按时间i86rm4rw1#
问:sparks3n支持的端点和s3a类似吗?
回答:是的。
下面是您需要在配置中提供的类,这些类来自
hadoop-aws.jar
.声明方式:
在core-site.xml中
或者你可以像下面那样编程设置它们。。
编程方式:
例子:
s3也是如此。
hadoop-aws.jar有这些类,所以您需要为spark提交作业提供jar,使用。。。
进一步阅读这里
2mbi3lxu2#
我在spark中找到了以下属性,可以为s3n和s3设置endpoint,这些属性适用于spark.hadoop.fs.s3.endpoint=http://endpoint_host:端口spark.hadoop.fs.s3n.endpoint=http://endpoint_host:端口
mkshixfv3#
没有人需要为x的任何值设置fs.s3x.impl。它是在hadoop common的core-default.xml文件中预定义的。“你必须声明”这条规则只是一些从未尝试过不同事物的人流传下来的迷信。
在hadoop-2.7发布时,s3n已经过时了(通常是spark中捆绑的版本),自从hadoop-2.6发布后,就没有任何维护了。它已经从最新版本中删除,因为每个人都应该已经迁移了。
它有基本的局限性,包括
残暴地处理
seek()
对大文件的操作(底层库现在在每次向后查找时读取到文件的末尾)。这会降低列式orc/Parquet数据的性能。不支持v4身份验证协议,因此不支持aws frankfurt、seoul、london&c。
不支持加密
不支持恢复瞬时故障
不支持大文件的并行和增量上传。s3a在输出仍在生成时一次将文件写入一个块
由于这些问题和它过时的事实,所有与asf jira上的s3n相关的bug都被关闭为wontfix。
从s3n开始,转到s3a。你的生活会更好。
要知道,当您使用s3a时,aws库的版本和所有hadoop-*jar必须是同步的。hadoop-*jar依赖于彼此的同步,而aws-*jar随着时间的推移变得足够脆弱,因此hadoop需要在每次升级时进行认真的重新测试,经常会更改api,针对aws sdk团队的bug等等。混合这些东西只会创建不寻常的堆栈跟踪,这些跟踪被关闭为无效:“那就不要这样做”。
现在,如果你真的想测试s3n支持,
查看hadoop源代码树以获取您希望spark运行的hadoop版本
按照测试说明针对您的端点测试s3a和s3n。
尤其是针对非awss3服务的测试位。
为了获得最佳的s3a测试,请查看hadoop trunk并运行这些测试。
如前所述,s3n的问题不会得到解决。你的家庭作业。也许是s3a的,但是你必须证明这是s3a库本身的一个错误。