【面试题】最新大数据面试题总结之Hive(持续更新)

文章目录

    • -- Hive优化
    • -- Hive的内部(管理)表和外部表的区别
    • -- 4个By区别
    • -- Hive的架构
    • -- Hive和数据库比较
    • -- 系统函数

– Hive优化

1)MapJoin

  • 如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即:在Reduce阶段完成join。容易发生数据倾斜。可以用MapJoin把小表全部加载到内存在map端进行join,避免reducer处理。

2)行列过滤

  • 列处理:在SELECT中,只拿需要的列,如果有,尽量使用分区过滤,少用SELECT *。
  • 行处理:在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在Where后面,那么就会先全表关联,之后再过滤。

3)列式存储

4)采用分区技术

5)合理设置Map数

  • mapred.min.split.size: 指的是数据的最小分割单元大小;min的默认值是1B
  • mapred.max.split.size: 指的是数据的最大分割单元大小;max的默认值是256MB
  • 通过调整max可以起到调整map数的作用,减小max可以增加map数,增大max可以减少map数。
    需要提醒的是,直接调整mapred.map.tasks这个参数是没有效果的。

https://www.cnblogs.com/swordfall/p/11037539.html

6)合理设置Reduce数,Reduce个数并不是越多越好

  • 过多的启动和初始化Reduce也会消耗时间和资源;
  • 另外,有多少个Reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;
  • 在设置Reduce个数的时候也需要考虑这两个原则:处理大数据量利用合适的Reduce数;使单个Reduce任务处理数据量大小要合适;

7)小文件如何产生的?

  • 动态分区插入数据,产生大量的小文件,从而导致map数量剧增;
  • reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的);
  • 数据源本身就包含大量的小文件。

8)小文件解决方案

  • 在Map执行前合并小文件,减少Map数:CombineHiveInputFormat具有对小文件进行合并的功能(系统默认的格式)。HiveInputFormat没有对小文件合并功能。
  • merge:
// 输出合并小文件
SET hive.merge.mapfiles = true; -- 默认true,在map-only任务结束时合并小文件
SET hive.merge.mapredfiles = true; -- 默认false,在map-reduce任务结束时合并小文件
SET hive.merge.size.per.task = 268435456; -- 默认256M
SET hive.merge.smallfiles.avgsize = 16777216; -- 当输出文件的平均大小小于16m该值时,启动一个独立的map-reduce任务进行文件merge
  • 开启JVM重用
set mapreduce.job.jvm.numtasks=10

9)开启map端combiner(不影响最终业务逻辑)

set hive.map.aggr=true

10)压缩(选择快的)

  • 设置map端输出、中间结果压缩。(不完全是解决数据倾斜的问题,但是减少了IO读写和网络传输,能提高很多效率)
set hive.exec.compress.intermediate=true --启用中间数据压缩
set mapreduce.map.output.compress=true --启用最终数据压缩
set mapreduce.map.outout.compress.codec=; --设置压缩方式

11)采用tez引擎或者spark引擎


– Hive的内部(管理)表和外部表的区别

1)删除数据时:

  • 内部表:元数据、原始数据全删除
  • 外部表:只删除元数据

2)在公司生产环境下,什么时候创建内部表,什么时候创建外部表?

  • 在公司中绝大多数场景都是外部表。
  • 自己使用的临时表,才会创建内部表;

– 4个By区别

  • Order By:全局排序,只有一个Reducer;

  • Sort By:分区内有序;

  • Distrbute By:类似MR中Partition,进行分区,结合sort by使用。

  • Cluster By:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。

  • 在生产环境中Order By用的比较少,容易导致OOM,Sort By+ Distrbute By用的多。


– Hive的架构

【面试题】最新大数据面试题总结之Hive(持续更新)_第1张图片

– Hive和数据库比较

  • Hive 和数据库除了拥有类似的查询语言,再无类似之处。

1)数据存储位置

  • Hive 存储在 HDFS 。数据库将数据保存在块设备或者本地文件系统中。

2)数据更新

  • Hive中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的,

3)执行延迟

  • Hive 执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

4)数据规模

  • Hive支持很大规模的数据计算;数据库可以支持的数据规模较小。

– 系统函数

1)date_add、date_sub函数(加减日期)
2)next_day函数(周指标相关)
3)date_format函数(根据格式整理日期)
4)last_day函数(求当月最后一天日期)
5)collect_set函数
6)get_json_object 解析json函数
7)NVL(表达式1,表达式2):如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。

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