栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 前沿技术 > 大数据 > 大数据系统

数据库学习

数据库学习

Hive

一个基于 Hadoop 的数据仓库工具
Hive 的计算基于 Hadoop 实现的一个特别的计算模型 MapReduce,它可以将计算任务分割成多个处理单元,然后分散到一群家用或服务器级别的硬件机器上,降低成本并提高水平扩展性。

Hive 的数据存储在 Hadoop 一个分布式文件系统上,即 HDFS。

需明确的是,Hive 作为数仓应用工具,对比 RDBMS(关系型数据库) 有3个“不能”:
不能像 RDBMS 一般实时响应,Hive 查询延时大;
不能像 RDBMS 做事务型查询,Hive 没有事务机制;
不能像 RDBMS 做行级别的变更操作(包括插入、更新、删除)

Mysql、hiveSQL、SparkSQL对比

1、Mysql适用于实时性的查询,一般使用场景是B+树索引,查询效率维持在毫秒级。但是缺点也很明显,举个例子查询的量过大,有百万级别,Mysql直接OOM了,存在性能的瓶颈。而hiveSQL和sparkSQL的查询不存在这种问题,计算完成后的数据都是分布式存储的。
2、和Mysql对比,hiveSQL查询和sparkSQL查询都是分布式上的操作。
3、hive将HiveSQL转换为MapReduce提交到集群上运行,简化了编写MapReduce的复杂性。将SparkSQL转换为RDD,然后提交到集群上运行,执行效率比MapReuce快。如果数据超过10PB,建议使用Hive,Hive可以处理100PB级别的数据,而Spark不太适合超过这个上限的数据。
4、Hive没有delete和update,不支持等值连接。SQL中null代表空值, 在HiveQL中String类型的字段若是空(empty)字符串, 即长度为0, 那么对它进行IS NULL的判断结果是False。Hive不支持将数据插入现有的表或分区中。

hive的优化

hive的优化主要分为:配置优化、SQL语句优化、任务优化等方案。
其中在开发过程中主要涉及到的可能是SQL优化这块。
优化的核心思想是:
1、减少数据量(例如分区、列剪裁);
2、避免数据倾斜(例如加参数、Key打散);
3、避免全表扫描(例如on添加加上分区等);
4、减少job数(例如相同的on条件的join放在一起作为一个任务)。
优化方法:
1、列裁剪就是在查询时只读取需要的列,分区裁剪就是只读取需要的分区
2、谓词下推(Predicate Pushdown,PPD),就是将SQL语句中的where谓词逻辑都尽可能提前执行,减少下游处理的数据量。
3、sort by代替order by。order by将结果按某字段全局排序,这会导致所有map端数据都进入一个reducer中,在数据量大时可能会长时间计算不完。如果使用sort by,那么还是会视情况启动多个reducer进行排序,并且保证每个reducer内局部有序。为了控制map端数据分配到reducer的key,往往还要配合distribute by一同使用。如果不加distribute by的话,map端数据就会随机分配到reducer。
4、group by代替distinct。当要统计某一列的去重数时,如果数据量很大,count(distinct)就会非常慢,原因与order by类似,count(distinct)逻辑只会有很少的reducer来处理。这时可以用group by来改写。
5、使用with as。在SQL语句里面尽量减少子查询。with as是将语句中用到的子查询事先提取出来(类似临时表),使整个查询当中的所有模块都可以调用该查询结果。使用with as可以避免Hive对不同部分的相同子查询进行重复计算。
6、group by配置调整。(1)map端预聚合。先起一个combiner在map端做部分预聚合,可以有效减少shuffle数据量(2)倾斜均衡配置项。如果某些key对应的数据量过大,就会发生数据倾斜。其实现方法是在group by时启动两个MR job。第一个job会将map端数据随机输入reducer,每个reducer做部分聚合,相同的key就会分布在不同的reducer中。第二个job再将前面预处理过的数据按key聚合并输出结果,这样就起到了均衡的效果。
7、join基础优化。
(1)build table(小表)前置。在最常见的hash join方法中,一般总有一张相对小的表和一张相对大的表,小表叫build table,大表叫probe table。Hive在解析带join的SQL语句时,会默认将最后一个表作为probe table,将前面的表作为build table并试图将它们读进内存。如果表顺序写反,probe table在前面,引发OOM的风险就高了。
在维度建模数据仓库中,事实表就是probe table,维度表就是build table。
(2)多表join时key相同。将多个join合并为一个MR job来处理。

注:本文为学习笔记记录,希望可以帮助需要的人,如有错误,欢迎指正,同时文章内容可能借鉴各个地方,如有侵权,联系删,谢谢!

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/278419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号