我有一个端点服务器,它现在可以在Spark中很好地适用于s3a文件系统,我想支持(Get-Location -PSProvider FileSystem).ProviderPath + '/<fileInCurrentDir>'
和HKCU:\Console
有人建议实现这一目标吗?
答案 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)
没有人需要为任何X值设置fs.s3X.impl。它在hadoop-common中的core-default.xml文件中预定义。这条“必须声明”的规则只是那些从未尝试过其他方法的人所遗忘的迷信。
S3n在hadoop-2.7发行时已经过时(通常是Spark捆绑的版本),并且自hadoop-2.6发行以来就没有任何维护。它已从最新版本中删除,因为每个人都已迁移。
它具有基本限制,包括
seek()
操作进行的残酷处理(现在,基础库在每次向后查找时都读取到文件末尾。这会破坏ORC / Parquet列数据的性能。由于这些问题和它已过时的事实,所有与ASF JIRA上s3n相关的bug都被关闭为WONTFIX。
仅从s3n移至s3a。你的生活会更好。
要知道在使用s3a时,AWS库的版本和所有hadoop- * JAR必须同步。 hadoop- * JAR彼此依赖,并且aws- * JAR随着时间的推移变得足够脆弱,以至于hadoop每次升级都需要进行认真的重新测试,经常更改API,针对AWS开发工具包SDK团队提交的错误等。只会创建异常的堆栈跟踪,并以INVALID(无效)关闭:“那就不要这样做”。
现在,如果您真的想测试s3n支持,
如前所述,s3n的问题不会得到解决。你的家庭作业。也许是S3A的,但是您必须证明这是s3a库本身的错误。