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

文章目录

hive设置本地模式

shell 复制代码
set mapreduce.framework.name = local;

1.分区表和分桶表

1分区表

  • 99.9%项目中使用分区表

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

  • 分区表创建
  • 分区表创建,分区字段可以理解为表中的一个字段。
  • 使用insert方式插入数据

insert + select语句

  • 分区字段查询,可以当作一个过滤条件查询
  • 查询分区信息;
shell 复制代码
show partitions table_name;
  • 增加分区
shell 复制代码
alter table table_name add partition #

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

  • 删除分区

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

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

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

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

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

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

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

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

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

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

2.二级分区

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

  • 例如按照日期

    进行一级分区,此外按照表的特定字段进行分区;

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

3.动态分区

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

  • 动态分区相关参数;

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

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

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

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

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

4.动态分区测试

2.分桶表

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

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

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

1.基本语法

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

2.分桶表导入数据

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

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

3.分桶排序表

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

3.文件格式压缩

和hadoop保持一致,

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

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完成
相关推荐
想做富婆5 小时前
Hive:复杂数据类型之Map函数
数据仓库·hive·hadoop
想做富婆7 小时前
hive:基本数据类型,关于表和列语法
大数据·hive·hadoop
梦醒沉醉7 小时前
单机伪分布Hadoop详细配置
大数据·hadoop·分布式
WHYBIGDATA18 小时前
Hive安装教程
大数据·hive·hadoop
想做富婆18 小时前
Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
数据仓库·hive·hadoop
乙卯年QAQ18 小时前
【Hadoop】Hadoop 概述
大数据·hadoop·分布式
黄雪超20 小时前
深入MapReduce——从MRv1到Yarn
大数据·hadoop·mapreduce
想做富婆1 天前
Hive:基本查询语法
数据仓库·hive·hadoop
STONE_KKK1 天前
Hive详细讲解-各类函数速通
数据仓库·hive·hadoop