Hive面试题汇总(2021)

Hive面试汇总(2021)

1. 简述Hive主要架构及解析成MR的过程

Hive元数据默认存储在derby数据库,不支持多客户端访问,所以需要将元数据存储在MySQL中,才支持多客户端访问。主要架构如下:

Hive面试题汇总(2021)_第1张图片

Hive解析成MR的过程:

       Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据(metastore),经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成mapreduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。

2. Hive与传统数据库的区别

Hive和数据库除了拥有类型的查询语言外,无其他相似

  1. 存储位置:Hive数据存储在HDFS上。数据库保存在块设备或本地文件系统
  2. 数据更新:Hive不建议对数据改写。数据库通常需要经常修改
  3. 执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
  4. 执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现优势了。数据库执行延迟较低
  5. 数据规模:hive大规模的数据计算。数据库能支持的数据规模较小
  6. 扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义[wh1] 的严格限制,扩展有限

3. Hive内部表和外部表的区别

  1. 存储:外部表数据由HDFS管理;内部表数据由hive自身管理
  2. 存储:外部表数据存储位置由自己指定(没有指定location则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir(默认在/uer/hive/warehouse)
  3. 创建:被external修饰的就是外部表;没被修饰是内部表
  4. 删除:删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据

4. Hive中order by,sort by,distribute by和cluster by的区别

  1. order by:对数据进行全局排序,只有一个reduce工作
  2. sort by:每个mapreduce中进行排序,一般和distribute by使用,且distribute by写在sort by前面。当mapred.reduce.tasks=1时,效果和order by一样
  3. distribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
  4. cluster by:当distribute by和sort by的字段相同时,可以使用cluster by代替,但cluster by只能是升序,不能指定排序规则

在生产环境中order by使用的少,容易造成内存溢出(OOM)

生产环境中distribute by和sort by用的多

5. row_number(),rank()和dense_rank()的区别

都有对数据进行排序的功能

row_number():根据查询结果的顺序计算排序,多用于分页查询

rank():排序相同时序号重复,总序数不变<

你可能感兴趣的:(大数据-Hive,hive)