【问题标题】:Would S3 Select speed up Spark analyses on Parquet files?S3 Select 会加速 Parquet 文件的 Spark 分析吗?
【发布时间】:2019-04-29 22:51:22
【问题描述】:

您可以使用 S3 Select with Spark on Amazon EMRwith Databricks,但仅适用于 CSV 和 JSON 文件。我猜 S3 Select 不提供用于列式文件格式,因为它没有太大帮助。

假设我们有一个包含first_namelast_namecountry 列的人员数据湖。

如果数据存储为 CSV 文件,并且您运行类似 peopleDF.select("first_name").distinct().count() 的查询,则 S3 会将所有列的所有数据传输到 ec2 集群以运行计算。这确实是低效的,因为我们不需要所有的 last_namecountry 数据来运行这个查询。

如果数据存储为 CSV 文件,并且您使用 S3 select 运行查询,则 S3 将仅传输 first_name 列中的数据以运行查询。

spark
  .read
  .format("s3select")
  .schema(...)
  .options(...)
  .load("s3://bucket/filename")
  .select("first_name")
  .distinct()
  .count()

如果数据存储在 Parquet 数据湖中并运行 peopleDF.select("first_name").distinct().count(),则 S3 只会将 first_name 列中的数据传输到 ec2 集群。 Parquet 是一种柱状文件格式,这是主要优点之一。

因此,根据我的理解,S3 Select 无助于加快 Parquet 数据湖的分析,因为列文件格式提供了开箱即用的 S3 Select 优化。

我不确定,因为同事确定我错了,因为S3 Select supports the Parquet file format。您能否确认列文件格式提供了 S3 Select 提供的主要优化?

【问题讨论】:

    标签: apache-spark amazon-s3 parquet


    【解决方案1】:

    这是一个有趣的问题。我没有任何实数,尽管我已经在 hadoop-aws 模块中完成了 S3 选择绑定代码。 Amazon EMR 有一些价值,databricks 也有。

    对于 CSV IO 是的,S3 Select 将加速源数据的积极过滤,例如很多 GB 的数据,但返回不多。为什么?尽管读取速度较慢,但​​您可以节省 VM 的有限带宽。

    不过,对于 Parquet,工作人员将一个大文件拆分为多个部分并在它们之间安排工作(假设使用像 snappy 这样的可拆分压缩格式),因此 > 1 个工作人员可以处理同一个文件。他们只读取一小部分数据(==带宽收益较少),但他们确实在该文件中四处寻找(==需要优化寻找策略,否则中止和重​​新打开 HTTP 连接的成本)

    如果集群中有足够的容量并且您已调整 s3 客户端设置(对于 s3a,这意味着:查找策略、线程池大小、http池大小)也用于性能。

    就像我说的:我不确定。欢迎数字。

    【讨论】:

    • 当您在 Parquet 数据湖上运行 peopleDF.select("first_name").distinct().count() 时,是否将 first_namelast_namecountry 列中的所有数据传输到 ec2 集群,或者仅传输到 ec2 集群中的数据first_name 列转移了吗?我将运行一些基准测试并报告。感谢您的帮助。
    • S3 Select API 仅支持对行进行过滤和选择。计数之类的事情是在集群中完成的。哦,关于 S3 Select 和 parquet 的另一个细节:select 的输出以 JSON 或 CSV 形式返回,因此正常的 parquet 引擎(及其谓词下推等)在这里不涉及。所以我不知道它是如何在 EMR 或 Databricks 中连接起来的。问他们....
    • 我的看法很模糊
    • 很抱歉你有这种感觉。请查看issues.apache.org/jira/browse/HADOOP-15229"Add FileSystem builder-based openFile() API to match createFile(); S3A to implementation S3 Select through this API"如果您想了解详细信息;或查看github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/… 中的代码并在github.com/apache/hadoop/tree/trunk/hadoop-tools/hadoop-aws/src/… 进行测试
    【解决方案2】:

    在 parquet [1] 上遇到了这个用于 s3 选择的 spark 包

    [1]https://github.com/minio/spark-select

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-23
      • 2017-12-02
      • 1970-01-01
      • 2018-01-12
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多