【问题标题】:running interactive sql queries over millions of parquet files对数百万个镶木地板文件运行交互式 sql 查询
【发布时间】:2018-06-29 06:56:25
【问题描述】:

我正在编写数百万个流式镶木地板文件。我想支持运行临时交互式查询以用于调试和分析目的(如果我也可以运行流式查询以对关键指标进行一些实时监控,则可以获得额外的好处)。 什么是支持这一点的可扩展解决方案。 我观察到的两种方式是在数百万个 parquet 文件上交互式运行 spark sql(对 spark 生态系统不太熟悉,但这是否意味着为每个 sql 用户提交运行 spark 作业,还是我需要运行一些流式作业并以某种方式提交查询)其次是在 parquet 上使用 presto sql 引擎(不完全确定 presto 如何摄取新传入的 parquet 文件)。 任何一种方法的任何建议或利弊。考虑到我每天产生 > ~10Tb 数据的任何更好的解决方案。

【问题讨论】:

  • 您应该查看SnappyData,因为它可以为您提供提交多个 Spark SQL 作业所需的并发性,并支持实时监控的流式查询。在使用 SnappyData 时,您还可以继续使用 Spark,因为它是深度嵌入的。

标签: apache-spark apache-spark-sql spark-dataframe spark-streaming presto


【解决方案1】:

让我来谈谈你的用例:

支持运行临时交互式查询以进行调试和分析

如果您关心最小化查询延迟并愿意投资购买许多具有大量内存的机器,我建议您构建一个 presto 集群。

原因:Presto 将完全在内存中运行而无需接触磁盘(大多数情况下)

Spark 集群也可以完成这项工作,但是速度不如 Presto。 Spark 相对于 presto 的优势在于它的容错能力和在内存不足的情况下故障转移到磁盘的能力,这对你来说可能很重要,因为你有太多的数据。

运行流式查询以实时监控关键指标

只要您有基本查询,就可以在 Presto 之上构建仪表板,每 x 分钟运行一次这些查询。

如果实时监控很重要,那么拥有大量处理可能是研究 Spark 流的好理由。

如果不是,那么您可以构建一个 ETL(使用 Spark)来计算您的指标,将数据存储为一个新的 Hive 表,然后再次公开以通过 Presto/SparkSQL 进行查询。

presto 如何摄取新传入的 parquet 文件?

我现在了解您的架构,但无论如何,您需要为 Presto 提供 Hive 连接(准确地说是 Hive Metastore)。

Hive 为 Presto 提供了一些附加到您提取数据的目录的架构。 Presto 默认动态查看新数据。顺便说一下,Spark 也不例外。

Presto 与数据摄取无关。它只有在数据存在后才开始工作。

【讨论】:

  • 我的数据主要存储在 gcs 上。并由 spark etl 管道连续生成为 parquet 文件。
  • 你能解释一下为什么 presto 需要 hive 吗?我的印象是它们都有相似的目的?
  • Presto 只需要 Hive Metastore 进行模式存储。这与使用 Spark 和 Hive 相同。您只使用架构服务。
  • @user179156 一切都清楚了吗?如果您觉得有帮助,请采纳答案:)
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2019-10-02
  • 2019-09-23
  • 2018-06-28
  • 1970-01-01
  • 2017-08-04
  • 2018-07-01
  • 2015-06-29
相关资源
最近更新 更多