Hive-hive核心面试范围题目整理(数据倾斜、外部表内部表、分区分桶、行转列等)

news2024/9/21 8:02:05

1 hive的优缺点

优点

  • SQL
  • 减少MR的开发难度
  • 使用于实时性不高的数据分析场合
  • 优势处理大数据
  • 自定义函数

缺点

  • Hql表达能力优先:迭代式算法?

  • 处理延迟效率较低,小数据的时候,不如传统数据库

2 对hive的了解

优点+本质:基于hadoop将HQL转换成MR的工具

3. hive架构

  • 用户接口
  • 元数据:表,数据库,字段,表类型,表目录
  • hadoop:hdfs和driver
  • 驱动器:解析器、编译器、优化器、执行器

4. 外部表和内部表区别(高频)

  • 外部表被external修饰
  • 存储管理:外部表hdfs,内部表hive
  • 存储位置:外部表存储可以自己定义,并且可以和其他外部表共享数据
  • 创建表:内部表会将数据移动到所指定的路径,外部表仅仅记录了数据所在路径
  • 删除表:外部表删除元数据,存储数据不会被删除,内部表都会一起删掉,外部表安全
  • 修改表:外部表对分区和表结构进行修改,需要修复MSCK REPAIR TABLE table_name;外部表会直接更改元数据

在这里插入图片描述

5. hive建表语句

在这里插入图片描述

  • create
  • external
  • comment
  • partition by分区
  • clustered by分桶表
  • row format delimited
    • fields terminated by
    • lines terminated by如果没指定会使用SerDe(序列化和反序列化)
    • 分隔符如果特殊可以用multidelimitserde
  • stored as
  • location

6. hive数据倾斜/优化[待完善]

  • 含义:key值的数据过多导致的某几个reduce的节点 运行比较慢

  • 关键词:join、空值、group by维度过小,count distinct特殊值较多

  • 聚合倾斜group by解决

    • 参数调节set hive.map.aggr=true代表开启map端预聚合
    • set hive.groupby.skewindata=true;均衡数据倾斜的配置项
    • 具体:两个MR的job,第一个MR的map的输出结果会随机给到reducer,随机表示可以一定程度达到负载均衡的目的。第二个MR会再去根据预处理结果把相同的key值放到同一个reduce中
  • join倾斜解决

    • join的时候选择join key分布最均衡的表作为驱动表
    • 大小表join让小的表加载到内存中在map段进行join,避免reducer处理,提高效率
    • 大表和大表join:null值不参与运算或者给key值中null值后面加上随机值,不会影响结果
    • 多表join:在原理中也有,可以使用同一列为join条件仅仅会 生成一个MRjob
  • count distinct优化

    • 使用使用count…group by代替count(distinct)。如:即group by在子查询中,再count字段

在这里插入图片描述

  • map阶段优化:可以通过调整map和reduce的个数来进行优化,分别是map.tasks和reducer.tasks,

    • map的个数取决于input的文件数和大小,文件无论大小都会当成一个map任务执行,因此可以在map执行前合并小文件,根据实际环境减少map个数。辩证分析也不是全部是减少,如果一个文件127M但是字段很少,数据很多,需要增大map的个数了

    • 因为有多少reduce就会有多少输出的文件,如果作为下一个的输入文件,也会产生产生小文件,一般调整有几个考虑,根据map的输出估算reduce的个数和实际环境

    • map数量的参数
      在这里插入图片描述

    • reducer数量的参数
      在这里插入图片描述

  • hive输出小文件参数调整

在这里插入图片描述


  • 行列/分区过滤

    • select的时候只拿所需的列
    • 只读所需要的分区,有两个参数,都是默认true
    • 谓词下推,将where写在子查询中,有参数可以调整,尽量将过滤条件提前执行,使得最后参与join的表的数据量更小
    • 少用join,可以转换成case
  • sort by代替order by

    • sort by是保证多个reduce进行排序,并且保证每个reduce有序,可以再加distribute by排序,不加就随机分配
  • 插入数据的时候少用动态分区,可以采用distributed by rand(),可以使得后续处理reduce的数据大致相同

在这里插入图片描述

  • 压缩优化:
    • 设置中间结果压缩,减少数据倾斜以及减少io流和网络传输
    • 使用sequencefile作为表存储,可以减少小文件,二进制kv存储,可以合并。或者是常用testfile以及parquent
  • jvm重用:调节参数增加一个JVM可以执行多个MR job
  • 压箱方法:把倾斜值值拿出来后打上随机值后处理在union回去

7. hive自定义函数

  • 继承UDF类,或者UDAF和UDTF
  • 写代码后打包成jar包并注册该jar文件
  • 为这个类起别名create temporary function as ‘xx’
  • 使用select进行使用

8. hive中有哪些UDF

  • UDF:一进一出,upper
  • UDAF:聚合函数,多进一出,sum/min
  • UDTF:表函数,一进多出,explore,split

9. cluster by,sort by,distributor by,order by区别

  • order by:全局排序,在只有一个reduder的时候使用,数据量大需要时间多
  • sort by:非全局排序,在数据进入reduce前排序,只能保证每个reduce输出有序
  • distributor by:分区排序,按照分区字段进行排序
  • cluster by:distribute by Word sort by Word ASC只能升序

10. 分区和分桶的区别

  • 定义上:
    • 分区相当于在hdfs的子目录中包含了分区对应的名字,子分区就是子目录
    • 分桶在分区表上是根据hash算法进行组织,每个桶有数据,但是数量不一定一致
  • 关系:cluster by:distribute by Word sort by Word ASC只能升序,分区容易数据倾斜,分桶比较平均
  • 关系:外部表和内部表,分区表都是对HDFS上的目录,桶表对应是目录中的文件

11. hive的查询执行流程

  • 用户提交任务给到driver

  • 编译器获取任务后去metastore获取hive的元数据,编译过程:

    • hivesql转换为抽象语法树
    • 遍历抽象语法树,抽象出查询的基本单元queryblock
    • 遍历查询块,翻译为执行操作树operatortree
  • 优化器:

    • 逻辑优化器进行操作数变换,合并不需要的reducesinkoperator,减少shuffle

    • 遍历operatortree翻译成MR生成最终执行计划

  • 最终将计划给回到driver后转交ExcutorEngine去执行,获取元数据,然后交给hadoop那边的jobtracker执行,会直接读取hdfs上的文件进行操作

在这里插入图片描述

12. hive创建表流程

  1. 获取到hive语句的信息,包括表,字段,分区等,先写到元数据中,主要是通过sequence_table中构建对象的ID,然后同步到系统表?
  2. 执行顺序

在这里插入图片描述

13. hivesql的实现原理

  • join

    • 基本原理
      在这里插入图片描述

    • 多表join:如果多表使用同一列进行关联将会被翻译成一个reduce,否则将会被翻译成多个reduce任务,原因是因为多表基于不同的列做join,无法在一轮MR任务中将数据shuffle到reducer中,多表的时候会将中间表缓存在reducer的内存中,然后后面的表会流式的进入进行接下来的任务

    • join的分类:分为map join和common join,如果参数设置的是hive.auto.convert.join = true,那么小表和大表join就会转化成mapjoin,reducer不做join处理。common join就是一般认为的common join了

  • group by

在这里插入图片描述

  • distinct

在这里插入图片描述

  • distinct+count

在这里插入图片描述

14. hive的计算引擎?

  • MR引擎
  • Tez
    • 特点是将原有的map和reduce简化为一个概念:vertex,计算节点被拆分成vertex input,vertex output,sorting,merging,这些元素可以任意组装形成一个大的DAG作业,由map和reduce变成map-reduce-reduce,似流水线,减少了调度
    • yarn依然作为资源调度和管理,但是不是提交到resourcemanager而是AMPoolServer,存放着已经预先启动的Applicationmaster
    • tez针对mapreduce的序列化和反序列化是可以在内存中处理的
  • spark:通过支持DAG作业的计算引擎

15. hive的存储引擎

  • testfile:按行存储,不支持块压缩,磁盘开销大,加载速度最高

  • rcfile:

    • 按行存储,每块按照列压缩,结合了行存储和列存储的特点,
  • ORCFile:

    • 是refile的升级版,加了索引
  • parquet:列式存储,压缩比ORC低一些,查询效率较低,

  • sequencefile:hadoop api中的二进制文件,以kv形式序列化到文件中

  • 压缩比:orc>parquet>testfile 查询速度:三者差不多

16. hive的count的用法

  • count(*):所有行进行统计,包括null
  • count(1):所有行进行统计,包括null
  • count(字段):不包含null

17 hive存储数据的方式/保存元数据的方式

  1. hive的元数据存储
  • 内嵌模式:保存本地的derby数据库
  • 本地模式:保存本地mysql中
  • 远程模式:需要单独起元数据
  1. hive的表数据存储
  • 存在hdfs中,这些数据的元数据存在namenode中

18 hiveserver2是什么

  1. 是一个服务器端口,远程客户端可以执行对hive的增删改查
  2. 基于thrift RPC,支持多客户端并发和身份验证

19 hive表字段换类型如何修改?

  1. 使用alter table change column针对没有数据的时候
  2. 有数据使用
  • 先将要该字段结构的表名修改成一个临时表:alter table 表1 rename to 表2
  • 创建和表1 一模一样的表3
  • 将表2的结果插入到新表

20 案例:连续活跃登陆的用户指至少连续2天都活跃登录的用户

Hive-SQL查询连续活跃登录用户 - 渐逝的星光 - 博客园 (cnblogs.com)

21案例: hive怎么实现行转列或者列转行

22 hive的常用函数

(130条消息) Hive函数大全_斑马!的博客-CSDN博客_hive函数

23 hive常用的sql语句

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

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

相关文章

pymysql详解——通过Python连接Mysql数据库

pymysql详解——通过Python连接Mysql数据库 pymysql是可用于连接mysql数据库,且能够提供mysql与python窗口交互创立通道的工具库。可以通过创建引擎,建立游标直接通过python编程实现mysql数据库操作。在开发和分析可形成线性脚本。是广泛使用的库。 连…

计算机组成原理——第七章输入输出系统(上)

如若来世再相见,半点朱唇尽我尝 文章目录 7.1.1 输入输出系统和IO控制方式7.1.2 外部设备7.2 IO接口7.3.1 程序查询方式流程图 7.1.1 输入输出系统和IO控制方式 i/O接口是一个电子部件,会被集成与主板中,而I/O设备则是你看得见摸得着的那些设…

O(1) 时间复杂度的抽奖算法 - The Alias Method

0 背景 在营销等场景下,有种常见的玩法,即抽奖,不论前端抽奖界面如何炫酷,底层抽奖组件具有一致性。本文不讨论奖池的抽取规则、奖池奖品配置、奖池切换、抽奖机会、奖品扣减和发放、告警和降级等,主要聚焦于抽奖算法…

Nginx之TCP/UDP反向代理

Nginx从1.9.13起开始发布ngx_stream_core_module模块不仅能支持TCP代理及负载均衡,其实也是支持UDP协议的。 1.Nginx下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 2.Nginx安装 #yum -y install proc* openssl* pcre* # tar -zxvf nginx-1.24.0.tar.gz #cd n…

【Docker学习三部曲】—— 核心篇

容器数据卷 基本概念 容器数据卷是 Docker 中用于持久化存储容器数据的一种解决方案它允许容器中的数据在容器重新创建或迁移时得以保留,而不会丢失数据卷可以看作是 Docker 主机和容器之间的一个共享目录容器可以将数据写入数据卷,而这些数据将储存在…

【Jpom】docker-compose 部署 RabbitMQ 3.11.X (包含延迟队列插件)

文章目录 前言参考目录前置准备系统版本软件版本 部署步骤1、Jpom 配置节点信息2、Dockerfile 文件3、插件上传4、修改 docker-compose.yml5、构建 Dockerfile(可选)6、执行 docker-compose 编排7、Jpom 查看 Docker8、登录 RabbitMQ9、直接执行 docker-…

OrCAD原理图检查

OrCAD原理图检查 FPGA或处理器芯片原理图封装检查OrCad元件Part Reference与Reference位号不同检查所有器件是否与CIS库元件匹配用CIS库中的元器件替换已存在器件方法1方法2 DRC检查修改页码Annotate重排位号利用Intersheet References功能进行off-page索引检查封装、厂家、型号…

[数据结构 - C语言] 顺序表

目录 1、线性表 2、顺序表 2.1 顺序表的概念 2.2 接口 3、接口实现 3.1 初始化 3.2 销毁 3.3 容量检测 3.4 打印数据 3.5 顺序表的头插 3.6 顺序表的尾插 3.7 顺序表的头删、尾删 3.8 顺序表查找 3.9 指定位置插入数据 1、线性表 线性表(linear list&…

认识HTTPS以及了解HTTPS的加密过程

目录 简单认识HTTPS: 运营商劫持: 加密的理解: HTTPS的工作过程: 对称加密: 非对称加密: 中间人攻击 证书 简单认识HTTPS: HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引…

逆向-还原代码之(*point)[4]和char *point[4] (Interl 32)

// source code #include <stdio.h> #include <string.h> #include <stdlib.h> /* * char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组 * char *point[4] // 指针数组。 a[4][5] // 一连串的指针…

客快物流大数据项目(一百一十六):远程调用 Spring Cloud Feign

文章目录 远程调用 Spring Cloud Feign 一、​​​​​​​简介

OpenGL入门之 深入三角形

一、引言 本教程使用GLEW和GLFW库。  通过本教程&#xff0c;你能轻松的、深入的理解OpenGL如何绘制一个三角形。  如果你不了解OpenGL是什么&#xff0c;可以阅读OpenGL深入理解。 二、基本函数和语句介绍 通过阅读以下的函数&#xff0c;你的大脑里能留下关于OpenGL基本函…

【每日一题Day184】LC1187使数组严格递增 | dp

使数组严格递增【LC1187】 给你两个整数数组 arr1 和 arr2&#xff0c;返回使 arr1 严格递增所需要的最小「操作」数&#xff08;可能为 0&#xff09;。 每一步「操作」中&#xff0c;你可以分别从 arr1 和 arr2 中各选出一个索引&#xff0c;分别为 i 和 j&#xff0c;0 <…

前端学习:HTML块、类、Id

目录 快 一、块元素、内联元素 二、HTML 元素 三、HTML元素 类 一、分类块级元素 二、分类行内元素 Id 一、使用 id 属性 二、 class与ID的差异 三、总结 快 一、块元素、内联元素 大多数HTML元素被定义为块级元素或内联元素。 块级元素在浏览器显示时&#xff0c;通常会…

Docker常用命令详解,有这些足够了

首先启动类 启动docker&#xff1a;systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机自启动&#xff1a;systemctl enable docker 查看docker概要…

【CocosCreator入门】CocosCreator组件 | Widget(对齐)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中的Widget组件用于UI布局和调整&#xff0c;可以通过调整Widget组件来实现UI元素的自适应和排版。 目录 一、组件介绍 二、组件属性 三、组件使用 四、脚本示例 一、组件介绍 在Coc…

Python中的统计学(二)

大数定律和中心极限定律都是概率论中重要的定理。它们之间的不同在于它们所涉及的随机变量和极限的不同。 大数定律是指随着样本容量的增大&#xff0c;样本均值越来越接近于总体均值的定律。即样本均值的极限等于总体均值&#xff0c;也就是说&#xff0c;当样本量足够大时&a…

绝了!!PDF转换没想到这么简单

PDF处理是很多小伙伴的“痛”&#xff0c;在工作学习中&#xff0c;PDF转换、PDF编辑、PDF和图片的各种问题都是需要快速解决的&#xff0c;但市面上不少付费的软件让我们很是肉痛&#xff01; 今天给大家推荐5个免费的神仙PDF转换网站&#xff0c;解决你的所以PDF问题~ 记得…

Simulink 自动代码生成电机控制:硬件开发板系统介绍

目录 前言 电源电路 MCU电路 开发板接口 关于电流采样和过流保护 驱动部分 总结 前言 在介绍开发板之前突然有感而发想多说两句&#xff0c;本人从事电控行业也是有一些年头了&#xff0c;除了刚刚毕业就接触的电机控制外&#xff0c;就是电源控制相关的&#xff0c;像三相P…

Point-to Analysis指针分析(2)

https://blog.csdn.net/qq_43391414/article/details/111046505 下面介绍一种新的指针分析的算法Steensgaard算法&#xff0c;并将其与上一篇文章介绍 Steensgaard算法 不同于Andersen算法,Steensgaard在前者的基础上&#xff0c;再次对问题进行了简化&#xff0c;从而指针分析…