IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive相关面试题总结与整理 -> 正文阅读

[大数据]hive相关面试题总结与整理

1.hive中的大表 join 小表的优化

mapjoin用于一个很小的表joinda表的场景 具体的小表的设计由参数hive.mapjoin.smalltable.filesize来决定 默认为25M

hive的0.7版本之后默认为自动转换为mapjoin hive.auto.convert.join=true 设置后会默认设置为true

2.mapjoin:

在map阶段将小表的数据从hdfs上读取到内存中的hash表并且将其转换为哈希表表文件,并进行压缩,当mr任务启动时,将hash文件上传到hadoop分布式缓存 缓存将文件发送到每个mapper的本地磁盘上 这样mapper可以将持久化的缓存文件加载回内存中,之后顺序扫描大表,在map阶段进行join 之后传递给下一个的maoreduce任务 减少昂贵的shuffle操作以及reduce操作

如果hive.auto.convert.join不为true 的时候那么开启 Common Join,在Reduce阶段完成join。并且整个过程包含Map、Shuffle、Reduce阶段。

遇到的问题

当join时出现了空值 而导致了长尾 可以key=随机值来代替

空key如何给随机值?

如果出现了热点值导致的长尾 可以将热点数据与非热点数据分来处理最后再进行合并

多个热点值的group by 怎么处理优化逻辑

3.udf udtf udaf的定义以及区别

udf函数:几位自定义函数

udf:一个数据行的输入 一个数据行的输出

udaf:多个数据行的输入一个数据行输出 聚合

udtf:输入单个数据行,产生多个数据行

4.hive保存元数据的方式

(1)derby (内存)数据库 安装小 但是数据再内存中 不稳定

(2)mysql数据库 存储方式自己设定 持久化好 方便查询

5.hive 的内部表与外部表的区别

内部表:数据加载到hdfs上 删除时元数据以及文件都删除

外部表:数据不加载到hdfs上,删除时只删除表结构

内部表与外部表的使用场景

每天产生的日志文件 储存时建议使用外部表

统计分析时建议使用内部表 数据不需要共享 保存时间较短 用外部表无法删除

6.insertinto override write 区别

insert into将数据插入到表中

override write覆盖之前的内容

7.hive的定义以及功能建表的方式

hive的定义:

hive是一种基于Hadoop的数仓管理工具 能够将结构化的数据文件映射成为一张表 提供类sql 的查询功能

功能:hive针对离线数据进行分析

建表的方式:

(1)直接建表

(2)查询建表法(通过as语句查询语句完成建表,将子查询的结果存在新表内,有数据,一般用于中间表)

(3)like建表法(创建结构完全相同的表 但是 没有数据)

压缩方式:lzo适合文件的处理 压缩率高解压速度快

8.hive建立分区时仍然不能优化查询效率

可以重新建表为分区分桶

9.delect drop truncate的区别

delete 删除数据

drop 删除表

truncate 删掉后再重新构造

10.order by sort by distribute by cluster by的区别

order by只有一个reduce 全局排序 但是输入的规模过大 消耗的时间过长

sort by 不是全局排序 进入到reduce阶段前进行排序

distribute by为了控制再map端如何拆分数据给reduce端 ,通过hash算法产生reduce个数并且进行分发 distribute by 通常与sort by 配合进行使用

当distribute by 与 sort by所指 的字段相同的时候 可以使用cluster by

11.分区表与分桶表的区别以及为什么要分区、分桶?

分区表:将一个大文件储存时分成一个不同的目录进行储存 单分区表 就是一级目录 多分区表就是多级把目录

分通表:原理和hashpartition一样 需要指定分桶的字段以及分桶的个数按照hashpartition进行分桶

区别:储存的方式不同 作用不同

分区表的作用:细化的数据管理 缩小MapReduce所需处理的数据量

分桶表的作用:提高join查询的效率 连接查询时会进行分桶 提高了采样的效率 分桶字段就是连接字段、

有了分区为什么还要分桶?

(1)获取更高的查询效率

(2)使抽样更加的高效(sampling)

分区表依据的不是真实数据的列是伪列而分桶是真实的数据列

12.hive row_number 中的distribute by 与partition by 的区别

定义

partition by 与order by搭配

distribute by 与 sort by 搭配

13 left semi join与left join的区别

(1)因为 left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过,而 join 则会一直遍历。这就导致右表有重复值得情况下 left semi join 只产生一条,join 会产生多条,也会导致 left semi join 的性能更高。

(2)left semi join 是只传递表的 join key 给 map 阶段,因此left semi join 中最后 select 的结果只许出现左表。因为右表只有 join key 参与关联计算了,而left ?join on 默认是整个关系模型都参与计算了

14.hive的join底层的MapReduce是如何实现的

Hive中的Join

Common Join(Reduce阶段完成join)

Map Join(Map阶段完成join)

map阶段:map阶段的输出key值为join on 条件中的列(如果有多个那么这些关联建的组合作为key)输出的value值为join后需要输出的条件或者列 value中还回包括tag表信息用于标记value对应的表 按照key进行排序

shuffle的阶段:根据key取hash值将key、value值通过hash值分发到不同的reduce中

reduce的阶段:根据key完成join操作 并通过tag来识别不同表的数据 合并过程中 将编号去掉

15.group by 为什么需要排序?

为了更好的进行统计

16.hive的执行引擎 以及spark与hive 的区别

hive引擎:mr 基于磁盘 运行速度慢

spark引擎: spark 基于内存的计算 速度较快

遇到的问题:

但是对于超大量的数据 hiveonspark 可能存在oom的情况即内存溢出的情况

17.用什么语句吧文档加载到表中?有几种方式?

(1)从本地导入:load data local +“path”

(2)从hdfs导入:load data inpath +”path“

(3)查询导入:

(4)查询结果的导入:

18.hive的执行流程

19sql 的执行顺序

from where group by having select order by limit

20.left join 中的on 与where的区别

有谓词下推的情况下查询结果没有区别。没有谓词下推的情况下,在执行计划中会对on的条件内的子查询先进行过滤,最后再将结果根据where条件过滤,对于这种情况,应当尽可能的将子查询以及管理表的数据量减少以提升查询性能,避免笛卡尔积等情况。

从功能上来区分,on的结果是临时表,where是对on的临时结果做过滤。

谓词下推:

优化关系 SQL 查询的一项基本技术是,将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块(例如视图),从而能够提早进行数据过滤以及有可能更好地利用索引。

这在分区数据库环境中甚至更为重要,其原因在于,提早进行过滤有可能减少必须在数据库分区之间传递的数据量。

此优化技术在 SQL 中被称为谓词下推(Predicate pushdown) 。

21.hive与传统 的数据库中的区别

22?hive去重的几种方法

distinct,group by与ROW_Number()窗口函数

distinct 必须放在首位 作用范围是后面的所有的字段 不是紧挨着的一个字段

group by 针对的是对group by 后面的所有字段进行去重 并不只对一列去重

23.hivesql的复杂数据类型

array类型:name与locations之间制表符分隔,locations中元素之间逗号分隔

map类型:字段与字段分隔符: “,”;需要map字段之间的分隔符:"#";map内部k-v分隔符:":"

struct类型:字段之间#分割,第二个字段之间冒号分割

24什么情况下回有一个reduce的任务而没有maptask.

hive不仅仅局限于hql 还想提供一个单独的可以运用Java编写自己MapReduce的计算框架

本文针对网上hive模块较为常见的面试题进行了整理与汇总 如有侵权 请联系本人进行删除

邮箱:hanmengzhao666@163.com

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:33:51  更:2021-07-24 11:35:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 1:42:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码