【问题标题】:How to setup PySpark to locally read data from S3 using Hadoop?如何设置 PySpark 使用 Hadoop 从 S3 本地读取数据?
【发布时间】: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 是关于s3as3ns3 的使用,其中一个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


【解决方案1】:

关于 EMR 的 AWS 文档。您的本地系统不是 EMR,因此请完全忽略它。

使用 ASF 开发的 s3a 连接器并查看 hadoop docs on how to use it,而不是来自过期堆栈溢出帖子的示例。 {IE。如果医生说的内容与 4 岁的孩子相矛盾。帖子说,与文档一起去。甚至是来源)

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2015-06-16
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多