Hive的高频面试题,你都会了吗?

428 阅读6分钟

         上篇文章给家讲解了Hadoop的面试题,Hive是踩在巨人的肩膀上的一个数据仓库组件,看看企业问那些问题吧。 在这里插入图片描述

一、什么是Hive? 为什么要有hive

         很多时候面试以上来就问什么是Hive,有了MapReduc为什么还要有hive呀。很多小伙伴回答的都不是很好,好,那大数据老哥来个大家讲解下。

Hive是基于Hadoop的一个数据仓库工具,能将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,(能将SQL语句转变成MapReduce任务来执行。)

为什么要有Hive那? 背景:hadoop是个好东西,但是学习难度大,成本高,坡度陡 意义:降低程序员使用hadoop的难度.降低学习成本.

二、Hive的组成部分

  • 解析器(解析器SQL语句)
  • 编译器(把SQL语句编译成MapReduce程序)
  • 优化器(优化MapRedue程序)
  • 执行器(将MapReduce程序运行的结果提交到HDFS)

三、Hive的优缺点

mate是存储在木MySQL数据库中的数据是存储在HDFS,计算引擎使用的MapReduce

优点 1、操作接口采用类SQL,提高快速开发能力(简单、容易上手) 2、避免了去写MapReduce,减少开发人员的学习成本 3、Hive的执行延迟比较高,因此hive常用于数据分析,对时效性要求比较配不高的场合。 4、hive的优势在处理大数据,对于处理数小数据没有优势,因为hvie的执行延迟比较高 5、HIve支持用户自定义函数,用户可以根据自己的需求来实现自定义函数 缺点 1、hive的HQL表达能力有限

  • 迭代式耍法无法表达
  • 数据挖掘不擅长

2、hive的效率比较低

  • hive自定生成MapReduce作业,通常情况下不够理智化
  • hive的 调优比较困难,粒度较粗

四、常用的函数(高频)

         在我面试了10家大数据公司时只要问到了Hive相关的内容基本上都让我列举几个常用的函数。

  • 关系运算符 (=,>,<,<>)
  • 逻辑运算 (+,-,*,/^)
  • 数值计算 (round,floor,ceil,ceiling)
  • 日期函数(from_unixtime,unix_timestamp,to_date)
  • 条件函数(if,COALESCE,CASE)

由于内容过多,微信搜索大数据老哥【回复:获取hive函数大全】

五、Hvie的内部表与外部表的区别

内部表: 删除该表并不会删除原始数据,删除的是表和元数据 外部表:当我们删除一个外部表时,原始数据和元数据都会被删除,不合适做共享数据

六、是个By 的区别

Sort By : 分区内有序 order By :全局有序,只有一个Reduce Distrbute By: 类似MR中Partition,进行分区,结合sort by使用。 Cluster By : 当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。

七、Hive的优化(重点)

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

  1. 在Select中,只拿需要的列,如果有,尽量使用分区过滤,少用select
  2. 在分区剪裁中,当使用外关联是,如果将副标的过滤条件写在where后面那么就会先全表关联,之后再过滤。 采用分区技术

3、合理设置Map数 通常情况下,作业会通过input的目录产生一个或多个map任务

  • 主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小。

是不是Map数越多越好?

  • 如果一个任务有很多个小文件,则每个小文件也会被当做成一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时执行的map数是受限的。

是不是保证每个map处理接近128m的文件块,就高枕无忧了?

  • 不一定
  • 比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或两个小段,却又几个千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。

4、小文件合并

在Map执行前合并小文件,减少map数,CombineHiveInputFormat具有对小文件进行合并的功能(系统默认的格式),HiveInputFormat没有对小文件合并功能。

5、合理设置Reduces数 reduce个数并不是越多越好

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

八、Hive有哪些保存元数据的方式,个有什么特点

  • 内存数据库derby,按照小,但是数据存在内存,不稳定
  • MySQL数据库,数据存储模式可以自己设置,持久化号,查看方便

九、hive的分区及其优势

  • hive中数据库,表,及分区都是在HDFS存储的一个抽象
  • hive中的一个分区对应的就是HDFS的一个目录,目录名就是分区字段
  • 如果一个表中有大量的数据,我们全部拿出来做查询的功能,耗时比较长,查询比较慢
  • 使用了分区,就可以做到用到了那个分区就拿那个分区中的数据,方便了查询,提高了查询的效率

十、Hive用的存储格式,存储格式的区别,然后介绍下压缩

存储格式

  • 默认是TextFile
  • ORC 压缩比比较高
  • Parquet 二进制存储,面向分析性的存储格式

压缩

  • 我们原始数据使用的是LZO压缩格式,因为原始数据比较大,所以选择了支持切割的LZO压缩

  • 清洗过的数据存到DWD层,我们在DWS中需要对清洗后的数据进行分析,所以我们DWD层使用的存储格式是parquet,压缩格式是Snappy

  • 之前我们压缩还遇到过一个问题,当时项目组组长让我们使用snappy+ORC存储,结果我发现使用snappy+ORC存储比ORC单独存储还多占用了近一半的空间,后来我又对各个压缩格式及存储格式的结合做了一个测试,最终单独使用ORC存储,节省了大量的空间。

福利

微信搜索【大数据老哥】即可获取一下内容 本行福利【回复:hive函数大全即可获取超级详细文档一份在这里插入图片描述 在这里插入图片描述