当前位置:首页 » 编程语言 » sparksql与hive的区别
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sparksql与hive的区别

发布时间: 2022-09-12 16:53:35

⑴ Hadoop,Hive,Spark 之间是什么关系

用hadoop -> hive ->spark ->报表工具(brio)的架构打通数据通路之后,做数据分析会变得非常简单(just like 图形化开发-拖拉拽)。
在构建spark离线数据分析平台之前,先简单说明传统的离线数据分析平台。

传统离线数据分析工作,一般把数据结构化存储在RDBMS,可通过sql代码、报表工具、挖掘工具快速对数据进行分析。因为数据进行了结构化,进行数据分析时,可专注于业务过程。此模式最大的问题在于机器和软件成本高,性能提升不能横向扩展。

为了降低机器和软件的投入,解决性能的横向扩展问题,Hadoop、spark得以长足发展。目前介绍spark做数据分析的课程,多数是介绍spark做计算引擎,hadoop做数据存储,用Java或者Scala进行分析数据工作。在实际应用中,这种做法会导致编码量急剧上升,分析人员无法专注于业务,容易形成业务和技术的疲于应对。

为了简化数据分析工作,需要加强对数据规范化的工作,为此,引入hive做数据结构化管理,开启spark-thrift的ODBC/JDBC接口,数据分析工具(报表工具/挖掘工具)通过ODBC/JDBC接入。此架构的压力在于数据规范化过程,或者说是日常数据加工过程,需以spark-sql、h-sql作为开发基础,开发通用java接口模板调用spark-sql生成数据,h-sql负责数据入库。此方法执行效率不是最高,但数据处理方法是规范了,降低了日常开发难度(以SQL编程为主),同时减少开发人员水平不一致导致的技术问题,另外数据分析人员可透明的使用数据进行分析(无需关心数据来源于RDBMS还是SPARK)。

⑵ hive和sparksql的区别

历史上存在的原理,以前都是使用hive来构建数据仓库,所以存在大量对hive所管理的数据查询的需求。而hive、shark、sparlSQL都可以进行hive的数据查询。shark是使用了hive的sql语法解析器和优化器,修改了执行器,使之物理执行过程是跑在spark上;而sparkSQL是使用了自身的语法解析器、优化器和执行器,同时sparkSQL还扩展了接口,不单单支持hive数据的查询,可以进行多种数据源的数据查询。

⑶ SparkSQL和Hive在做cast boolean存在的不同

今天在看一些数据的时候发现,一些SparkSQL与Hive之间在进行cast转化时候存在一些差异。
HiveVersion 1.2.1
SparkSQL 1.6.0
总结:
在Hive中, boolean类型的隐式转化,Hive中非boolean非null转化默认为True,
而在SparkSQL中,则根据传入的不同数据类型判断值后返回结果.
Hive
Converts the results of the expression expr to . For example,
cast(‘1’ as BIGINT) will convert the string ‘1’ to its integral representation.
A null is returned if the conversion does not succeed.
If cast(expr as boolean) Hive returns true for a non-empty string.
hive> select cast('false' as boolean) from default.le;
OK
true123

SparkSQL
在SparkSQL中如果是string的话,会检查StringUtils中枚举的;其他原子类型数据进行是否不等于0,不等于0返回true,否则为false
具体代码逻辑如下
classname: org.apache.spark.sql.catalyst.expressions.Cast

// UDFToBoolean
private[this] def castToBoolean(from: DataType): Any => Any = from match {
case StringType =>
buildCast[UTF8String](_, s => {
if (StringUtils.isTrueString(s)) {
true
} else if (StringUtils.isFalseString(s)) {
false
} else {
null
}
})
case TimestampType =>
buildCast[Long](_, t => t != 0)
case DateType =>
// Hive would return null when cast from date to boolean
buildCast[Int](_, d => null)
case LongType =>
buildCast[Long](_, _ != 0)
case IntegerType =>
buildCast[Int](_, _ != 0)
case ShortType =>
buildCast[Short](_, _ != 0)
case ByteType =>
buildCast[Byte](_, _ != 0)
case DecimalType() =>
buildCast[Decimal](_, !_.isZero)
case DoubleType =>
buildCast[Double](_, _ != 0)
case FloatType =>
buildCast[Float](_, _ != 0)
}

classname: org.apache.spark.sql.catalyst.util.StringUtils
//
private[this] val trueStrings = Set("t", "true", "y", "yes", "1").map(UTF8String.fromString)
private[this] val falseStrings = Set("f", "false", "n", "no", "0").map(UTF8String.fromString)

def isTrueString(s: UTF8String): Boolean = trueStrings.contains(s.toLowerCase)
def isFalseString(s: UTF8String): Boolean = falseStrings.contains(s.toLowerCase)

⑷ 为什么sparkSQL

Shark和sparkSQL 但是,随着Spark的发展,其中sparkSQL作为Spark生态的一员继续发展,而不再受限于hive,只是兼容hive;而hive on spark是一个hive的发展计划,该计划将spark作为hive的底层引擎之一,也就是说,hive将不再受限于一个引擎,可以采用map-rece、Tez、spark等引擎。

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

此外,除了兼容HQL、加速现有Hive数据的查询分析以外,Spark SQL还支持直接对原生RDD对象进行关系查询。同时,除了HQL以外,Spark SQL还内建了一个精简的SQL parser,以及一套Scala DSL。也就是说,如果只是使用Spark SQL内建的SQL方言或Scala DSL对原生RDD对象进行关系查询,用户在开发Spark应用时完全不需要依赖Hive的任何东西。

⑸ sparkSQL用jdbc连接hive和用元数据连接hive的区别,各自优缺点

spark on hive : 是spark 通过spark-sql 使用hive 语句操作hive ,底层运行的还是 spark rdd.
*(1)就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息
* (2)spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据
* (3)接下来就可以通过spark sql来操作hive表中的数据
hive on spark: 是hive 等的执行引擎变成spark , 不再是maprece. 相对于上一项,这个要实现责麻烦很多, 必须重新编译你的spark. 和导入jar包,

⑹ spark sql和sql的区别

Shark和sparkSQL 但是,随着Spark的发展,其中sparkSQL作为Spark生态的一员继续发展,而不再受限于hive,只是兼容hive;而hive on spark是一个hive的发展计划,该计划将spark作为hive的底层引擎之一,也就是说,hive将不再受限于一个引擎,可以采用map-rece、Tez、spark等引擎。

⑺ spark sql能替代hive吗

Spark SQL解决了这两个问题。 第一,Spark SQL在Hive兼容层面仅依赖HQL parser、Hive Metastore和Hive SerDe。也就是说,从HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。执行计划生成和优化都由Catalyst负责。借助Scala的模式匹配...

⑻ spark on hive和hive on spark的区别

spark on hive : 是spark 通过spark-sql 使用hive 语句操作hive ,底层运行的还是 spark rdd.
*(1)就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息
* (2)spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据
* (3)接下来就可以通过spark sql来操作hive表中的数据
hive on spark: 是hive 等的执行引擎变成spark , 不再是maprece. 相对于上一项,这个要实现责麻烦很多, 必须重新编译你的spark. 和导入jar包,
======================下面是送的=============
而 hive on spark 是把hive查询从maprece 的mr (hadoop 计算引擎)操作替换为spark rdd 操作. 不过目前大部分使用的是spark on hive
======================================
后面补充的:: 我去了某通之后, 知道了 把 hive的执行引擎换成spark 的也挺多的. 主要是为了使用类 sql 和相关脚本来完成任务.
为了真理,我要把那个垃圾的回答给顶下去...