大数据面试题搜集_hive相关

1.去重问题 group by/ distinct/ row_number/ 自定义函数
2.row_number rank dense_rank
3.hive的UDF函数如何自定义和使用
4.hive优化

(1)从表设计考虑优化
    1、合理利用中间结果集,降低Hadoop的IO负载;
    2、合理设计表分区,包括静态分区和动态分区;
    3、尽量不使用复杂或低效函数,比如count(distinct),可以使用其他方式实现;
    4、选择合适的表存储格式和压缩格式;
    5、如果某些逻辑使用系统函数可能嵌套好几层,那么可以使用自定义函数实现;
    6、适当使用索引;
-----------------------------------------------------------

(2)从语法和参数考虑优化
    1、合理控制mapper和reducer数,设置map和reduce的内存大小;
    2、合并小文件;
    3、避免数据倾斜,解决数据倾斜问题
    4、减少触发Job次数
    5、Join优化,小表和大表join时,如果差一个以及以上数量级并且小表数据量很小,可以使用mapjoin方式,将小表全部读入内存中,在map阶段进行表关联匹配。
    大表和大表进行关联时,要注意数据倾斜的问题。如果两个表以相同Key进行分桶,以及表的桶个数是倍数关系,可以使用bucket join,加快关联查询。
    6、Join关联查询,避免笛卡尔积。(join的时候不加on条件,或者无效的on条件)
-----------------------------------------------------------    
(3)从Hive Job考虑优化
    1、并行化执行——每个查询被Hive转化成多个阶段,有些阶段关联性不大,则可以并行化执行,减少执行时间。
    2、本地化执行,尽量使一些数据量小的任务设置为本地运行模式
    3、JVM重利用——JVM重利用可以是Job长时间保留slot,直到作业结束,这在对于有较多任务和较多小文件的任务是非常有意义的,减少执行时间。
    4、推测执行——所谓的推测执行,就是当所有的task都开始运行之后,Job Tracker会统计所有任务的平均进度,如果某个task所在的节点配置内存比较低
        或者CPU负载很大,导致任务执行比总体任务的平均执行要慢,此时Job Tracker就会在其他节点启动一个新的相同的任务,原有任务和新任务哪个先执行完
        就把其他节点的另外一个任务kill掉。
    5、Hive中间结果压缩数据——中间压缩就是处理Hive查询的多个job之间的数据,对于中间压缩,最好选择一个节省CPU耗时的压缩方式

5.hive的动态分区和静态分区
6.hive的内部表和外部表
7.hive的join操作
8.hive的数据倾斜问题
业务逻辑造成的护具倾斜会很多,日常操作中,容易造成数据倾斜的原因可以归纳为几点:
1)group by
2)distinct count(distinct xx)
3)join
9.hive特点

你可能感兴趣的:(大数据,hive,面试)