1 hive表关联查询,如何解决数据倾斜的问题?
倾斜缘由:
map输出数据按key Hash的分配到reduce中,因为key分布不均匀、业务数据自己的特、建表时考虑不周、等缘由形成的reduce 上的数据量差别过大。
1)、key分布不均匀;
2)、业务数据自己的特性;
3)、建表时考虑不周;
4)、某些SQL语句自己就有数据倾斜;
如何避免:对于key为空产生的数据倾斜,能够对其赋予一个随机值。
解决方案
1>.参数调节:
hive.map.aggr = true
hive.groupby.skewindata=true
有数据倾斜的时候进行负载均衡,当选项设定位true,生成的查询计划会有两个MR Job。第一个MR Job中,Map的输出结果集合会随机分布到Reduce中,每一个Reduce作部分聚合操做,并输出结果,这样处理的结果是相同的Group By Key有可能被分发到不一样的Reduce中,从而达到负载均衡的目的;第二个MR Job再根据预处理的数据结果按照Group By Key 分布到 Reduce 中(这个过程能够保证相同的 Group By Key 被分布到同一个Reduce中),最后完成最终的聚合操做。
2>.SQL 语句调节:
1)、选用join key分布最均匀的表做为驱动表。作好列裁剪和filter操做,以达到两表作join 的时候,数据量相对变小的效果。
2)、大小表Join:
使用map join让小的维度表(1000 条如下的记录条数)先进内存。在map端完成reduce.
4)、大表Join大表:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不一样的reduce上,因为null 值关联不上,处理后并不影响最终结果。
5)、count distinct大量相同特殊值:
count distinct 时,将值为空的状况单独处理,若是是计算count distinct,能够不用处理,直接过滤,在最后结果中加1。若是还有其余计算,须要进行group by,能够先将值为空的记录单独处理,再和其余计算结果进行union。
Hive 原理
1. 用户提交查询等任务给Driver。
2. 编译器得到该用户的任务Plan。
3. 编译器Compiler根据用户任务去MetaStore中获取须要的Hive的元数据信息。
4. 编译器Compiler获得元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,而后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce), 最后选择最佳的策略。
5. 将最终的计划提交给Driver。
6. Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操做。
7. 获取执行的结果。
8. 取得并返回执行结果。
Mapreduce和hive的区别和联系
http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml
hive是基于hadoop的数据仓库。
那么为何说hive是基于Hadoop的呢?
之因此说hive是构建在Hadoop之上的数据仓库,简单的说是由于:
①数据存储在hdfs上
②数据计算用mapreduce
Hive是一种创建在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;它能够将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,能够将 SQL 语句转换为 MapReduce 任务进行运行,经过本身的 SQL 去查询分析须要的内容,这套 SQL 简称 Hive SQL(HQL),使不熟悉MapReduce 的用户也能很方便地利用 SQL 语言对数据进行查询、汇总、分析。
Hive不支持更改数据的操做,Hive基于数据仓库,提供静态数据的动态查询。其使用类SQL语言,底层通过编译转为MapReduce程序,在hadoop上运行,数据存储在HDFS上。
简述有Hive以后,为什么还要学mapreduce
https://blog.csdn.net/WYpersist/article/details/79981385
你以为Hive是否支持in函数
https://blog.csdn.net/WYpersist/article/details/79980945
当输入hive 命令时卡住了,你认为是为何,从哪些方面考虑
Cpu ,网络,内存
说出Hive 安装数据时,mysql和Derby的区别,为何安装mysql ,或为何安装Derby,分别有什么优缺陷
https://blog.csdn.net/WYpersist/article/details/80101617
简述Hive 桶表什么,什么做用,举例
Hive 分区是什么,什么做用,该怎么分区
Hive 动态分区和静态分区
Hive 分区重命名
说出Hive 导入数据的过程(表有多个分区,桶)
Hive 排序
什么是Hive join
说说你所理解的Hive 视图操做
Hive 序列函数
简述Hive 自定义函数
知道Hive UDF是什么吗,什么做用,为何要用
简述Hive 优缺点
https://blog.csdn.net/wypersist/article/details/79999401
说说Hive内部表和外部表分别是什么?为何要建外部表?
Hive内部表和外部表的区别
https://blog.csdn.net/wypersist/article/details/80314022
Hive 建立内部表时,会将数据移动到数据仓库指向的路径;若建立外部表,仅记录数据所在的路径,不对数据的位置作任何改变。在删除表的时候,内部表的元数据和数据会被一块儿删除,而外部表只删除元数据,不删除数据。这样外部表相对来讲更加安全些,数据组织也更加灵活,方便共享源数据。
须要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema。
读时模式的优点是load data 很是迅速,由于它不须要读取数据进行解析,仅仅进行文件的复制或者移动。
写时模式的优点是提高了查询性能,由于预先解析以后能够对列创建索引,并压缩,但这样也会花费要多的加载时间。
被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由本身制定;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则须要修复(MSCK REPAIR TABLE table_name;)
https://blog.csdn.net/wypersist/article/details/80314022
什么是数据倾斜
Hive 表类型有哪些
https://blog.csdn.net/dsl200970/article/details/70245916
Mapreduce和hive的区别和联系
http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml
hive是基于hadoop的数据仓库。
那么为何说hive是基于Hadoop的呢?
之因此说hive是构建在Hadoop之上的数据仓库,简单的说是由于:
①数据存储在hdfs上
②数据计算用mapreduce
Hive是一种创建在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;它能够将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,能够将 SQL 语句转换为 MapReduce 任务进行运行,经过本身的 SQL 去查询分析须要的内容,这套 SQL 简称 Hive SQL(HQL),使不熟悉MapReduce 的用户也能很方便地利用 SQL 语言对数据进行查询、汇总、分析。
Hive不支持更改数据的操做,Hive基于数据仓库,提供静态数据的动态查询。其使用类SQL语言,底层通过编译转为MapReduce程序,在hadoop上运行,数据存储在HDFS上。
说出Hive 如何调优,提高效率
https://blog.csdn.net/WYpersist/article/details/80030499
https://blog.csdn.net/WYpersist/article/details/80030921
https://blog.csdn.net/WYpersist/article/details/80032327
说出Hive 数据清洗的过程
Hive 编程题
五、海量数据分布在100台电脑上,统计出这批数据的TOP10。(写出核心算法思路)
六、背景:现有商品,买家,卖家三个实体,实现一个小小型的交易系统
1)给出表结构设计
2)帅选出没有买过商品的用户
3)写出sql 语句,帅选出仅仅购买了面粉的用户
HIVE与RDBMS关系数据库的区别
一、hive存储的数据量比较大,适合海量数据,适合存储轨迹类历史数据,适合用来作离线分析、数据挖掘运算,
事务性较差,实时性较差
rdbms通常数据量相对来讲不会太大,适合事务性计算,实时性较好,更加接近上层业务
二、hive的计算引擎是hadoop的mapreduce,存储是hadoop的hdfs文件系统,
rdbms的引擎由数据库本身设计实现例如mysql的innoDB,存储用的是数据库服务器本地的文件系统
三、hive因为基于hadoop因此存储和计算的扩展能力都很好,
rdbms在这方面比较弱,好比orcale的分表和扩容就很头疼
四、hive表格没有主键、没有索引、不支持对具体某一行的操做,适合对批量数据的操做,不支持对数据的update操做,
更新的话通常是先删除表而后从新落数据
rdbms事务性强,有主键、索引,支持对具体某一行的增删改查等操做
五、hive的SQL为HQL,与标准的RDBMS的SQL存在有很多的区别,相对来讲功能有限
rdbms的SQL为标准SQL,功能较为强大。
Hive分析窗口函数
Hive 数据倾斜类
Hive 取前10条数据
https://blog.csdn.net/wypersist/article/details/80318305
Hive 取最小成绩的记录和最大的记录
Hive 四种排序
https://blog.csdn.net/wypersist/article/details/80314431
Hive 时间函数
Mysql 和hive的区别
Hive 的sql语句和mysql 的sql语句有什么不一样
Mysql和derby
Hive 将元数据存储在 RDBMS 中,通常经常使用 MySQL 和 Derby。默认状况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能容许一个会话链接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则须要一个独立的元数据库,使用 MySQL 做为元数据库,Hive 内部对 MySQL 提供了很好的支持。
内置的derby主要问题是并发性能不好,能够理解为单线程操做。
Derby还有一个特性。更换目录执行操做,会找不到相关表等
好比在/usr下执行建立表,在/usr下能够找到这个表。在/etc下执行查找这个表,就会找不到 。
Hive存储格式
https://blog.csdn.net/ly19901208/article/details/77049824
Hive 工做原理
https://blog.csdn.net/wypersist/article/details/80174647
A全部的hive任务都会有reducer的执行吗?
答:不是,因为当前hive的优化,使得通常简单的任务不会去用reducer任务;只有稍微复杂的任务才会有reducer任务
举例:使用select * from person ; 就不会有reducer
使用from person p
insert into person2 select p.age,p.name
B\hive解决了什么问题
答:多用户的使用,解决了元数据的冲突,hive2代理管理元数据
区别hive2,hiveserver2是服务,而hive是一个交互窗口
C\设置时钟同步的定时任务
crontab -e
*/10 * * * * /usr/sbin/ntpdate time.nist.gov
D\hive的函数:UDF UDAF UDTF的区别
UDF: 单行进入,单行输出
UDAF: 多行进入,单行输出
UDTF: 单行输入,多行输出
E\hive的优化
答:优化能够从几个方面着手:
1. 好的模型设计事半功倍。
2. 解决数据倾斜问题。
3. 减小 job 数。
4. 设置合理的 map reduce 的 task 数,能有效提高性能。(好比,10w+级别的计算,用
160 个 reduce,那是至关的浪费,1 个足够)。
5. 本身动手写 sql 解决数据倾斜问题是个不错的选择。set hive.groupby.skewindata=true;
这是通用的算法优化,但算法优化老是漠视业务,习惯性提供通用的解决方法。 Etl 开发
人员更了解业务,更了解数据,因此经过业务逻辑解决倾斜的方法每每更精确,更有效。
6. 对 count(distinct)采起漠视的方法,尤为数据大的时候很容易产生倾斜问题,不抱侥幸
心理。本身动手,丰衣足食。
7. 对小文件进行合并,是行至有效的提升调度效率的方法,假如咱们的做业设置合理的文
件数,对云梯的总体调度效率也会产生积极的影响。
8. 优化时把握总体,单个做业最优不如总体最优。
F优化:
1\排序优化
Order by 实现全局排序,一个 reduce 实现,效率低
Sort by 实现部分有序,单个 reduce 输出的结果是有序的,效率高,一般和
DISTRIBUTE BY 关键字一块儿使用(DISTRIBUTE BY 关键字 能够指定 map 到 reduce
端的分发 key)
CLUSTER BY col1 等价于 DISTRIBUTE BY col1 SORT BY col1
2\分区优化
3\合并小文件
4\避免空值关联,多用聚合函数,多用临时表
html