[英]Apache Spark hangs after writing parquet file to S3 bucket
[英]Would S3 Select speed up Spark analyses on Parquet files?
您可以将S3 Select 与 Amazon EMR 上的 Spark和Databricks 一起使用,但仅限于 CSV 和 JSON 文件。 我猜 S3 Select 没有为柱状文件格式提供,因为它不会有太大帮助。
假设我们有一个包含first_name
、 last_name
和country
列的人员的数据湖。
如果数据存储为 CSV 文件并且您运行类似peopleDF.select("first_name").distinct().count()
的查询,则 S3 会将所有列的所有数据传输到 ec2 集群以运行计算. 这真的很低效,因为我们不需要所有的last_name
和country
数据来运行这个查询。
如果数据存储为 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 支持 Parquet 文件格式。 您能否确认分栏文件格式提供了 S3 Select 提供的主要优化?
这是个有趣的问题。 我没有任何实数,尽管我已经在 hadoop-aws 模块中完成了 S3 选择绑定代码。 Amazon EMR 和数据块一样具有一些价值。
对于 CSV IO 是的,S3 Select 将在对源数据进行积极过滤的情况下加速,例如许多 GB 的数据,但返回的数据不多。 为什么? 尽管读取速度较慢,但您可以节省 VM 的有限带宽。
但是对于 Parquet,工作人员将一个大文件拆分成多个部分并安排它们之间的工作(假设使用像 snappy 这样的可拆分压缩格式),因此 > 1 个工作人员可以处理同一个文件。 而且他们只读取了一小部分数据(==带宽收益较少),但他们确实在该文件中四处寻找(==需要优化寻找策略,否则中止和重新打开 HTTP 连接的成本)
如果集群中有足够的容量并且您已经调整了 s3 客户端设置(对于 s3a 这意味着:查找策略、线程池大小、http 池大小),我不相信 S3 集群中的 Parquet 读取可以击败 spark 集群也是为了表现。
就像我说的:我不确定。 欢迎提供数字。
在 parquet [1] 上遇到了用于 s3 select 的这个 spark 包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.