本文是笔者在面试过程中被问到次数最多的一些问题,特此记录
8.常用的hive导入数据的方式
- 从本地导入数据到表中
load data local '本地路径' into 表名称
- 从hdfs导入数据到表中
load data inpath 'hdfs路径' into 表名称
- 表已存在,从别的表中查出数据导入到表中
- 建表的时候从别的表中查出数据导入到表中(表并不存在)
9.常用的hive导出数据的方式
- 导出表中数据到本地
insert overwrite local directory '本地路径'
- 导出表中数据到hdfs
insert overwrite directory 'hdfs路径'
- 使用sqoop也可以,但是已经被淘汰了
10. Hive和RDBMS的区别
1.Hive是个数据仓库,存储的数据量是很庞大的,一般我们用hive做数据分析,而传统的RDBMS数据库存储的数据量一般不会很大,并且大部分的RDBMS都是支持事务的,Hive是没有事务支持的
2.Hive的计算引擎是MR,存储引擎是HDFS,支持一种叫做HQL的语法,可以将SQL语句转化为MR进行执行,速度相对较慢,而RDBMS使用的是标准SQL,有索引等概念
3.Hive的可扩展性高,并且存储性能强大,RDBMS如果想要进行扩展等,就需要添加硬件等,比较麻烦
11.hive的数据倾斜是如何解决的?
hive的数据倾斜一般造成的原因就是表的设计不周到,key值分布不均匀,业务数据本身就导致的数据倾斜以及使用HQL的时候导致的数据倾斜
当遇到数据倾斜的时候一般是先从HQL上面进行处理,在进行表关联的时候,将数据量小的表放到内存中,并且尽量少的使用聚合函数,如果还是会发生数据倾斜问题,就得从配置参数上进行调节,开启数据倾斜时候的负载均衡,开启map端的聚合操作等
12.hive的优化?
1.join连接时的优化,在表和表关联的时候,尽量使用On将俩个表进行关联操作,可以只产生一个MR
2.join连接时的优化,在表和表关联的时候,可以将数据量小的表放在左边,因为hive在进行表关联的时候,会将扫描过的表进行缓存处理,全部扫描完毕后才会执行
3.在where后添加分区过滤器
4.在进行表关联的时候,尽量多的使用left semi join,少使用inner join,因为leftsemi join在扫描到数据后就会直接返回,停止扫描,提高效率
5.可以将数据量小的表给放到内存中,其它表在和其进行关联的时候就可以直接匹配,不需要产生MR
6.合理的设置MR和Reudce的数量
13.hive解析hql转化为MR的过程
1.将HQL进行解析
2.解析完的HQL进行编译,编译为一个job任务
3.对job任务进行优化
4.调用Hadoop进行执行
14.hive的元数据包含有哪些?
表的名称,表的属性,表的数据所在的目录等
15.hive分区分桶?
分区:文件夹
分桶:文件分区和分桶最大的区别就是分区是非随机分割数据库,而分桶是随机分割数据库(用的hash算法)当分区数量过大可能导致系统崩溃,就得使用分桶操作,将分区中的数据按照分桶处理,分桶是对分区进行更加细粒度的划分
16.开窗函数区别?
rank() 出现排名相同的会并列但占位 1 2 2 4 5
dense_rank() 出现排名相同的会并列但不占位 1 2 2 3 4
row_number() 正常的顺序 1 2 3 4