sparks3n支持端点与s3a类似吗

afdcj2ne  于 2021-05-27  发布在  Hadoop
关注(0)|答案(3)|浏览(485)

我有端点服务器,这是工作良好的s3a文件系统在Spark现在我想支持 s3n:// 以及 s3:// 有人有什么建议吗?

i86rm4rw

i86rm4rw1#

问:sparks3n支持的端点和s3a类似吗?
回答:是的。
下面是您需要在配置中提供的类,这些类来自 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

进一步阅读这里

2mbi3lxu

2mbi3lxu2#

我在spark中找到了以下属性,可以为s3n和s3设置endpoint,这些属性适用于spark.hadoop.fs.s3.endpoint=http://endpoint_host:端口spark.hadoop.fs.s3n.endpoint=http://endpoint_host:端口

mkshixfv

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库本身的一个错误。

相关问题