大数据学习笔记(十三)-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调优的其他手段
列裁剪
分区裁剪
压缩
列式存储
合并小文件

阅读全文
0 0
原创粉丝点击