Spark SQL 会完全取代 Apache Impala 或 Apache Hive 吗?

Posted

技术标签:

【中文标题】Spark SQL 会完全取代 Apache Impala 或 Apache Hive 吗?【英文标题】:Will Spark SQL completely replace Apache Impala or Apache Hive? 【发布时间】:2016-10-25 09:37:38 【问题描述】:

我需要在我们的服务器上部署大数据集群。但是我只知道Apache Spark的知识。现在我需要知道 Spark SQL 是否可以完全替代 Apache Impala 或 Apache Hive。

我需要你的帮助。谢谢。

【问题讨论】:

【参考方案1】:

我想用实时场景来解释这个

实时生产项目:

Hive 主要用于存储数据/表和运行临时查询,如果组织每天都在增加数据并且他们使用 RDBMS 数据进行查询,那么他们可以使用 HIVE。

Impala 用于商业智能项目,通过一些前端工具(如 tableau、pentaho 等)完成报告。

Spark 主要用于分析目的,开发人员更倾向于统计,因为他们也可以使用带有 spark 的 R 语言来制作他们的初始数据帧。

所以对您的问题的回答是“否”火花不会取代蜂巢或黑斑羚。因为这三个都有自己的用例和优势,这些查询引擎的实施难易程度取决于您的 hadoop 集群设置。

这里有一些链接可以帮助您更清楚地理解:

http://db-engines.com/en/system/Hive%3BImpala%3BSpark+SQL

http://www.infoworld.com/article/3131058/analytics/big-data-face-off-spark-vs-impala-vs-hive-vs-presto.html

https://www.dezyre.com/article/impala-vs-hive-difference-between-sql-on-hadoop-components/180

【讨论】:

【参考方案2】:

没有。 Apache Spark 是用于大数据处理的快速通用引擎,内置用于流式处理、SQL、机器学习和图形处理的模块。

Impala - 用于 Apache Hadoop 的开源分布式 SQL 查询引擎。

Hive - 一种类似 SQL 的界面,用于查询存储在与 Hadoop 集成的各种数据库和文件系统中的数据。

参考:Differences between Hive and impala


Apache Spark 具有连接到各种数据源的连接器,并且它对数据进行处理。 Hive 提供了一个查询引擎,与 Spark 集成后有助于加快查询速度。

SparkSQL 可以使用 HiveMetastore 来获取存储在 HDFS 中的数据的元数据。此元数据使 SparkSQL 能够更好地优化它执行的查询。这里 Spark 是查询处理器。

参考:Databricks blog

【讨论】:

【参考方案3】:

Apache Impala 提供对数据的低延迟访问,通常与前端商业智能应用程序一起使用。

Apache Hive 更适用于查询延迟不是问题的批处理。例如基于日终属性的金融应用程序的数据处理(如收盘时的股票价值)

虽然 Apache Spark 具有从流式传输到机器学习的各种应用程序,但它也被用于批处理 ETL 处理。 Spark 2+ 中提供的基于数据集的增强型 Spark SQL API 改进了 Catalyst Query Optimizer 和 WholeStageCodeGen 形式的组件。我观察到一些 Hive 脚本在 Spark 上从 HiveQL 转换为 Scala 的执行时间提高了 50-90%。

从 HiveQL 迁移到基于数据集的 Spark API 的一些挑战:

Hive 中缺少类似 SQL 的优美语法。 数据集 API 与 Scala 语言结构的不完全集成 在某些数据集操作中缺少编译时错误报告

【讨论】:

【参考方案4】:

这是个好问题。我认为不会。尽管 Spark 比其他两个更快,但它们每个都有自己的目的和工作方式。例如,对于熟悉 Query 语言的人来说,Hive 和 Impala 会更容易使用,Spark 可以使用 Hive Metastore 进行更好的优化。所以,我认为它不会替换。

【讨论】:

以上是关于Spark SQL 会完全取代 Apache Impala 或 Apache Hive 吗?的主要内容,如果未能解决你的问题,请参考以下文章

MemSQL 取代 HDFS 与 Spark 结合,性能大幅提升

spark报错org.apache.spark.sql.catalyst.errors.package$TreeNodeException: execute, tree:

Spark SQL访问PostgreSQL

Apache Spark SQL:自动内连接?

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

Spark SQL内置函数