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文件存储格式和数据压缩

Hive 数据存储和压缩方式

在实际的项目开发当中,hive表数据存储方法一般选择:ORC或PARQUET,压缩方式一般选择 Zlib 和 SNAPPY

Hive文件存储

一、列式存储和行式存储

逻辑表中的数据,最终需要落到磁盘上,以文件的形式存储,有两种常见的存储形式。行式存储列式存储

(C:\Users\49692\AppData\Roaming\Typora\typora-user-images\1667196618250.png)]


行式存储(Row Layout)

优点:

  • 相关的数据是保存在一起,比较符合面向对象的思维,因为一行数据就是一条记录
  • 这种存储格式比较方便进行INSERT/UPDATE操作

缺点:

  • 如果查询只涉及某几个列,它会把整行数据都读取出来,不能跳过不必要的列读取。当然数据比较少,一般没啥问题,如果数据量比较大就比较影响性能
  • 由于每一行中,列的数据类型不一致,导致不容易获得一个极高的压缩比,也就是空间利用率不高
  • 不是所有的列都适合作为索引

列式存储(Column Layout)

优点:

  • 查询时,只有涉及到的列才会被查询,不会把所有列都查询出来,即可以跳过不必要的列查询
  • 高效的压缩率,不仅节省储存空间也节省计算内存和CPU
  • 任何列都可以作为索引

缺点:

  • 不适合INSERT/UPDATE操作
  • 不适合扫描小量的数据

二、存储格式分类


1. TEXTFILE

  • 创建表时的默认格式
  • 行式存储
  • 数据不做压缩,磁盘开销大,数据解析开销大
  • hive不会对数据进行切分,从而无法对数据进行并行操作

2. SEQUENCEFILE

  • 二进制文件,以<key,value>的形式序列化到文件中

  • 行式存储


2. ORC

全称为Optimized Row Columnar,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度

它并不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储

ORC文件是以二进制方式存储的,所以不可以直接读取,ORC文件也是自解析的

优点:

  • 有多种文件压缩方式,并且有着很高的压缩比
  • 文件是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅节省HDFS存储资源,查询任务的输入数据量减少,使用的MapTask也就减少了
  • 可以支持复杂的数据结构(比如Map等)

问题:ORC+Snappy格式不支持文件分割操作(不支持切片操作),如果压缩文件很大,由于无法切片,所以只有一个Map对其进行处理,如果数据量特别大,则整个读取需要花费的时间比较长,容易出现Map读取文件倾斜问题,怎么解决

答:该问题主要是ORC + Snappy不支持切片导致的。可以采用Parquet + LZO解决


2.1 ORC结构(了解)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Htcm1B5a-1667197395753)(C:\Users\49692\AppData\Roaming\Typora\typora-user-images\1667196052668.png)]

一个ORC文件可以分为若干个Stripe,一个stripe可以分为三个部分:

  • Index Data:一个轻量级的index,默认是每隔1W行做一个索引(目录)。这里做的索引只是记录某行的各字段在Row Data中的offset
  • Row Data:存储具体的数据,先取部分行,然后对这些行按列进行存储。对每个列进行了编码,分成多个Stream来存储。
  • Strip Footer:存储各个stripe的元数据信息

每个ORC文件文件有一个File Footer,存储的是每个Stripe的行数以及Stripe中每个Column的数据类型信息等;

每个ORC文件文件的尾部是一个Post Script,这里面记录了整个文件的压缩类型以及File Footer的长度信息等。

在读取文件时,会seek到文件尾部读Post Script,从里面解析到File Footer长度,再读FileFooter,从里面解析到各个Stripe信息,再读各个Stripe,即从后往前读


3. PARQUET

面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目

arquet文件是以二进制方式存储的,所以是不可以直接读取。文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的

通常情况下,在存储Parquet数据的时候会按照Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度


三、压缩比

ORC > Parquet > TextFile


Hive数据压缩

数据压缩

优点:

  • 减少存储磁盘空间,降低单节点的磁盘IO
  • 由于压缩后的数据占用的带宽更少,因此可以加快数据在Hadoop集群流动的速度,减少网络传输带宽

缺点:

  • 需要花费额外的时间/CPU做压缩和解压缩计算

问题:MR(Hive的底层是MR)哪些阶段可以进行压缩操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5OYccte-1667197395754)(C:\Users\49692\AppData\Roaming\Typora\typora-user-images\1667196632749.png)]

  • 需要分析处理的数据在进入map前可以压缩,然后解压处理
  • map处理完成后的输出可以压缩,这样可以减少网络I/O(reduce通常和map不在同一节点上)
  • reduce拷贝压缩的数据后进行解压,处理完成后可以压缩存储在hdfs上,以减少磁盘占用量

数据压缩算法

压缩格式压缩格式所在的类
Zliborg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
Bzip2org.apache.hadoop.io.compress.BZip2Codec
Lzocom.hadoop.compression.lzo.LzoCodec
Lz4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OAoAtlKu-1667197395754)(C:\Users\49692\AppData\Roaming\Typora\typora-user-images\1667196710403.png)]


问题:zlib和snappy对比?

压缩率,跟空间有关
解压缩速度,跟时间有关

zlib压缩率高,解压速度慢
snappy与zlib相反

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 11:21:51-

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