在数百万个镶木地板文件上运行交互式SQL查询

时间:2018-01-19 23:55:32

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

我写了数百万个流式拼花文件。我想支持运行临时交互式查询以实现调试和分析目的(如果我可以运行流式查询以实现对关键指标的实时监控,则会增加额外奖励)。 什么是可扩展的解决方案来支持这一点。 我观察到的两种方式是在数百万个镶木地板文件上交互运行spark sql(不太熟悉spark生态系统,但这是否意味着为每个sql用户提交火花作业,或者我需要运行一些流工作并以某种方式提交查询)第二个是在镶木地板上使用presto sql引擎(不完全确定presto如何摄取新的镶嵌文件)。 任何方法的任何建议或利弊。任何更好的解决方案,考虑到我有>每天产生大约10Tb的数据。

1 个答案:

答案 0 :(得分:1)

让我谈谈你的用例:

  

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

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

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

Spark Cluster也可以完成这项工作,但它不会像Presto那么快。 Spark超越presto的优点是它的容错能力以及在内存不足的情况下故障转移到磁盘的能力,这对你来说可能很重要,因为你有太多的数据。

  

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

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

如果实时监控很重要,那么进行大量处理可能是查看Spark流媒体的一个很好的理由。

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

  

presto如何摄取新的镶木地板文件?

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

Hive为Presto提供了几个附加到您提取数据的目录的模式。默认情况下,Presto会动态查看新数据。顺便说一句,Spark并没有什么不同。

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