Hive面试题汇总(2021)
Hive面试汇总(2021)
1. 简述Hive主要架构及解析成MR的过程
Hive元数据默认存储在derby数据库,不支持多客户端访问,所以需要将元数据存储在MySQL中,才支持多客户端访问。主要架构如下:
Hive解析成MR的过程:
Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据(metastore),经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成mapreduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。
2. Hive与传统数据库的区别
Hive和数据库除了拥有类型的查询语言外,无其他相似
- 存储位置:Hive数据存储在HDFS上。数据库保存在块设备或本地文件系统
- 数据更新:Hive不建议对数据改写。数据库通常需要经常修改
- 执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
- 执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现优势了。数据库执行延迟较低
- 数据规模:hive大规模的数据计算。数据库能支持的数据规模较小
- 扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义[wh1] 的严格限制,扩展有限
3. Hive内部表和外部表的区别
- 存储:外部表数据由HDFS管理;内部表数据由hive自身管理
- 存储:外部表数据存储位置由自己指定(没有指定location则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir(默认在/uer/hive/warehouse)
- 创建:被external修饰的就是外部表;没被修饰是内部表
- 删除:删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据
4. Hive中order by,sort by,distribute by和cluster by的区别
- order by:对数据进行全局排序,只有一个reduce工作
- sort by:每个mapreduce中进行排序,一般和distribute by使用,且distribute by写在sort by前面。当mapred.reduce.tasks=1时,效果和order by一样
- distribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
- 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中常用的系统函数有哪些
- date_add(str,n)、date_sub(str,n) 加减时间
- next_day(to_date(str),’MO’) 周指标相关,获取str下周一日期
- date_format(str,’yyyy’) 根据格式整理日期
- last_day(to_date(str)) 求当月最后一天日期
- collect_set(col) 收集数据返回一个以逗号分割的字符串数组
- get_json_object(jsondata,’$.object’) 解析json,使用'$. object’获取对象值
- NVL(str,replace) 空字段赋值,str为空返回replace值;两个都为空则返回null
7. Hive如何实现分区
- 建表:create table tablename(col1 string) partitioned by(col2 string);
- 添加分区:alter table tablename add partition(col2=’202101’);
- 删除分区: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)相关推荐
- Android中高级面试题汇总(2021年)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxOXzNuG-1616402294221)(https://i.loli.net/2020/12/28/hWJbL4p ...
- Java面试题汇总2021最新(集合泛型含答案下载)
Java面试题及答案2021最新24题(集合&泛型) 最近给大家整理了一批Java面试题一共24题,主要是搜集的Java集合&泛型这块的,是20201最新时间整理的,并且都含答案打包下 ...
- Hive面试题精选-2021
文章目录 一,Hive是什么,和DBMS有什么异同? 二,sort by.order by.partition by.cluster by有什么区别 三,解释`select a.* from t1 a ...
- Redis高频面试题汇总(2021最新版)
本文已收录于专栏 ⭐️<Redis面试题汇总--2021最新版本>⭐️ 上千人点赞收藏,全套Redis高频面试题,大厂必备技能! 面试官心理分析 从面试官的角度分析,出这道题的目的 ...
- Java面试题汇总及答案2021最新(序列化含答案)
Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...
- Java面试题汇总及答案2021最新(ioNio)
Java面试题汇总及答案2021最新(io&Nio) 最近给大家整理了一批Java关于io和nio的面试题一共15题,是20201最新时间整理的,并且都含答案打包下载. 适宜阅读人群 需要面试 ...
- Java常见面试题,2021年及答案汇总
Java常见面试题,2021年及答案汇总 其实,博主还整理了,更多大厂面试题,直接下载吧 下载链接:高清172份,累计 7701 页大厂面试题 PDF 1.什么是ThreadPoolExecutor? ...
- 2021软件测试面试题汇总【备战金九银十】内容较长建议收藏
一.面试基础题 简述测试流程: 1.阅读相关技术文档(如产品PRD.UI设计.产品流程图等). 2.参加需求评审会议. 3.根据最终确定的需求文档编写测试计划. 4.编写测试用例(等价类划分法.边界值 ...
- 2021前端react面试题汇总
2021前端react面试题汇总 React视频讲解 点击学习 全部视频:点击学习 (1)共同点 为了解决状态管理混乱,无法有效同步的问题统一维护管理应用状态; 某一状态只有一个可信数据来源(通常命名 ...
- 2020年河北计算机单招试题,2021年河北单招试题汇总
2021年高职单招升学一对一咨询潘老师:15123233864(微信) 2021年河北单招试题汇总 2020年单招已经结束,www.danzhaowang.com(高职单招网)为大家整理了2020年的 ...
最新文章
- 百度程序员哀叹:回老家发现村里很多人开保时捷,道奇等豪车,比程序员有钱多了!...
- UVa 1057 - Routing
- Thrift中实现Java与Python的RPC互相调用
- 微服务通信带来的问题
- iOS之设置用户头像的圆角
- 打开mobilenet——ssd的demo.py显示这样的错误解决方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s
- 判断字符串相等能否用==
- NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」
- 性能优化CPU、内存、磁盘I/O、网络性能相关命令
- vscode 配置 git (配置、暂存、推送、拉取、免密)
- android studio 设置自动编译_Appium Mac系统 自动测试环境搭建
- mysql如何实现逻辑自增_每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?
- linux那些事之early pape fault
- 12月9日10日 总结
- linux系统批量杀掉进程命令,[Linux]使用awk批量杀进程的命令
- vue slot插槽_Vue之路 | 08vue插槽slot使用
- 不动点迭代法的收敛阶
- 过程FMEA(PFMEA)步骤一:策划与准备
- 如何使用记事本和cmd执行java代码
- C语言match函数的定义与用法,Match函数的基本用法