大数据学习笔记(十三)-Hive高级
来源:互联网 发布:久其软件 亦庄 编辑:程序博客网 时间:2024/06/01 14:43
1.Hive的元数据表
TBLS:TBL_ID、DB_ID、SD_ID、TBL_NAME、TBL_TYPE
TABLE_PARAMS:存储表/视图的属性信息
TBL_PRIVS:存储表/视图的权限信息,一般不用HIVE的权限,而是用sentry来进行权限控制
SDS:保存文件存储的基本信息,比如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩
COLUMNS_V2:存储表对应的字段信息
PARTITIONS:存储分区表的基本信息
PARTITION_KEYS:存储分区表的字段信息
PARTITION_KEY_VALS:存放分区字段值
FUNCS:用户注册的函数信息
2.Hive的执行计划
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query
分析Hive的执行计划有助于了解Hive具体是如何执行的,帮助对Hive进行性能调优。
3.Hive当中的join
例子
create table a(id int, name string) row format delimited fields terminated by '\t';hive> create table b(id int, age int) row format delimited fields terminated by '\t';hive> load data local inpath '/home/hadoop/data/a.txt' overwrite into table a;hive> load data local inpath '/home/hadoop/data/b.txt' overwrite into table b;hive> select * from a;OK1 zhangsan2 lisi3 wangwuhive> select * from b;OK1 302 294 21
①inner join
hive> select a.id, a.name, b.age from a join b on a.id=b.id;
②left join
hive> select a.id, a.name, b.age from a left join b on a.id=b.id;
③right join
hive> select a.id, a.name, b.age from a right join b on a.id=b.id;
③full join
hive> select a.id, a.name, b.age from a full join b on a.id=b.id;
4.join的优化
普通的join可称为common join/shuffle join/reduce join,这种操作会引起数据的网络传输,速度比较慢。
优化方法适用map join即spark当中利用broadcast的join优化,原理是将小表传到每台worker上,那么相当于将join操作本地化了。
5.Hive元数据升级方案
场景集群机器名修改hodoop000=>new_name
解决方案:
①直接修改元数据中DBS表中的相关字段
②适用bin\metatool
-listFSRoot查看文件系统根目录
-updateLocation更新location
-updateLocation hdfs://new_name:xxx hdfs://old_name:xxx
6.MapReduce和Hive如何支持递归目录
MapReduce支持文件递归修改mapreduce-site.xml文件配置
<property> <name>mapreduce.input.fileinputformat.input.dir.recursive</name> <value>true</value></property>
Hive支持文件递归修改hive-site.xml文件配置
<property> <name>mapreduce.input.fileinputformat.input.dir.recursive</name> <value>true</value></property><property> <name>hive.mapred.supports.subdirectories</name> <value>true</value></property>
7.多行数据形成一行
相同编号的学生合成一行数据
使用concat_ws、collect_set函数实现
selectidconcat_ws(',',collect_set(name)) as name,concat_ws(',',collect_set(url)) as urlfrom tt groupby id;
8.Hive的调优
①Hive的并行执行配置
hive.exec.parallel=false;//默认设置hive.exec.parallel=true;//允许并行执行
②合理设置Reduce的数量
reduce数量决定了最终作业落地的个数
reduce决定的因素
1)hive.exec.reducers.bytes.per.reducer 默认值256000000
每个Reduce能够处理的数量
2)hive.exec.reducers.max 默认值1009
每个作业最大的reduce数量
计算公式:reduce的实际数量N=min(参数二,总输入数据量/参数一)
生产中实际会调整mapred.reduce.tasks=-1的参数,手工调整启动reduce的数量。
③多个job之间共享中间结果集
创建临时表,作为中间结果表
好处:减少磁盘IO,减少网络IO
缺点:依赖关系更加严重
9.数据倾斜
导致数据清洗的原因
①join
②groupBy
③count(distinct column)
join的数据倾斜问题:
大小表,使用mapjoin
两个大表使用桶表
情形:大表与大表,但是分桶的判断字段0值或空值过多
后果:这些空值都由一个reduce处理,非常慢
大表Join大表:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不影响最终结果。
groupBy
双层groupBy
count(disctinct column)
采用groupBy改造
10.Hive调优的其他手段
列裁剪
分区裁剪
压缩
列式存储
合并小文件
- 大数据学习笔记(十三)-Hive高级
- 大数据学习笔记(十三)-SparkStreaming
- Android学习笔记(十三)高级技巧
- 大数据学习笔记(八)-Hive(基础)
- 《走进大数据之Hive入门》学习笔记(1)
- 《走近大数据之Hive进阶》学习笔记(2)
- 大数据学习笔记(十)-Hive中的Storage format
- 大数据学习笔记(十一)-Hive进阶
- 大数据企业学习篇03_3------hive 高级
- 大数据(二十三)Hive【Hive三种启动方式 、 HIVE Server2详解 、 jdbc链接HIVE】
- 大数据学习笔记之十三 云计算调度
- 大数据之Hive(笔记二)
- hive学习笔记-高级查询
- Hive学习笔记之--Hive 高级编程
- Linux学习笔记(十三)键盘高级操作技巧
- 大数据--hive学习(1)--hive的简单认识
- 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
- 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
- java相关属性转json的相关注解
- 将qt help移植到arm(xilinx)-linux
- 拉格朗日乘子法与对偶问题
- 【译】ArcGIS Runtime SDK 100.2.0的新增功能
- [转]Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- 大数据学习笔记(十三)-Hive高级
- hdu 1455 sticks (dfs+枝剪)
- 正则学习完美一篇
- window.location 对象所包含的属性
- python_20171123_二手车信息探索
- [转]Java图形化界面设计——布局管理器之GridLayout(网格布局)
- 安装maven私服
- java处理Json大字符串和常用数据结构的相互转换
- HDFS架构设计和MapReduce2架构设计