Hive面试汇总(2021)

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

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

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():排序相同时序号重复,总序数不变

dense_rank():排序相同时序号重复时,总序数减少

select name,subject,scorerow_number() over(partition by subject order by score desc) rn,rank() over(partition by subject order by score desc) r,dense_rank() over(partition by subject order by score desc) dr
from student_score;

name

subject

score

rn

r

dr

Zhang

English

84

1

1

1

Qian

English

84

2

1

1

Shun

English

78

3

3

2

Li

English

69

4

4

3

Math

6. Hive中常用的系统函数有哪些

  1. date_add(str,n)、date_sub(str,n) 加减时间
  2. next_day(to_date(str),’MO’) 周指标相关,获取str下周一日期
  3. date_format(str,’yyyy’) 根据格式整理日期
  4. last_day(to_date(str)) 求当月最后一天日期
  5. collect_set(col) 收集数据返回一个以逗号分割的字符串数组
  6. get_json_object(jsondata,’$.object’) 解析json,使用'$. object’获取对象值
  7. NVL(str,replace) 空字段赋值,str为空返回replace值;两个都为空则返回null

7. Hive如何实现分区

  1. 建表:create table tablename(col1 string) partitioned by(col2 string);
  2. 添加分区:alter table tablename add partition(col2=’202101’);
  3. 删除分区:alter table tablename drop partition(col2=’202101’);

8. Hive导入数据的五种方式

1. Load方式,可以从本地或HDFS上导入,本地是copy,HDFS是移动

本地:load data local inpath ‘/root/student.txt’ into table student;
HDFS:load data inpath ‘/user/hive/data/student.txt’ into table student;

2. Insert方式,往表里插入

insert into table student values(1,’zhanshan’);

3. As select方式,根据查询结果创建表并插入数据

create table if not exists stu1 as select id,name from student;

4. Location方式,创建表并指定数据的路径

create external if not exists stu2 like student location '/user/hive/warehouse/student/student.txt';

5. Import方式,先从hive上使用export导出在导入

import table stu3 from ‘/user/export/student’;

9. Hive导出数据的五种方式

1. Insert方式,查询结果导出到本地或HDFS

Insert overwrite local directory ‘/root/insert/student’ select id,name from student;
Insert overwrite directory ‘/user/ insert /student’ select id,name from student;

2. Hadoop命令导出本地

hive>dfs -get /user/hive/warehouse/student/ 000000_0  /root/hadoop/student.txt

3. hive Shell命令导出

]$ bin/hive -e ‘select id,name from student;’  > /root/hadoop/student.txt

4. Export导出到HDFS

hive> export table student to ‘/user/export/student’;

5. Sqoop导出

10. Hive的窗口函数有哪些

在SQL处理中,窗口函数都是最后一步执行,仅位于order by之前

over():指定分析函数工作的数据窗口大小随行变化(跟在聚合函数 [wh2]后面,只对聚合函数有效)

current row 当前行

n preceding 往前n行数据

n following 往后n行数据

unbounded:

unbounded preceding 从前面开始 |————>

unbounded following 直到终点     ————>|

lag(col,n) 往前第n行数据

lead(col,n) 往后第n行数据

ntile(n) 把有序分区中的行分化到n个数据组中,各组的编号从1开始,ntile会返回每行所属的组编号(n为int类型)

举例说明:

select name,orderdate,cost,sum(cost) over() as sp1, --所有行相加sum(cost) over(partition by name) as sp2, --按名字分组,组内相加sum(cost) over(partition by name order by orderdate) as sp3, --按名字分组并按时间排序sum(cost) over(partition by name order by orderdaterows between unbounded preceding and current row)as sp4,--由起点到当前行的聚合sum(cost) over(partition by name order by orderdaterows between 1 preceding and current row)as sp5, --由当前一行到当前行的聚合sum(cost) over(partition by name order by orderdaterows between 1 preceding and 1 following)as sp6, --由当前行到前后一行的聚合sum(cost) over(partition by name order by orderdaterows between current row and unbouded following)as sp7--由当前行到后面所有行的聚合
from business;

*注:sp3和sp4结果一样,因为根据order by升序逐渐依次增加

查看顾客上次和下次的购买时间

select name,orderdate,cost,lag(orderdate,1) over(distribute by name sort by orderdate)as sp1,--上次购买时间lead(orderdate,1) over(distribute by name sort by orderdate)as sp2--下次购买时间
from business;

查询前20%时间的订单信息

select * from (select name,orderdate,cost, ntile(5) over(order by orderdate) sortedfrom business
) t
where sorted = 1;

11. 如何自定义UDF,UDTF函数

用UDF函数解析公共字段,用UDTF函数解析事件字段

自定义UDF:继承UDF,重写evaluate方法

自定义UDTF:继承GenericUDTF,重写3个方法,initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close


[wh1]A(atomicity)原子性:事务操作要么全部做完,要么不做

C(consistency)一致性:事务运行期间,数据对象依然完整性

I(isolation)独立性:并发事务之间不会相互影响

D(durability)持久性:一旦事务提交后,修改将永久保存在数据库上

[wh2]聚合函数:count,sum,avg,min,max

Hive面试题汇总(2021)相关推荐

  1. Android中高级面试题汇总(2021年)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxOXzNuG-1616402294221)(https://i.loli.net/2020/12/28/hWJbL4p ...

  2. Java面试题汇总2021最新(集合泛型含答案下载)

    Java面试题及答案2021最新24题(集合&泛型) 最近给大家整理了一批Java面试题一共24题,主要是搜集的Java集合&泛型这块的,是20201最新时间整理的,并且都含答案打包下 ...

  3. Hive面试题精选-2021

    文章目录 一,Hive是什么,和DBMS有什么异同? 二,sort by.order by.partition by.cluster by有什么区别 三,解释`select a.* from t1 a ...

  4. Redis高频面试题汇总(2021最新版)

        本文已收录于专栏 ⭐️<Redis面试题汇总--2021最新版本>⭐️ 上千人点赞收藏,全套Redis高频面试题,大厂必备技能! 面试官心理分析 从面试官的角度分析,出这道题的目的 ...

  5. Java面试题汇总及答案2021最新(序列化含答案)

    Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...

  6. Java面试题汇总及答案2021最新(ioNio)

    Java面试题汇总及答案2021最新(io&Nio) 最近给大家整理了一批Java关于io和nio的面试题一共15题,是20201最新时间整理的,并且都含答案打包下载. 适宜阅读人群 需要面试 ...

  7. Java常见面试题,2021年及答案汇总

    Java常见面试题,2021年及答案汇总 其实,博主还整理了,更多大厂面试题,直接下载吧 下载链接:高清172份,累计 7701 页大厂面试题 PDF 1.什么是ThreadPoolExecutor? ...

  8. 2021软件测试面试题汇总【备战金九银十】内容较长建议收藏

    一.面试基础题 简述测试流程: 1.阅读相关技术文档(如产品PRD.UI设计.产品流程图等). 2.参加需求评审会议. 3.根据最终确定的需求文档编写测试计划. 4.编写测试用例(等价类划分法.边界值 ...

  9. 2021前端react面试题汇总

    2021前端react面试题汇总 React视频讲解 点击学习 全部视频:点击学习 (1)共同点 为了解决状态管理混乱,无法有效同步的问题统一维护管理应用状态; 某一状态只有一个可信数据来源(通常命名 ...

  10. 2020年河北计算机单招试题,2021年河北单招试题汇总

    2021年高职单招升学一对一咨询潘老师:15123233864(微信) 2021年河北单招试题汇总 2020年单招已经结束,www.danzhaowang.com(高职单招网)为大家整理了2020年的 ...

最新文章

  1. 百度程序员哀叹:回老家发现村里很多人开保时捷,道奇等豪车,比程序员有钱多了!...
  2. UVa 1057 - Routing
  3. Thrift中实现Java与Python的RPC互相调用
  4. 微服务通信带来的问题
  5. iOS之设置用户头像的圆角
  6. 打开mobilenet——ssd的demo.py显示这样的错误解决方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s
  7. 判断字符串相等能否用==
  8. NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」
  9. 性能优化CPU、内存、磁盘I/O、网络性能相关命令
  10. vscode 配置 git (配置、暂存、推送、拉取、免密)
  11. android studio 设置自动编译_Appium Mac系统 自动测试环境搭建
  12. mysql如何实现逻辑自增_每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?
  13. linux那些事之early pape fault
  14. 12月9日10日 总结
  15. linux系统批量杀掉进程命令,[Linux]使用awk批量杀进程的命令
  16. vue slot插槽_Vue之路 | 08vue插槽slot使用
  17. 不动点迭代法的收敛阶
  18. 过程FMEA(PFMEA)步骤一:策划与准备
  19. 如何使用记事本和cmd执行java代码
  20. C语言match函数的定义与用法,Match函数的基本用法

热门文章

  1. CDA Level1复盘总结
  2. JS基础知识大总结史上最全(已完结~)
  3. 爱普生690k打印针测试软件_打印机断针测试软件下载
  4. android圆饼图占比
  5. C++ 实现单例模式的代码。
  6. 新安装IAR打开现有工程
  7. SAP FICO面试题
  8. android 极光推送1011,极光推送 · OpenKit使用手册 · 看云
  9. gms认证流程_GMS测试认证的具体操作流程
  10. 下载 Flash Player 强制跳转至 flash.cn,无法下载国际版 Flash 解决方法