Hive详细讲解-调优分区表速通

news/2025/1/30 1:04:08/

文章目录

  • 1.分区表和分桶表
    • 1分区表
    • 2.二级分区
    • 3.动态分区
    • 4.动态分区测试
  • 2.分桶表
    • 1.基本语法
    • 2.分桶表导入数据
    • 3.分桶排序表
  • 3.文件格式压缩
  • 4.hive文件格式
    • 4.1 text file(默认文件格式)
    • 4.2 orc文件 (常用)
    • 4.3 orc存储使用列存储,存储流程
    • 4.4 orc建表
    • 4.5 Parquet文件格式
    • 4.6 Parquet建表
  • 5.压缩
    • 5.1 在表中进行压缩
    • 5.2计算过程压缩

hive设置本地模式

set mapreduce.framework.name = local;

1.分区表和分桶表

1分区表

  • 99.9%项目中使用分区表

hive会将一张大表的业务分散到多个目录,每一个目录称之为一个分区。在查询时,通过where子句的表达式选择查询所需要的分区,这样查询的效率会高很多。

  • 分区表创建

在这里插入图片描述

  • 分区表创建,分区字段可以理解为表中的一个字段。

在这里插入图片描述

  • 使用insert方式插入数据

在这里插入图片描述

insert + select语句

  • 分区字段查询,可以当作一个过滤条件查询

在这里插入图片描述

在这里插入图片描述

  • 查询分区信息;
show partitions table_name;

在这里插入图片描述

  • 增加分区
alter table table_name add partition #

在这里插入图片描述

分区信息属于hive元数据的一部分,每增加一个分区,hive底层会建立hdfs文件夹,此外元数据来存储新增分区字段

  • 删除分区

在这里插入图片描述

删除分区同时也会删除分区元数据信息

在这里插入图片描述

上述删表也删除了hdfs路径,说明默认内部表。

若你建的表是一个外部表,那么删除分区,也是仅删除元数据信息,hdfs路径不删除

注意:当前仅当当前表的分区信息元数据和hdfs路径对应上时,才能正常对该分区进行操作

  • 若hdfs路径和hive元数据不一致-分区信息修复;

分区信息简洁方式,新增元数据||新增hdfs路径即可 msck命令

msck repair table table_name add partitions;
  • 此命令的优势是:不需要手动指定任何空缺分区

  • 删除多余分区信息,例如hdfs路径已删除,但是元数据仍然存在的分区信息

msck repair table table_name drop partitions;
  • 同步分区命令,指同时执行上述两个命令
msck repair table table_name sync partitions;

上述所有分区同步命令,修改的都是元数据信息,而hdfs路径信息都不进行改变;

2.二级分区

  • 将一级分区的表进一步进行再分区

  • 例如按照日期在这里插入图片描述
    进行一级分区,此外按照表的特定字段进行分区;

小结:二级分区声明或使用方式和一级分区方式相同,只不过,你声明的时候按照先后顺序声明两个;

3.动态分区

  • 可以实现的业务功能:禁用一个insert语句,将不同的字段写入不同的分区表中;

  • 动态分区相关参数;

  • 1.分区参数开关得开开

set hive.exec.dynamic.partion=true;
  • 2.严格模式(默认)和非严格

严格模式必须指定至少一个分区为静态分区

非严格模式允许所有的分区字段都是用动态分区;

set hive.exec.dynamic.partition.mode=nonstrict;
  • 3.一条insert新分区最大数为1000,分区个数不建议太多
set hive.exec.max.dynamic.partitions=1000;
  • 4.单个Mapper,单个Reducer创建最大分区数默认100
set hive.exec.max.dynamic.partitions.pernode=100;
  • 5.一条insert可以创建的最大文件个数10w
set hive.exec.max.created.files=100000;
  • 6.动态分区是否抛出异常,默认false
set hive.error.on.empty.partition=false;

4.动态分区测试

在这里插入图片描述

2.分桶表

  • hive中的数据分散到不同的文件中,为每一个字段计算hash值,然后模指定的分桶数,最终将相同的计算结果写到同一个文件中;

  • 若分区再分桶,那么会对每一个分区的数据进行分桶

  • 分桶表用在表优化流程;

1.基本语法

在这里插入图片描述

分桶表必须指定,按照哪个字段进行分桶

2.分桶表导入数据

分桶表也得设置非严格模式

set hive.exec.dynamic.partition.mode=nonstrict;
  • 分桶表导入数据和普通表导入数据一致,没有任何特殊。

在这里插入图片描述

3.分桶排序表

  • 创建语法(按照什么字段分桶,什么字段排序是看业务逻辑的)

在这里插入图片描述

3.文件格式压缩

在这里插入图片描述

hadoop保持一致,

需要掌握每一种压缩格式的特点即可

hive_246">4.hive文件格式

  • text file
  • orc
  • parquet
  • sequence file(不常用)

4.1 text file(默认文件格式)

  • 文本文件的一行对应hive的一行
  • 创建表的时候要指定文本文件需要加入如下关键字

stored as textfile;

4.2 orc文件 (常用)

在这里插入图片描述

  • optimized row columnar
  • 总之orc文件能够提高hive的读写性能

4.3 orc存储使用列存储,存储流程

在这里插入图片描述

列存储,会将一个表分为不同的块,每一块按照列存储存储到相应的stripe中,

其中strip有一个index data块记录一些信息 最大值最小值行位置等,这些信息都是优化读写的手段。

  • 除此之外,文件头文件ORC,Footer存储Header长度,strip信息,各个column的统计信息等。
  • Postscrip存储File Footer长度,文件压缩参数,文件版本信息
  • Postscript长度

在这里插入图片描述

  • orc文件如何读取到第一列的数据
  • 首先分析,获取第一列的数据需要得到file footer的信息,内部记录最大值最小值等信息,
  • 读取orc的数据从最后一字节向前读取,先得到postscript长度
  • 得到postscript信息
  • 得到file footer的信息
  • 最终得到stripe等信息
  • 拿到第一列的信息

orc文件在读的性能上优于textfile

但是在写步骤需要花一些功夫

4.4 orc建表

在这里插入图片描述

请注意,orc文件格式不需要声明;row format delimited fields terminated by ‘\t’;

  • orc文件可以设置一系列参数

在这里插入图片描述

  • compress压缩格式,最常用SNAPPY(不支持切片)

  • orc压缩按照分块压缩,默认256KB

  • orc的strip的大小;默认64MB,官方建议和Hadoop一个块大小相同128MB

  • 索引步长一般设置1万即可

在这里插入图片描述

  • 建表语句的详细信息如上所示;

  • 不论你的建表语句使用什么文件格式,hive底层都会处理成如上格式,具备serde、inputformat、outputformat

往orc文件load文本文件,那么可能不报错,但是读取的时候无法正常读取,解析会失败;

正确的将数据价值orc表中

新建一个临时表将数据load进去,然后使用insert select的方式插入到orc格式的表中

4.5 Parquet文件格式

  • parquet是hadoop生态通用的文件格式(列式存储的文件格式)

在这里插入图片描述

大体格式和orc格式相似,但是元数据信息等存储位置不同

rowgroup0存储rou group0中的每一个column chunk的元数据信息。

开头和结尾分别存储版本信息以及标识信息PAR1

在这里插入图片描述

  • 同理也会花一个字节保存整个footer的长度

在这里插入图片描述

4.6 Parquet建表

在这里插入图片描述

压缩格式来说

  • src压缩格式是compress
  • Parquet压缩格式是compression

和orc格式一样,建表完成后也会有一个inputformat和outputformat、serde

5.压缩

在这里插入图片描述

  • 在表中压缩
  • 在计算过程中压缩

5.1 在表中进行压缩

  • hive中不同文件类型的表压缩格式不同;
  • 多数情况下,无需在建表语句做出声明。直接将压缩后的文件导入该表即可,hive在查询表中数据时,可以自动识别其压缩格式,进行解压。
  • 其他方式往表里insert数据,通过配置参数来保证写入表中的数据时压缩的;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2计算过程压缩

  • 单个MR的中间结果压缩

在这里插入图片描述

  • 单条SQL中间结果多个MR完成

http://www.ppmy.cn/news/1567760.html

相关文章

【数据分析】基础篇

不定期更新,建议关注、收藏、点赞! 流程 明确目标 业务流程数据监控描述、市场宏观环境分析、竞品分析、数据探索挖掘获取数据 来源:数据库和日志、埋点需求前端埋点特殊数据、业务人员Excel表格、爬虫采集数据、公开数据集、商业平台导出的…

DeepseekMath:超强开源数学模型(论文详解)

摘要 近日,中国团队Deepseek推出了一款名为DeepSeekMath的7B开源数学模型,这个模型在数学方面的表现令人惊叹。DeepSeekMath 7 B在不依赖外部工具包和投票技术的情况下,在竞赛级MATH基准测试中获得了51.7%的分数,接近Gemini-Ultr…

解锁.NET Standard库:从0到1的创建与打包秘籍

一、引言 在当今的软件开发领域,跨平台开发已成为一种趋势。随着不同操作系统和设备的多样化,开发人员需要确保他们的代码能够在多个平台上运行,以满足更广泛的用户需求。.NET Standard 库应运而生,它定义了一组公共 API&#xf…

Tauri2+Leptos开发桌面应用--绘制图形、制作GIF动画和mp4视频

在之前工作(Tauri2Leptos开发桌面应用--新建窗口、自定义菜单和多页面切换_tauri实现多窗口-CSDN博客)的基础上继续尝试绘制图形、制作GIF动画和mp4视频 绘制图形主要尝试了两种方式,一种是调用python使用matplotlib模块绘制图形&#xff0c…

物业巡更系统在现代社区管理中的优势与应用探讨

内容概要 在现代社区管理中,物业巡更系统正逐渐成为一种不可或缺的工具。结合先进的智能技术,这些系统能够有效地提升社区管理的各个方面,尤其是在巡检效率和信息透明度方面。通过实时记录巡检数据,物业管理人员能够确保工作人员…

使用eNSP配置GRE VPN实验

实验拓扑 实验需求 1.按照图示配置IP地址 2.在R1和R3上配置默认路由使公网区域互通 3.在R1和R3上配置GRE VPN,使两端私网能够互相访问,Tunne1口IP地址如图 4.在R1和R3上配置RIPv2来传递两端私网路由 实验步骤 GRE VPN配置方法: 发送端&#x…

spark运行流程

spark运行流程 任务提交后,先启动 Driver 程序随后 Driver 向集群管理器注册应用程序集群管理器根据此任务的配置文件分配 Executor 并启动Driver 开始执行 main 函数,Spark 查询为懒执行,当执行到 Action 算子时开始反向推 算,根…

K8S知识点

1. 查看Pod状态详情 列出所有Pod: 使用kubectl get pods命令可以查看集群所有Pod的概览信息,包括名称、状态、IP地址等。 结合grep使用,查看包含关键字的pod kubectl get pods |grep test 查看你特定Pod的详细信息: 通过kubect…