大数据面试题(五)----HIVE面试题

2023-11-13

版权声明:本文为CSDN博主「北京小辉」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/silentwolfyh/article/details/103864595
———————————————————————————————————

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”。

大数据面试宝典目录,请点击

HIVE面试题目录

1. Hive 表关联查询,如何解决数据倾斜的问题?
2. 请谈一下Hive 的特点,Hive 和RDBMS 有什么异同?
3. 请说明hive 中Sort By , Order By , Cluster By ,Distrbute By 各代表什么意思?
4. 简要描述数据库中的null,说出null 在hive 底层如何存储,并解释select a.* from t1 a left outer join t2 b on a.id=b.idwhere b.id is null; 语句的含义?
5. 写出hive 中split、coalesce 及collect_list 函数的用法(可举例)?
6. Hive 有哪些方式保存元数据,各有哪些特点?
7. Hive 内部表和外部表的区别?
8. Hive 的HSQL 转换为MapReduce 的过程?(☆☆☆☆☆)
9. Hive 底层与数据库交互原理?(☆☆☆☆☆)
10. Hive join 过程中大表小表的放置顺序?
11. Hive 的两张表关联,使用MapReduce 怎么实现?(☆☆☆☆☆)
12. Hive 中使用什么代替in 查询?
13. 所有的Hive 任务都会有MapReduce 的执行吗?
14. Hive 的函数:UDF、UDAF、UDTF 的区别?
15. 说说对Hive 桶表的理解?
16. Hive 自定义UDF 函数的流程?


1. Hive 表关联查询,如何解决数据倾斜的问题?(☆☆☆☆☆)

1) 倾斜原因:
       map 输出数据按key Hash 的分配到reduce 中,由于key 分布不均匀、业务数据本身的特、建表时考虑不周、等原因造成的reduce 上的数据量差异过大。
(1) key 分布不均匀;
(2) 业务数据本身的特性;
(3) 建表时考虑不周;
(4) 某些SQL 语句本身就有数据倾斜;
       如何避免:对于key 为空产生的数据倾斜,可以对其赋予一个随机值。
2) 解决方案
(1) 参数调节:
       hive.map.aggr = true
       hive.groupby.skewindata=true
       有数据倾斜的时候进行负载均衡,当选项设定位true,生成的查询计划会有两个MR Job。第一个MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key 有可能被分发到不同的Reduce 中,从而达到负载均衡的目的;第二个MR Job 再根据预处理的数据结果按照Group By Key 分布到Reduce 中(这个过程可以保证相同的Group By Key 被分布到同一个Reduce 中), 最后完成最终的聚合操作。
(2) SQL 语句调节:
       ① 选用join key 分布最均匀的表作为驱动表。做好列裁剪和filter 操作,以达到两表做join 的时候,数据量相对变小的效果。
       ② 大小表Join:使用map join 让小的维度表(1000 条以下的记录条数)先进内存。在map 端完成reduce.
       ③ 大表Join 大表:把空值的key 变成一个字符串加上随机数,把倾斜的数据分到不同的reduce 上,由于null 值关联不上,处理后并不影响最终结果。
       ④ count distinct 大量相同特殊值:count distinct 时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理, 直接过滤,在最后结果中加1。如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union。

2. 请谈一下Hive 的特点,Hive 和RDBMS 有什么异同?

       hive 是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql 查询功能,可以将sql 语句转换为MapReduce 任务进行运行。其优点是学习成本低,可以通过类SQL 语句快速实现简单的MapReduce 统计,不必开发专门的MapReduce 应用,十分适合数据仓库的统计分析,但是Hive 不支持实时查询。
       Hive 与关系型数据库的区别:
在这里插入图片描述

3. 请说明hive 中Sort By , Order By , Cluster By ,Distrbute By 各代表什么意思?

        order by: 会对输入做全局排序,因此只有一个reducer(多个reducer 无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
        sort by: 不是全局排序,其在数据进入reducer 前完成排序。
        distribute by:按照指定的字段对数据进行划分输出到不同的reduce 中。
        cluster by:除了具有distribute by 的功能外还兼具sort by 的功能。

4. 简要描述数据库中的null,说出null 在hive 底层如何存储,并解释select a.* from t1 a left outer join t2 b on a.id=b.idwhere b.id is null; 语句的含义?

       null 与任何值运算的结果都是null, 可以使用is null、is not null 函数指定在其值为null 情况下的取值。
       null 在hive 底层默认是用’\N’ 来存储的, 可以通过alter table test SETSERDEPROPERTIES(‘serialization.null.format’ = ‘a’);来修改。查询出t1 表中与t2 表中id 相等的所有信息。

5. 写出hive 中split、coalesce 及collect_list 函数的用法(可举例)?

       split 将字符串转化为数组,即:split(‘a,b,c,d’ , ‘,’) ==> [“a”,“b”,“c”,“d”]。
       coalesce(T v1, T v2, …) 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL。
       collect_list 列出该字段所有的值,不去重select collect_list(id) from table。

6. Hive 有哪些方式保存元数据,各有哪些特点?

       Hive 支持三种不同的元存储服务器,分别为:内嵌式元存储服务器、本地元存储服务器、远程元存储服务器,每种存储方式使用不同的配置参数。
       内嵌式元存储主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby 是内嵌式元存储的默认数据库。
       在本地模式下,每个Hive 客户端都会打开到数据存储的连接并在该连接上请求SQL 查询。
       在远程模式下,所有的Hive 客户端都将打开一个到元数据服务器的连接,该服务器依次查询元数据,元数据服务器和客户端之间使用Thrift 协议通信。

7. Hive 内部表和外部表的区别?

       创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
       删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

8. Hive 的HSQL 转换为MapReduce 的过程?(☆☆☆☆☆)

       HiveSQL ->AST( 抽象语法树) -> QB( 查询块) ->OperatorTree ( 操作树) -> 优化后的操作树->mapreduce 任务树->优化后的mapreduce 任务树
在这里插入图片描述

过程描述如下:
        SQL Parser:Antlr 定义SQL 的语法规则,完成SQL 词法,语法解析,将SQL 转化为抽象语法树AST Tree;
        Semantic Analyzer:遍历AST Tree,抽象出查询的基本组成单元QueryBlock;
        Logical plan:遍历QueryBlock,翻译为执行操作树OperatorTree;
        Logical plan optimizer: 逻辑层优化器进行OperatorTree 变换, 合并不必要的ReduceSinkOperator,减少shuffle 数据量;
        Physical plan:遍历OperatorTree,翻译为MapReduce 任务;
        Logical plan optimizer:物理层优化器进行MapReduce 任务的变换,生成最终的执行计划;

9. Hive 底层与数据库交互原理?(☆☆☆☆☆)

        由于Hive 的元数据可能要面临不断地更新、修改和读取操作,所以它显然不适合使用Hadoop 文件系统进行存储。目前Hive 将元数据存储在RDBMS 中,比如存储在MySQL、Derby 中。元数据信息包括:存在的表、表的列、权限和更多的其他信息。

在这里插入图片描述在这里插入图片描述

10. Hive join 过程中大表小表的放置顺序?

       将最大的表放置在JOIN 语句的最右边,或者直接使用/*+ streamtable(table_name) */指出。
       在编写带有join 操作的代码语句时,应该将条目少的表/子查询放在Join 操作符的左边。因为在Reduce 阶段,位于Join 操作符左边的表的内容会被加载进内存,载入条目较少的表可以有效减少OOM(out of memory)即内存溢出。所以对于同一个key 来说,对应的value 值小的放前,大的放后,这便是“小表放前”原则。若一条语句中有多个Join, 依据Join 的条件相同与否,有不同的处理方法。

11. Hive 的两张表关联,使用MapReduce 怎么实现?(☆☆☆☆☆)

       如果其中有一张表为小表,直接使用map 端join 的方式(map 端加载小表)进行聚合。
       如果两张都是大表,那么采用联合key,联合key 的第一个组成部分是join on 中的公共字段,第二部分是一个flag,0 代表表A,1 代表表B,由此让Reduce 区分客户信息和订单信息;在Mapper 中同时处理两张表的信息,将join on 公共字段相同的数据划分到同一个分区中,进而传递到一个Reduce 中,然后在Reduce 中实现聚合。

12. Hive 中使用什么代替in 查询?

       在Hive 0.13 版本之前,通过left outer join 实现SQL 中的in 查询,0.13 版本之后,Hive 已经支持in 查询。

13. 所有的Hive 任务都会有MapReduce 的执行吗?

       不是,从Hive0.10.0 版本开始,对于简单的不需要聚合的类似SELECT from

LIMIT n 语句,不需要起MapReduce job,直接通过Fetch task 获取数据。

14. Hive 的函数:UDF、UDAF、UDTF 的区别?

       UDF: 单行进入,单行输出
       UDAF: 多行进入,单行输出
       UDTF: 单行输入,多行输出

15. 说说对Hive 桶表的理解?

       桶表是对数据进行哈希取值,然后放到不同文件中存储。
       数据加载到桶表时,会对字段取hash 值,然后与桶的数量取模。把数据放到对应的文件中。物理上,每个桶就是表(或分区)目录里的一个文件,一个作业产生的桶(输出文件)和reduce 任务个数相同。
       桶表专门用于抽样查询,是很专业性的,不是日常用来存储数据的表,需要抽样查询时, 才创建和使用桶表。

16. Hive 自定义UDF 函数的流程?

1) 写一个类继承(org.apache.hadoop.hive.ql.)UDF 类;
2) 覆盖方法evaluate();
3) 打JAR 包;
4) 通过hive 命令将JAR 添加到Hive 的类路径:
       hive> addjar /home/ubuntu/ToDate.jar;
5) 注册函数:
       hive> create temporary function xxx as ‘XXX’;
6) 使用函数;
7)[可选] drop 临时函数;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据面试题(五)----HIVE面试题 的相关文章

随机推荐

  • 关于Keil不识别系统头文件core_cm3.h的问题

    之前遇到一次这个问题 解决了 之后又遇到一次就忘了之前是怎么解决的了 所以记录一下 所有不识别系统头文件的问题都可以用这种方式解决 找到你工程目录下的头文件 我以core cm3 h为例 这个头文件在STM32 LIBRARY CMSIS
  • 这8点能教你如何更好地阅读代码

    我讨厌阅读别人的代码 是所有经验层级上的软件开发人员之间普遍存在的问题 然而 这又是一个必要的技能 特别是对于开发人员进入到现有的代码库中的时候 如果你以正确的角度和正确的工具来处理它 这可能是一个愉快和有启发性的体验 我们讨厌阅读别人的代
  • 类变量类型

    1 局部变量 在方法 构造方法 语句块中定义的变量 其声明和初始化在方法中实现 在方法结束后自动销毁 public class ClassName public void printNumber int a 其他代码 2 成员变量 定义在类
  • 解决jar包启动关闭窗口后停止项目问题

    项目以jar形式部署到服务器 通常会以这样的形式 java jar zpw 2 2 5 RELEASE jar 问题 当我们一关闭当前窗口就会停止运行项目 解决思路 在后台运行 解决方法 nohup java jar zpw 2 2 5 R
  • 计算次对角线元素平均值、折半查找(二分查找)、冒泡排序

    一 计算次对角线元素平均值 首先从键盘输入方阵的行数n 然后输入n行n列的整数保存到数组a中 最后计算方阵中次对角线元素的平均值并输出 输入格式 第一行输入方阵行数n 以下n行每行输入n个整数 以空格间隔 输出格式 输出平均值 保留两位小数
  • python之赋值、浅拷贝和深拷贝

    概念 python中的对象包含三个属性 id type和value id代表着对象唯一的标识符 是独一无二的 cpython中代表了存放对象的内存地址 type代表着对象的类型 比如说数字1的type就是int 字符串 abc 的type就
  • archetype-catalog.xml下载

    archetype catalog xml下载 archetype catalog xml下载 archetype catalog xml下载 https pan baidu com s 1HPjvvcOPv8vFPq31sANWng 提取
  • AOP-Chap17-Templates

    Chap17 Templates 1 Templated Functions 1 1 Instantiating Templated Functions 2 Templated Classes 2 1 Templates as Templa
  • SQli-labs 进阶 21-38关

    SQli labs 进阶 21 38关 LESS 21 拼接方式 id id 21关和20关本质上没有区别 但是是使用base64进行了编码 使用burp进行抓包 可以很明显看到 uname值为一串编码 利用burp自带的编码工具进行解码
  • SELECT连接查询和嵌套查询

    连接查询 同时涉及到两个及以上表的查询 语句 SELECT lt 列名1 gt lt 列名2 gt FROM lt 表1 gt lt 表2 gt lt 表3 gt WHERE lt 表名1 gt lt 列名1 gt lt 比较运算符 gt
  • mc服务器配置文件leveltype,zimg 服务器配置文件

    1 zimg server config 2 3 server config 4 是否后台运行 5 is daemon 1 6 绑定IP 7 ip 0 0 0 0 8 端口 9 port 4869 10 运行线程数 默认值为服务器CPU数
  • Python爬虫实战 爬取同城艺龙酒店信息

    1 爬虫说明 同城艺龙的反爬做的是非常好的 本博主在与同城艺龙进行了一整天的殊死搏斗才将其完全的爬下来 本博主是以无锡为例 将无锡的所有酒店的相关信息都爬了下来 共3399条酒店数据 当然其他城市也是可以的 只需要修改指定字段即可 本博主是
  • 阿里云视频vod.cn-beijing.aliyuncs.com (Domain name not found)

    今天edusoho网校系统突然爆 An exception has been thrown during the rendering of a template Server unreachable Errno 6 Could not re
  • Dynamics CRM 后台代码如何发邮件《 中秋快乐!》

    前面搞了邮箱的配置 那么就可以借助Dynamics CRM工作流来给用户发邮件了 比如签核提醒 什么的 对于这些收件人简单的固定且存在CRM中 比如用户或者联系人的 通过配置就可以实现 但是当邮件通知的人不在CRM中或者收件人cc复杂时 无
  • 记录xss练习 level1-level5(一)

    练习网址 http test xss tv 本人菜鸟一枚 如有分析不对的地方 望前辈们指正 话不投机 不对 话不多说直接上图 上分析 level1 很简单的一道题 从URL中我们可以分析到 xxx level1 php name test
  • 图像处理学习路线总结 python

    记录一下我的图像处理学习路线 后续有其他想法了再补充 目录 1 图像处理基础知识 1 1 数字图像处理公开课 2 利用opencv进行实现 2 1 在pycharm里安装opencv库 2 2 图像处理基础操作 2 2 1 读取图片 2 2
  • Android 控件最上层显示方法

    view bringToFront 可以讲布局在下层的控件放到上层 不被其他控件挡住
  • rails的一点点认识

    1 会开创新项目 rails new 名称 2 会创建控制类 rails g generate controller 类名 html文件名 3 会创建model rails g generate model 名称 散列属性key value
  • ipsec openswan资料搜集

    http blog csdn net rosetta article category 1190390 http blog chinaunix net uid 127037 list 1 html sid 136058 http blog
  • 大数据面试题(五)----HIVE面试题

    版权声明 本文为CSDN博主 北京小辉 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net silentwolfyh article details 103