【发布时间】:2022-02-01 21:15:52
【问题描述】:
我关注了this blog post,它建议使用:
from pyspark import SparkConf
from pyspark.sql import SparkSession
conf = SparkConf()
conf.set('spark.jars.packages', 'org.apache.hadoop:hadoop-aws:3.2.0')
conf.set('spark.hadoop.fs.s3a.aws.credentials.provider', 'org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider')
conf.set('spark.hadoop.fs.s3a.access.key', <access_key>)
conf.set('spark.hadoop.fs.s3a.secret.key', <secret_key>)
conf.set('spark.hadoop.fs.s3a.session.token', <token>)
spark = SparkSession.builder.config(conf=conf).getOrCreate()
我用它来配置 PySpark,它可以直接从我的本地机器从 S3 获取数据。
但是我发现这个question 是关于s3a、s3n 或s3 的使用,其中一个recent answers 表示建议不要使用s3a。我还发现来自 AWS 的 this guide 也不鼓励使用 s3a:
以前,Amazon EMR 使用 s3n 和 s3a 文件系统。虽然两者仍然有效,但我们建议您使用 s3 URI 方案以获得最佳性能、安全性和可靠性。
所以我决定尝试寻找如何在 PySpark 和 Hadoop 中实现 s3 的使用,但我发现 Hadoop 中的 this guide 提到它仅支持 s3a 官方:
还有其他 Hadoop 连接器连接到 S3。只有 S3A 由 Hadoop 项目本身主动维护。
博客文章中提到的方法有效,但它是这种情况的最佳选择吗?还有其他方法可以配置吗?
从本地机器访问 S3 的最佳方法是什么?
【问题讨论】:
-
在本地运行不使用 EMR,因此请使用
s3a,正如 Hadoop-AWS 文档所说。或者,只需使用boto3 -
是否可以将 boto3 与 pyspark 一起使用?
-
我不明白为什么不这样做,但不清楚您需要对数据做什么。简单地从 S3 读取数据不需要 Spark
-
查看您指出的负面帖子,他的批评对于 hadoop 2.7 版本是有效的,但因为那是 2016 年,现在已经过时五年了。每个人都在使用 s3a 连接器,您必须付出巨大的努力才能超越
-
顺便说一句,如果你设置你的 aws 会话环境变量,spark 会自动选择它们。如果可以避免的话,永远不要把秘密放在代码中。
标签: amazon-web-services apache-spark amazon-s3 hadoop pyspark