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关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段