Spark S3N支持端点是否类似于S3A

时间:2019-03-12 17:10:25

标签: apache-spark hadoop amazon-s3 amazon-emr

我有一个端点服务器,它现在可以在Spark中很好地适用于s3a文件系统,我想支持(Get-Location -PSProvider FileSystem).ProviderPath + '/<fileInCurrentDir>'HKCU:\Console

有人建议实现这一目标吗?

3 个答案:

答案 0 :(得分:0)

问题: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://相似。

hadoop-aws.jar具有这些类,因此您需要使用...将jar提供给火花提交作业。

--jars /usr/hadoop/hadoop-aws.jar

进一步阅读here

答案 1 :(得分:0)

我在spark中发现以下属性来设置s3n和s3的端点,这些对我有用 spark.hadoop.fs.s3.endpoint = http://endpoint_host:port spark.hadoop.fs.s3n.endpoint = http://endpoint_host:port

答案 2 :(得分:0)

  1. 没有人需要为任何X值设置fs.s3X.impl。它在hadoop-common中的core-default.xml文件中预定义。这条“必须声明”的规则只是那些从未尝试过其他方法的人所遗忘的迷信。

  2. S3n在hadoop-2.7发行时已经过时(通常是Spark捆绑的版本),并且自hadoop-2.6发行以来就没有任何维护。它已从最新版本中删除,因为每个人都已迁移。

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

    • 对大型文件的seek()操作进行的残酷处理(现在,基础库在每次向后查找时都读取到文件末尾。这会破坏ORC / Parquet列数据的性能。
    • 不支持v4身份验证协议,因此不支持AWS法兰克福,汉城,伦敦等。
    • 不支持加密
    • 不支持恢复瞬时故障
    • 不支持大文件的并行和增量上传。 S3A在仍在生成输出的同时一次将文件写入一个块

由于这些问题和它已过时的事实,所有与ASF JIRA上s3n相关的bug都被关闭为WONTFIX。

仅从s3n移至s3a。你的生活会更好。

要知道在使用s3a时,AWS库的版本和所有hadoop- * JAR必须同步。 hadoop- * JAR彼此依赖,并且aws- * JAR随着时间的推移变得足够脆弱,以至于hadoop每次升级都需要进行认真的重新测试,经常更改API,针对AWS开发工具包SDK团队提交的错误等。只会创建异常的堆栈跟踪,并以INVALID(无效)关闭:“那就不要这样做”。

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

  1. 签出hadoop source tree以获得您要运行Spark的hadoop版本
  2. 遵循testing instructions对端点进行s3a和s3n测试。
  3. 特别是testing against non-AWS S3 services的位。
  4. 为获得最佳的s3a测试,请检查hadoop中继并也运行这些测试。

如前所述,s3n的问题不会得到解决。你的家庭作业。也许是S3A的,但是您必须证明这是s3a库本身的错误。