ITPub博客

首页 > > > Hive 必知必会(一)

Hive 必知必会(一)

作者:markriver 时间:2020-07-01 17:06:25 0 删除 编辑

1.Hive表关联查询,如何解决数据倾斜的问题?

数据倾斜发生在shuffle阶段,如:

数据倾斜的解决方案

参数调节:
hive.map.aggr=true
Map 端部分聚合,相当于Combiner

第一,做好列裁剪和filter操作,以达到两表做join的时候,数据量相对变小的效果

第二,

大小表join

工作原理是在Map端把小表加载到内存中,然后读取大表,和内存中的小表完成连接操作

手动map join
hive (hive)> select /*+mapjoin(post)*/ user.id,user.name,post.pid,post.title from  user           > join post
           > on user.id = post.uid;

自动配置
hive (hive)> set hive.auto.convert.join=true;
hive (hive)> set hive.mapjoin.smalltable.filesize=25000000;(默认值就是25MB)

使用map join让小的维度表(1000条以下的记录条数) 先进内存。在map端完成reduce.

大表Join大表:

把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不影响最终结果

2.请谈一下Hive的特点,Hive和RDBMS有什么异同

Hive 是为数据仓库而设计的

关键词:数据存储位置 查询语言 索引(hive不建立索引) 执行 可扩展性 数据规模
1. Hive 的数据都是存储在 HDFS 中的,数据库则将数据保存在 块设备 或者 本地文件系统 中

2.数据仓库的内容是读多写少的

3.Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。

4.Hive 不适合在线数据查询

5.可以支持很大规模的数据

3 请说明Hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?

Sort By:每个MapReduce内部进行排序,对全局结果集来说不是排序。

Distribute By + Sort By : 分区 排序

#先按照部门编号分区,再按照员工编号降序排序。
hive (default)> set mapreduce.job.reduces=3;
hive (default)> insert overwrite local directory '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

Cluster By:

当distribute by和sorts by字段相同时 = cluster by , 但是只能倒序

4 Hive有哪些方式保存元数据,各有哪些特点?

元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等

  1. mysql

2. 或者自身带的一个数据库derby

5 Hive内部表和外部表的区别?

EXTERNAL关键字可以让用户创建一个外部表

在建表的同时指定一个指向实际数据的路径(LOCATION)

Hive创建内部表时,会将数据移动到数据仓库指向的路径

若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。

在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

6 Hive的HSQL转换为MapReduce的过程?

7 请把下面语句用Hive实现
SELECT a.key,a.value 
FROM a 
WHERE a.key not in (SELECT b.key FROM b)

8 写出将 text.txt 文件放入 Hive中 test 表‘2016-10-10’ 分区的语句,test 的分区字段是 l_date。

1.语法

load data [local] inpath '/opt/module/datas/student.txt' [overwrite] into table student [partition (partcol1=val1,…)];


(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表(复制);否则从HDFS加载数据到hive表(移动)
(3)inpath:表示加载数据的路径
(4)overwrite into:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区


load data inpath '/user/atguigu/hive/student.txt' overwrite into table default.student;


9 Hive自定义UDF函数的流程?

(1)UDF(User-Defined-Function)

一进一出

(2)UDAF(User-Defined Aggregation Function)

聚集函数,多进一出

类似于:count/max/min

(3)UDTF(User-Defined Table-Generating Functions)

一进多出

如lateral view explore()

create temporary function

10对于Hive,你写过哪些udf函数,作用是什么?

。。。

11 Hive 中的压缩格式TextFile、SequenceFile、RCfile 、ORCfile各有什么区别?

TextFile格式

默认格式,数据不做压缩,磁盘开销大,数据解析开销大

Parquet文件

是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的

12 Hive join过程中大表小表的放置顺序?

把小表放在前面做关联可以提高效率

13 Hive的两张表关联,使用MapReduce怎么实现?

14 所有的Hive任务都会有MapReduce的执行吗?

设置hive.fetch.task.conversion,就不走MapReduce

15 Hive的函数:UDF、UDAF、UDTF的区别?

如上

16 说说对Hive桶表的理解?

create table stu_buck(id int, name string)
clustered by(id) into 4 buckets
row format delimited fields terminated by '\t';

17 Hive可以像关系型数据库那样建立多个库吗?

可以

CREATE DATABASE IF NOT EXISTS TEST

18 Hive实现统计的查询语句是什么?

集合统计函数
1. 个数统计函数: count
2. 总和统计函数: sum
3. 平均值统计函数: avg
4. 最小值统计函数: min
5. 最大值统计函数: max
6. 非空集合总体变量函数:var_pop
7. 非空集合样本变量函数:var_samp
8. 总体标准偏离函数:stddev_pop
9.样本标准偏离函数:stddev_samp
10.中位数函数:percentile
11.似中位数函数:percentile_approx
12.直方图:histogram_numeric

19 Hive优化措施

hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优。

可以有下面几个方面的调优。

1.解决收据倾斜问题

2.减少job数量

3.设置合理的map和reduce个数

4.对小文件进行合并

5.优化时把握整体,单个task最优不如整体最优。

按照一定规则分区。

如上。


推荐:

1.海量数据算法面试大全

2.

Hadoop大数据面试题全版本,必看跳槽指南!_ITPUB博客​blog.itpub.net图标

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/818/viewspace-3124418/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-03

  • 博文量
    502
  • 访问量
    18493