Hive表数据优化

Hive表数据优化

1.文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。

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

(1)Text File

文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。
在这里插入图片描述

可通过以下建表语句指定文件格式为文本文件:

create table textfile_table
(column_specs)
stored as textfile;

(2)ORC

ORC(Optimized Row Columnar)file format是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 行存储的特点
    查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
  • 列存储的特点
    因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
    text file和sequence file都是基于行存储的,orc和parquet是基于列式存储的。

(3)Parquet

Parquet文件是Hadoop生态中的一个通用的文件格式,它也是一个列式存储的文件格式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.数据压缩

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
压缩算法	原始文件大小	压缩文件大小	压缩速度	解压速度
gzip	8.3GB	1.8GB	17.5MB/s	58MB/s
bzip2	8.3GB	1.1GB	2.4MB/s	9.5MB/s
LZO	8.3GB	2.9GB	49.3MB/s	74.6MB/s

在这里插入图片描述

(1)Hive表数据进行压缩

在Hive中,不同文件类型的表,声明数据压缩的方式是不同的。

  • TextFile

若一张表的文件类型为TextFile,若需要对该表中的数据进行压缩,多数情况下,无需在建表语句做出声明。直接将压缩后的文件导入到该表即可,Hive在查询表中数据时,可自动识别其压缩格式,进行解压。

需要注意的是,在执行往表中导入数据的SQL语句时,用户需设置以下参数,来保证写入表中的数据是被压缩的。

--SQL语句的最终输出结果是否压缩
set hive.exec.compress.output=true;
--输出结果的压缩格式(以下示例为snappy)
set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;
  • ORC

若一张表的文件类型为ORC,若需要对该表数据进行压缩,需在建表语句中声明压缩格式如下:

create table orc_table
(column_specs)
stored as orc
tblproperties ("orc.compress"="snappy");
  • Parquet

若一张表的文件类型为Parquet,若需要对该表数据进行压缩,需在建表语句中声明压缩格式如下:

create table orc_table
(column_specs)
stored as parquet
tblproperties ("parquet.compression"="snappy");

(2)计算过程中使用压缩

  • 单个MR的中间结果进行压缩

单个MR的中间结果是指Mapper输出的数据,对其进行压缩可降低shuffle阶段的网络IO,可通过以下参数进行配置:

--开启MapReduce中间数据压缩功能
set mapreduce.map.output.compress=true;
--设置MapReduce中间数据数据的压缩方式(以下示例为snappy)
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
  • 单条SQL语句的中间结果进行压缩

单条SQL语句的中间结果是指,**两个MR(一条SQL语句可能需要通过MR进行计算)之间的临时数据,**可通过以下参数进行配置:

--是否对两个MR之间的临时数据进行压缩
set hive.exec.compress.intermediate=true;
--压缩格式(以下示例为snappy)
set hive.intermediate.compression.codec= org.apache.hadoop.io.compress.SnappyCodec;

3.存储优化

(1)避免小文件生成

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

(2)合并小文件

在这里插入图片描述

(3)ORC文件索引

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

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

(4)ORC矢量化查询

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻师傅

谢谢您!我会继续努力创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值