哪个是查询以 Parquet 格式存储的数据的更快(更好)工具 - Spark SQL、Athena 或 ElasticSearch?

vsd*_*ing 5 performance etl elasticsearch apache-spark amazon-athena

我目前正在构建一个 ETL 管道,该管道将数据表(约 100+ GB)输出到下游交互式仪表板,允许动态过滤数据(基于预定义和索引过滤器)。

已经瞄准了使用PySpark /星火初始ETL阶段。接下来,将汇总这些处理过的数据(简单计数、平均值等),然后在交互式仪表板中进行可视化

对于交互式查询部分,我想知道哪种工具最适合我的结构化和事务性数据(以 Parquet 格式存储)-

  1. Spark SQL(内存动态查询)
  2. AWS Athena(无服务器 SQL 查询,基于 Presto)
  3. 弹性搜索(搜索引擎)
  4. Redis(键值数据库)

如果您知道更好的选择,请随意建议替代工具。

Zer*_*odf 5

根据您提供的信息,我将做出几个假设:

  1. 您使用的是 AWS(因此可以选择Elastic SearchAthena )。因此,我将引导您查看 AWS 文档。
  2. 由于您拥有预定义和索引的过滤器,因此您拥有有序的结构化数据。

浏览列出的选项

  1. Spark SQL - 如果您已经在考虑Spark并且已经在 AWS 上,那么您可以利用 AWS Elastic Map Reduce
  2. AWS Athena(无服务器 SQL 查询,基于 Presto) - Athena 是一个强大的工具。它可以让您查询存储在 S3 上的数据,这是非常划算的。但是,在 Athena 中构建工作流程可能需要一些工作,因为您将花费大量时间来管理 S3 上的文件。从历史上看,Athena 只能生成 CSV 输出,因此它通常最适合作为大数据管道的最后阶段。但是,通过支持CTAS语句,您现在可以使用多种压缩算法以多种格式输出数据,例如 Parquet。
  3. Elastic Search(搜索引擎) - 并不是真正的查询工具,因此它可能不是该管道核心的一部分。
  4. Redis(键值数据库)-Redis 是内存中键值数据存储。它通常用于提供少量信息,供应用程序在缓存和会话管理等用例中快速使用。因此,它似乎不适合您的用例。如果您想获得 Redis 的实践经验,我建议尝试 Redis

我还会研究Amazon Redshift

如需进一步阅读,请阅读AWS 上的大数据分析选项

正如 @Damien_The_Un believer 所建议的,您自己的原型设计和基准测试是无可替代的。

  • 澄清一下,Athena 中的查询响应时间很好(假设数据分区正确)。问题是 Athena 仅支持未压缩的 CSV 文件作为输出格式。因此,如果您有类似 Query_A -> Query_B -> Query_C 的流程,则无需将数据卸载、转换和重新加载到 S3 中,就无法利用 Athena 对 Query_B 和 Query_C 的压缩数据、分区和列格式的支持。 (2认同)