大数据面试之Hive常见题目

news2025/1/20 10:45:29

大数据面试之Hive常见题目

1. Hive的架构

在这里插入图片描述

1、重点四个器:解释器(SQL Parser)、Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor)

相关解释:
Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 
Hive 的核心是驱动引擎, 驱动引擎由四部分组成: 
(1) 解释器(SQL Parser):解释器的作用是将 Hive QL 语句转换为抽象语法树(AST) 
(2) 编译器(Compiler):编译器是将语法树编译为逻辑执行计划 
(3) 优化器(Query Optimizer):优化器是对逻辑执行计划进行优化
(4) 执行器(Executor):执行器是调用底层的运行框架执行逻辑执行计划 

2、执行流程

Hive QL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生一个 MapReduce 任务

2. Hive和数据库比较

在这里插入图片描述

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

主要如下:

1、删除数据时
内部表:元数据和原始数据,全部删除
外部表:只删除元数据

2、在公司生产环境下,什么时候创建内部表,什么时候创建外部表?
在公司中绝大多数场景都是外部表;
一般情况自己使用的临时表,才会创建内部表。

4. 4个By区别

1)Order By:全局排序,只有一个Reducer。给所有的数据都聚合到这里Reducer里面进行处理,这种情况要慎用,所有企业数据过来很容易就OOM了;

2)Sort By:分区内有序;

3)Distrbute By:分区,类似MR中Partition,结合Sort By使用。

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

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

5. 系统函数

1、date_add、date_sub函数(加减日期)

2、last_day函数(求当月最后一天日期)

3、next_day函数(周指标相关)

4、date_format函数(根据格式整理日期)

5、get_json_object函数 (解析json函数)

6、concat 拼接函数

7、explode 炸裂函数

8、NVL(表达式1,表达式2) 判断空的函数。如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。

6. 自定义UDF、UDTF函数

1、在项目中是否自定义过UDF、UDTF函数,以及用他们处理了什么问题,及自定义步骤?

(1)UDF函数是一行输入,一行输出,有些类似于map,是对结构进行变换;项目中用UDF函数解析公共字段。
UDTF函数是一行输入,多行输出,类似于flatmap ;项目中用UDTF函数解析事件字段。
UDAF函数是多行输入,一行输出,类似于sum等聚合函数。企业中用的少,使用步骤比较繁琐。

(2)自定义UDF
老版本方式:继承UDF,重写evaluate方法。
新版本方式:继承自GenericUDF,重写3个方法:其中最重要的一个方法就是evaluate方法。

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

(4)自定义函数写完之后,打包上传到HDFS的干净的路径,然后在Hive的客户端进行注册即可使用。

(5)注意自定义函数在Shell脚本中使用的时候,要在函数的前面加上库名,否则会报函数找不到的问题。

2、为什么要自定义UDF/UDTF?

自定义函数,可以自己埋点日志,方便打印日志,方便查看出错信息或者数据异常信息,方便调试。
另外极少数的情况可能内置函数不能处理业务逻辑。

7. 窗口函数

1、 OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化

(1)CURRENT ROW:当前行

(2)n PRECEDING:往前n行数据

(3) n FOLLOWING:往后n行数据

(4)UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面起点, UNBOUNDED FOLLOWING表示到后面终点

(5) LAG(col,n):往前第n行数据

(6)LEAD(col,n):往后第n行数据

(7) NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n为int类型。

2、Rank

(1)RANK() 排序相同时会重复,总数不会变

(2)DENSE_RANK() 排序相同时会重复,总数会减少

(3)ROW_NUMBER() 会根据顺序计算

8. Hive数据倾斜

1、数据倾斜

某些任务的运行市场源源大于其他的任务运行时长,比如在有的企业中定义时间是20倍以上,就认为发生了数据倾斜。

2、怎么产生的数据倾斜

(1)不同数据类型关联产生数据倾斜

情景:比如用户表user中user_id字段为int,log表中user_id字段string类型。当按照user_id进行两个表的Join操作时候比较容易发生数据倾斜。

解决方式:把数字类型转换成字符串类型

select * from user a

left outer join log b

on a.user_id = cast(b.user_id as string)

(2)空值分布也易发生数据倾斜

比如一些爬取数据,可能爬取过来的很多核心字段都是空的,这个时候比如聚合join的话,大量空值数据进入到一个reduce中去,导致数据倾斜。

解决办法:

如果不需要的异常值,可以直接给空值过滤掉。或者自定义分区,将为空的key转变为字符串加随机数或纯随机数,将因空值而造成倾斜的数据分布到多个Reducer。

小总结:对于异常值如果不需要的话,最好是提前在where条件里过滤掉,这样可以使计算量大幅度减少。

3、还有一些常见的数据倾斜现象及解决方法

(1)group by id 的时候产生数据倾斜

①按照id分组计算count值。 有单个key的,有多个key的

②单个key

​ 加随机数,双重聚合。

​ 配置参数,双重聚合 ,可以使用参数: set hive.groupby.skewindata = true; 这个参数就是设置自动二次聚合。

​ 过滤出来这个key单独处理。

③多个key

​ 增加Reducer的个数,一定程度上解决了问题。

​ 自定义分区器。

​ 加随机数,双重聚合。

(2)Join on关联字段

①大表 Join 小表

​ 开启MapJoin,这个时候使用MapJoin给小表缓存到Map阶段,进行处理,避免了数据倾斜。

②大表 Join 大表

转化为多个 大表Join 小表

比如说给a表加上溢写随机数分开,给b表进行扩容。

9. Hive优化

见单独的 Hive优化 文档

10 Hive相关的补充性知识

分隔符字段提前处理、元数据备份等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python+Django的在线学习交流平台

在各学校的教学过程中,直播授课管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的直播学习模式,“基于网络的直播教学平台”的研究和设计也成为教育技术领域的热点课题。采…

BEPUphysicsint定点数3D物理引擎介绍

帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如何在你的项目中内置一个确定性物理引擎。确定性物理引擎我们使用git…

es入门(中)

目录 6.Java api 实现es中的文档管理(增删改) 6.1 java 客户端简单获取数据 6.2结合spring-boot测试文档查询 配置环境 配置类 测试代码结构 简单的查询 对查询的请求设置参数 异步查询 6.4 结合spring-boot测试文档新增 6.5结合spring-boot…

C语言的预处理器无法先展开宏再拼接符号?可以!

背景 最近接到一个需求,要实现一个脚本,能提取.h文件里定义的所有全局变量的值,这些全局变量都是结构体变量,名字是结构体类型名加场景后缀——每个.h对应的场景都是唯一的,所以.h内所有变量名的后缀一致。 我的解决…

线段树详解(包含加法线段树、乘法线段树及区间根号线段树,简单易懂)

同步发表于洛谷梦回江南 这一篇文章我们将对线段树中的常规操作进行详细的讨论。 以下所提到的复杂度如无特殊说明均为时间复杂度。log⁡\loglog 的底数均为 222。 不开 long long 见祖宗! 文章目录第一部 普通线段树一、引入二、优化方案三、懒标记(l…

[附源码]Python计算机毕业设计电影网站系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

什么是编程的设计模式,史上最全面Java设计模式总结,看完再也不会忘记

文章目录**9.1 工厂方法模式与抽象工厂模式对比#****9.2 简单工厂模式与单例模式对比#****9.3 简单工厂模式与建造者模式对比#****10.1 装饰器模式与代理模式对比#****10.2 装饰器模式与门面模式对比#****10.3 装饰器模式与适配器模式对比#****10.4 适配器模式与代理模式…

人事管理系统--低代码课程的教学实验/实训教学 (①招聘管理)

人事管理系统是信息系统课程中最为常见的教学场景,对于非计算机专业的学生来说,如何使用低代码,甚至是零代码的方式搭建该系统呢?简道云「人事OA管理」应用包含招聘管理、人员入离职管理、考勤管理、会议室预约、物资进销存管理等…

#3文献学习总结--边缘计算资源分配与任务调度优化

文献:“边缘计算资源分配与任务调度优化综述 ” 1、系统模型“云-边-端” 第 1 层是物联网层,传感器、处理器根据应用需求感知、测量和收集原始数据,在本地处理大量数据或将其上传至计算节点。 第 2 层是边缘计算层,位于互联网边…

rollup打包vue组件

rollup安装与使用 npm i rollup -g # 全局安装 npm i rollup -D # 项目本地安装rollup配置 import vue from rollup-plugin-vue import typescript from rollup-plugin-typescript2 import postcss from rollup-plugin-postcss; import cssnano from cssnano i…

2022华为全球校园AI算法精英赛:季军方案!

Datawhale干货 作者:鲤鱼,西安交通大学,人工智能学院笔者鲤鱼,是西安交通大学人工智能学院的一名研究生,在2022华为全球校园AI算法精英赛的赛道二取得了季军的成绩。初赛阶段一直名列A榜的榜首,复赛前几天也…

zabbix6.0安装教程(二):Zabbix6.0安装最佳实践

zabbix6.0安装教程(二):Zabbix6.0安装最佳实践 目录概述一、Access control1.Zabbix agent 的安全用户2.UTF-8 编码二、Zabbix Security Advisories and CVE database1.为 Zabbix 前端设置 SSL三、Web server hardening1.在 URL 的根目录上启…

[附源码]Python计算机毕业设计SSM基于的开放式实验室预约系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

人家这才叫软件测试工程师,你那只是混口饭吃

前些天和大学室友小聚了一下,喝酒喝大发了,谈天谈地谈人生理想,也谈到了我们各自的发展,感触颇多。曾经找工作我迷茫过、徘徊不,毕业那会我屡屡面试失败,处处碰壁;工作两年后我一度想要升职加薪…

[附源码]Python计算机毕业设计SSM基于的二手车商城(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

第五款!美创数据水印溯源系统通过中国信通院数据安全能力评测

近期,中国信息通信研究院安全研究所发布“数据安全产品能力验证计划”第六期通过企业名单。美创科技数据水印溯源系统顺利通过测试,成为美创第五款通过权威检验测评的数据安全产品! 此前,中国信息通信研究院安全所开展数据安全类产…

分布式系统中的数据复制

什么是数据复制 数据复制是制作数据的多个副本并将其存储在不同位置的过程,用于备份目的、容错和提高它们在网络中的整体可访问性。与数据镜像类似,数据复制可以应用于单个计算机和服务器。复制的数据可以存储在同一系统、现场和非现场主机以及基于云的…

FT 在图形渲染中的应用:基于 FFT 的海浪模拟

接上文:FT 在图像处理中的应用 五、一个大型案例:基于 FFT 的海浪模拟 前置:​​​​​ 傅里叶级数与傅里叶变换离散傅里叶变换(DFT)​​​​​​​​FT 在图像处理中的应用​5.1 FFT 海洋公式:二维 IDFT https://tore.tuhh.de…

Abz-G-F(4NO2)-P-OH, 67482-93-3

Fluorogenic (FRET) substrate for angiotensin I-converting enzyme (ACE). Enzymatic cleavage of Abz-Gly-Nph-Pro yields Abz-Gly-OH emitting at 420 nm. 血管紧张素I转换酶(ACE,ACE2)底物 血管紧张素i转换酶(ACE)的荧光底物。Abz-Gly-N…

docker 报错 No space left on device

问题&#xff1a; 在 Linux 环境上使用 docker 命令 <docker pull 镜像> 拉取镜像的时遇到了 No space left on device 的问题。 排查过程&#xff1a; 初步分析可能是存储镜像的路径磁盘满了。 但是使用 df -h 命令之后&#xff0c;发现磁盘还有空间。于是猜测应该是…