`
m635674608
  • 浏览: 5028730 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hive on Spark 与Spark SQL比较

 
阅读更多

Hive on Spark 与Spark SQL比较

背景

Hive on Spark是由Cloudera发起,由Intel、MapR等公司共同参与的开源项目,其目的是把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。通过该项目,可以提高Hive查询的性能,同时为已经部署了Hive或者Spark的用户提供了更加灵活的选择,从而进一步提高Hive和Spark的普及率。

ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取、转换、加载。

Hive的两个作用:

数据仓库; 
计算引擎; 
模式: 
Hive on Spark 
利用Spark做计算引擎,用Hive SQL 对SQL语句进行封装;

Spark SQL (Spark操作Hive里的数据) 
Hive的作用:

Hive管理的数据本身就带有表结构,比如数据类型,字段名 
在spark机器学习数据处理过程中,直接读取文件的方式需要从文件转换到dataframe,这个时候最麻烦的就是Schema 
如果打通hive和spark,我们就可以直接在hive中定义好表结构,在spark中直接使用。非常省事,也不用关心hive表数据是哪种文件格式了,RCFILE,SequenceFile, TextFile等全部兼容

shark是使用了hive的sql语法解析器和优化器,修改了执行器,使之物理执行过程是跑在spark上;而sparkSQL是使用了自身的语法解析器、优化器和执行器,同时sparkSQL还扩展了接口,不单单支持hive数据的查询,可以进行多种数据源的数据查询。 
Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化); 同时还依赖Hive Metastore和Hive SerDe(用于兼容现有的各种Hive存储格式)。这一策略导致了两个问题, 第一是执行计划优化完全依赖于Hive,不方便添加新的优化策略; 二是因为MR是进程级并行,写代码的时候不是很注意线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支(至于为何相关修改没有合并到Hive主线,我也不太清楚)。 
Spark SQL解决了这两个问题。

第一,Spark SQL在Hive兼容层面仅依赖HQL parser、Hive Metastore和Hive SerDe。也就是说,从HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。执行计划生成和优化都由Catalyst负责。借助Scala的模式匹配等函数式语言特性,利用Catalyst开发执行计划优化策略比Hive要简洁得多。去年Spark summit上Catalyst的作者Michael Armbrust对Catalyst做了一个简要介绍:2013 | Spark Summit。 
第二,相对于Shark,由于进一步削减了对Hive的依赖,Spark SQL不再需要自行维护打了patch的Hive分支。Shark后续将全面采用Spark SQL作为引擎,不仅仅是查询优化方面。 
Spark是新一代的计算引擎,相对于传统的MapReduce。而SQL基本上是每个类似引擎都绕不过必须实现的东西,毕竟数据分析的用户有很大一半并非CS背景,不可能指望他们写程序的。 
SparkSQL和Hive On Spark都是在Spark上实现SQL的解决方案。Spark早先有Shark项目用来实现SQL层,不过后来推翻重做了,就变成了SparkSQL。这是Spark官方Databricks的项目,Spark项目本身主推的SQL实现。

Hive On Spark比SparkSQL稍晚。Hive原本是没有很好支持MapReduce之外的引擎的,而Hive On Tez项目让Hive得以支持和Spark近似的Planning结构(非MapReduce的DAG)。所以在此基础上,Cloudera主导启动了Hive On Spark。这个项目得到了IBM,Intel和MapR的支持(但是没有Databricks)。

作者:Xiaoyu Ma 
链接:https://www.zhihu.com/question/27011364/answer/36525479 
来源:知乎 
著作权归作者所有,转载请联系作者获得授权。 
Spark SQL 兼容了Hive的大部分语法和UDF,但是在处理查询计划的时候,使用了Catalyst框架进行优化,优化成适合Spark编程模型的执行计划 
哪个效果好?

Spark SQL 几乎完全兼容 HIVE SQL 语法,只是 HIVE 特有的一些优化参数及极少用语法 不支持。 Impala SQL 与 HIVE SQL 高度兼容,但不局限于 HIVE 已有的查询 SQL,同时 Impala 还 支持 insert into。

与SparkSQL的区别

SparkSQL和Hive On Spark都是在Spark上实现SQL的解决方案。Spark早先有Shark项目用来实现SQL层,不过后来推翻重做了,就变成了SparkSQL。这是Spark官方Databricks的项目,Spark项目本身主推的SQL实现。Hive On Spark比SparkSQL稍晚。Hive原本是没有很好支持MapReduce之外的引擎的,而Hive On Tez项目让Hive得以支持和Spark近似的Planning结构(非MapReduce的DAG)。所以在此基础上,Cloudera主导启动了Hive On Spark。这个项目得到了IBM,Intel和MapR的支持(但是没有Databricks)。 
Databricks Spark SQL的推出者:

While Spark SQL is becoming the standard for SQL on Spark, we do realize many organizations have existing investments in Hive. Many of these organizations, however, are also eager to migrate to Spark. The Hive community proposed a new initiative to the project that would add Spark as an alternative execution engine to Hive. For these organizations, this effort will provide a clear path for them to migrate the execution to Spark. 
And for organizations with legacy Hive deployments, Hive on Spark will provide them a clear path to Spark.

Spark SQL 连接Hive是由Spark SQL替代了Hive做SQL转换接口的作用;把Hive作为数据仓库;从转化到AST开始,后面的解析,优化,生成执行计划都由Spark SQL接管。

 

http://blog.csdn.net/u010385646/article/details/53207852

分享到:
评论

相关推荐

    Hive on Spark源码分析DOC

    在 Hive on Spark 中,Hive 的 SQL 解析引擎会将 SQL 语句解析成 SparkTask 对象。SparkTask 对象包含了执行该 Task 所需的所有信息,例如输入数据、输出数据、执行计划等。 3. Spark 上下文创建 在 Hive on Spark...

    基于CDH 6.3.0 搭建 Hive on Spark 及相关配置和调优

    随着大数据技术的发展,Hadoop生态系统不断成熟与完善,其中Apache Hive作为数据仓库工具,支持通过SQL语句进行查询、分析存储在Hadoop文件系统中的大规模数据集。然而,默认情况下,Hive使用MapReduce作为执行引擎...

    spark2.0编译版-适用于hive2.3的hive on spark

    在Hive的`metastore.conf`文件中,需要设置`spark.sql.hive.metastore.jars`参数为`maven`或`builtin`,以指示Hive从Maven仓库或Hive的类路径中加载Spark相关jar。 4. **启动和使用**:编译完成后,将`spark-2.0.2-...

    大数据Spark纯净版安装包,用于快速集成Hive on Spark

    该安装包通常包含Spark的核心组件,如Spark Core、Spark SQL、Spark Streaming等,以及一些基本的工具和库。用户可以根据自己的需求选择合适的安装方式,例如通过二进制文件安装、通过包管理器安装或者通过源代码...

    Hive on Spark实施笔记1

    当Hive与Spark结合使用,即Hive on Spark,可以实现更高效的数据处理。本文将详细介绍如何在Ubuntu 14.04环境下编译和配置Hive on Spark,以及测试其运行效果。 首先,我们需要准备合适的编译环境。操作系统应为...

    hive3.x编译spark3.x包

    在IT行业中,Hive和Spark是两个非常重要的大数据处理框架。Hive主要提供了一种基于Hadoop的数据仓库工具,使得用户...此外,对于大规模集群,还需要考虑性能优化和资源管理策略,以确保高效稳定地运行Hive on Spark。

    spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址

    在标题"spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址"中,我们关注的是Spark与Hive的特定版本(2.11)的集成,以及Spark SQL和Spark对Hadoop的支持。这里的2.11可能指的是Scala的版本,因为Spark是用...

    Hive on Spark安装配置详解.pdf

    通过执行一些简单的SQL查询,比较Hive on Spark与Hive on MR的执行速度,验证安装配置是否成功。 在安装配置过程中,可能会遇到各种问题,如依赖冲突、配置错误等。解决这些问题通常需要查看日志、查找错误信息,并...

    Spark不能使用hive自定义函数.doc

    ### Spark与Hive自定义函数兼容性问题解析 在大数据处理领域,Apache Spark 和 Apache Hive 都是非常重要的工具。Spark 是一种快速通用的大规模数据处理系统,而Hive 则是一种数据仓库工具,主要用于对存储在 ...

    Hive on Spark 离线数仓生成的原始数据

    在大数据处理领域,Hive on ...总的来说,Hive on Spark 结合了Hive的数据管理和SQL查询功能,以及Spark的高性能计算能力,为离线数据仓库提供了一个强大而灵活的解决方案,帮助企业处理和分析大量的历史业务数据。

    基于Sqoop+Hive+Spark+MySQL+AirFlow+Grafana的工业大数据离线数仓项目

    在这个项目中,Spark可以与Hive集成,利用Spark SQL执行复杂的查询和分析,同时利用其内存计算能力提高处理速度。Spark也可以用于执行数据挖掘、特征工程和模型训练,帮助工厂管理层洞察生产效率、产品质量等关键...

    Atlas Spark SQL血缘分析,Hive Hook

    与Hive的集成使得Spark SQL可以访问Hive Metastore中的表和分区,进一步增强了Spark的灵活性和可扩展性。 Apache Atlas的Hive Hook是在Hive执行器中插入的一个组件,它能够在Hive操作执行前后捕获元数据变更信息,...

    Hadoop Hive HBase Spark Storm概念解释

    **Hive** 是构建在Hadoop之上的数据仓库工具,它提供了SQL-like查询语言HiveQL,使用户能够在Hadoop上进行数据提取、转换和加载(ETL),而无需编写复杂的MapReduce程序。通过使用Hive,开发者可以更加高效地管理和...

    spark-2.3.1-bin-hadoop2-without-hive.tgz

    6. **启动Hive Thrift Server**: 使用配置好的Spark,启动Hive Thrift Server,这样客户端就可以通过SQL接口与Spark进行交互。 7. **测试连接**: 通过执行Hive查询验证配置是否成功。如果一切正常,你应该能在不...

    spark-2.3.0-bin-hadoop2-without-hive

    《Spark 2.3.0 与 Hive 集成详解——无 Hive JAR 包版本》 在大数据处理领域,Spark 和 Hive 是两个至关重要的工具。Spark 提供了高效的数据处理能力,而 Hive 则提供了基于 SQL 的数据查询和管理功能。然而,有时...

    spark--bin-hadoop3-without-hive.tgz

    本压缩包“spark--bin-hadoop3-without-hive.tgz”提供了Spark二进制版本,针对Hadoop 3.1.3进行了编译和打包,这意味着它已经与Hadoop 3.x兼容,但不包含Hive组件。在CentOS 8操作系统上,这个版本的Spark已经被...

    spark2.3.1-with-hive

    Spark 2.3.1 是一个重要的大数据处理框架,它提供了高效的分布式计算能力,而与 Hive 的集成使得 Spark 可以充分利用 Hive 的元数据、SQL 查询功能和存储系统,为大数据分析提供更丰富的选择。Hive 是一种基于 ...

    清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)全套PPT课件含习题 共7个章节.rar

    【完整课程列表】 清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)PPT课件含习题 第1章 大数据...清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)PPT课件含习题 第6章 Spark SQL(29页).pptx

    项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)

    Spark与Hive的集成允许我们直接操作Hive表,将Hive数据转换为Spark DataFrame,这样就可以利用Spark的并行计算能力进行数据预处理和转换。 3. **数据转换**: 在从Hive加载数据到Spark后,可能需要对数据进行清洗...

    【hive on spark Error】return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.

    ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. 前言报错信息异常分析配置改动后记 前言 在成功消除Cloudare管理界面上那些可恶的警告之后,我又对yarn...

Global site tag (gtag.js) - Google Analytics