是Spark S3N支撑端点类似于S3A



我有端点服务器,对于Spark中的S3A文件系统工作正常,现在我想支持s3n://s3://

有人有任何建议吗?

  1. 没有人需要设置X的任何值的fs.s3x.impl。它在hadoop-common中的core-default.xml文件中进行了预定。此规则"您必须声明"只是从未尝试过任何不同的人所传承的一些迷信。

  2. s3n到达了Hadoop-2.7发货时已经过时了(通常是在Spark捆绑中的版本),自Hadoop-2.6发布以来,没有任何维护。它已从最近的版本中删除,因为每个人都应该迁移。

  3. 它具有基本限制,包括

    • 在大文件上对seek()操作的残酷处理(基础库现在读取到每个向后搜索文件的末尾。
    • 不支持V4身份验证协议,因此不支持AWS法兰克福,首尔,伦敦& c。
    • 不支持加密
    • 不支持恢复瞬态失败
    • 不支持大型文件的并行和增量上传。S3A在仍会生成输出时一次写文件块

由于这些问题及其过时的事实,因此与ASF JIRA上S3N有关的所有错误都以Wontfix的身份关闭。

刚从s3n迈出,移至S3A。你的生活会更好。

确实知道,当您使用S3A时,AWS库的版本和所有Hadoop-* jar必须同步。hadoop-*罐子彼此依靠是同步的,并且随着时间的流逝,AWS-*罐子足够脆,以至于Hadoop需要在每次升级时进行严重的重新测试,通常会更改API,对AWS SDK团队提出的错误等等。只会创建不寻常的堆栈轨迹,这些堆栈迹线被无效地封闭:"不要那样做"。

现在,如果您真的想测试S3N支持,

  1. 查看Hadoop源树的Hadoop版本,您希望Spark可以使用
  2. 运行
  3. 遵循测试指令进行测试S3A&s3n针对您的终点。
  4. 尤其是针对非AWS S3服务进行测试的位。
  5. 有关最佳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

最新更新