我有端点服务器,对于Spark中的S3A文件系统工作正常,现在我想支持s3n://
和s3://
有人有任何建议吗?
-
没有人需要设置X的任何值的fs.s3x.impl。它在hadoop-common中的core-default.xml文件中进行了预定。此规则"您必须声明"只是从未尝试过任何不同的人所传承的一些迷信。
-
s3n到达了Hadoop-2.7发货时已经过时了(通常是在Spark捆绑中的版本),自Hadoop-2.6发布以来,没有任何维护。它已从最近的版本中删除,因为每个人都应该迁移。
-
它具有基本限制,包括
- 在大文件上对
seek()
操作的残酷处理(基础库现在读取到每个向后搜索文件的末尾。 - 不支持V4身份验证协议,因此不支持AWS法兰克福,首尔,伦敦& c。
- 不支持加密
- 不支持恢复瞬态失败
- 不支持大型文件的并行和增量上传。S3A在仍会生成输出时一次写文件块
- 在大文件上对
由于这些问题及其过时的事实,因此与ASF JIRA上S3N有关的所有错误都以Wontfix的身份关闭。
刚从s3n迈出,移至S3A。你的生活会更好。
确实知道,当您使用S3A时,AWS库的版本和所有Hadoop-* jar必须同步。hadoop-*罐子彼此依靠是同步的,并且随着时间的流逝,AWS-*罐子足够脆,以至于Hadoop需要在每次升级时进行严重的重新测试,通常会更改API,对AWS SDK团队提出的错误等等。只会创建不寻常的堆栈轨迹,这些堆栈迹线被无效地封闭:"不要那样做"。
现在,如果您真的想测试S3N支持,
- 查看Hadoop源树的Hadoop版本,您希望Spark可以使用 运行
- 遵循测试指令进行测试S3A&s3n针对您的终点。
- 尤其是针对非AWS S3服务进行测试的位。
- 有关最佳S3A测试,请查看Hadoop Trunk并运行这些测试。
如前所述,S3N的问题不会解决。你的家庭作业。也许是S3A,但您必须证明它本身是S3A库本身的错误。
问题:Spark S3N支持端点是否类似于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://similary也同样。
hadoop-aws.jar有这些课程,因此您需要使用...
将罐子提供给Spark-Submit的工作--jars /usr/hadoop/hadoop-aws.jar
在这里进一步阅读
我在Spark中找到了以下属性,以设置S3N和S3的端点,这些对我有效spark.hadoop.fs.s3.endpoint = http://endpoint_host:端口spark.hadoop.fs.s3n.endpoint = http://endpoint_host:port