spark与hive查询得出的数据不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark与hive查询得出的数据不同相关的知识,希望对你有一定的参考价值。

参考技术A 在实际工作的情况中,经常有spark与hive查询出来的数据存在不一样的情况,基本的原因如下:
1、由于精度不一样导致的
2、更多的时候确实是由于元数据混乱导致的
(就是说hive中能读到这个字段的值,但是在spark中却无法读取到该字段的值。
很多时候可能还是由于大小写的混乱所导致的)

同一条sql,hive能生成表,而spark却生成的一张空表,或者数据缺少,存在null值,与hive结果不一致
设置
spark.sql.hive.convertMetastoreOrc=false
convertMetastoreParquet=false

原因:
spark用自己的格式读取hive文件后进行自动转换后进行操作

官方说明

spark SQL和hive到底啥关系

Hive是一种基于HDFS的数据仓库,并且提供了基于SQL模型的,针对存储了大数据的数据仓库,进行分布式交互查询的查询引擎。

SparkSQL并不能完全替代Hive,它替代的是Hive的查询引擎,SparkSQL由于其底层基于Spark自身的基于内存的特点,因此速度是Hive查询引擎的数倍以上,Spark本身是不提供存储的,所以不可能替代Hive作为数据仓库的这个功能。

SparkSQL相较于Hive的另外一个优点,是支持大量不同的数据源,包括hive、json、parquet、jdbc等等。SparkSQL由于身处Spark技术堆栈内,基于RDD来工作,因此可以与Spark的其他组件无缝整合使用,配合起来实现许多复杂的功能。比如SparkSQL支持可以直接针对hdfs文件执行sql语句。

参考技术A 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作为引擎,不仅仅是查询优化方面。
参考技术B spark SQL和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作为引擎,不仅仅是查询优化方面。
参考技术C 历史上存在的原理,以前都是使用hive来构建数据仓库,所以存在大量对hive所管理的数据查询的需求。而hive、shark、sparlSQL都可以进行hive的数据查询。shark是使用了hive的sql语法解析器和优化器,修改了执行器,使之物理执行过程是跑在spark上;而sparkSQL是使用了自身的语法解析器、优化器和执行器,同时sparkSQL还扩展了接口,不单单支持hive数据的查询,可以进行多种数据源的数据查询。本回答被提问者和网友采纳 参考技术D 历史上存在的原理,以前都是使用hive来构建数据仓库,所以存在大量对hive所管理的数据查询的需求。而hive、shark、sparlSQL都可以进行hive的数据查询。shark是使用了hive的sql语法解析器和优化器,修改了执行器,使之物理执行过程是跑在spark上;而sparkSQL是使用了自身的语法解析器、优化器和执行器,同时sparkSQL还扩展了接口,不单单支持hive数据的查询,可以进行多种数据源的数据查询。

以上是关于spark与hive查询得出的数据不同的主要内容,如果未能解决你的问题,请参考以下文章

什么是Hive on Spark

如果列数不同,如何处理从源 spark df 到 hive 表的插入

使用循环创建 Spark SQL 查询

获取 Spark 写入 Hive 元存储的所有新分区

spark sqlsparksql支持查询哪些数据源,查询hive与查询mysql的区别

Spark 仓库 VS Hive 仓库