Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 

1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区

2. orc格式和parquet格式对比-阿里云开发者社区

3.Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结 | 海牛部落 高品质的 大数据技术社区

4. Hive中的文件存储格式TEXTFILE、SEQUENCEFILE、RCFILE、ORCFILE、Parquet 和 AVRO使用与区别详解_text orc pquest sequentfile_皮哥四月红的博客-CSDN博客

5.Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结 | 海牛部落 高品质的 大数据技术社区

本文主要介绍下HDFS上的常见文件格式和压缩格式

总结 :

HDFS 中常见的文件存储格式

  • textfile :行式存储格式
  • sequencefile :行式存储格式
  • orc :列式存储格式,  支持ACID,常用的文件组织方式, 查询效率比parquet高
  • parquet :  列式存储格式 不支持ACID

HDFS中常见的文件压缩方式

  • gzip  :   不支持split
  • lzo   :  支持split
  • snappy  :  不支持split,  数仓中最常用的压缩方式
  • bzip2   : 支持split

行式存储和列式存储

TEXTFILE 、SEQUENCEFILE、RCFILE、ORC、PARQUET,AVRO。其中TEXTFILE 、SEQUENCEFILE、AVRO都是基于行式存储,其它三种是基于列式存储;所谓的存储格式就是在Hive建表的时候指定的将表中的数据按照什么样子的存储方式,如果指定了A方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型。
 

逻辑图

 

如上图所示,左边为逻辑表,右边第一个为行式存储,第二个为列式存储。

1.行存储的特点

查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

2.列存储的特点

因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
 

=====================================================

文件格式 

下面对常见的文件存储格式做一个详细的介绍,主要以最常用的sequenceFile 和 parquet 为主。

TextFile 

文件存储就是正常的文本格式,将表中的数据在hdfs上 以文本的格式存储

,下载后可以直接查看,也可以使用cat命令查看

如何指定

1.无需指定,默认就是
2.显示指定stored as textfile
3.显示指定 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT           'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

优缺点 

1.行存储使用textfile存储文件默认每一行就是一条记录,
2.可以使用任意的分隔符进行分割。
3.但无压缩,所以造成存储空间大。可结合Gzip、Bzip2、Snappy等使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。


-------------------------------------------------------------------------------

SequenceFile

    SequenceFile 文件是 Hadoop 用来存储二进制形式的[Key,Value]对而设计的一种平面文件(Flat File)。可以把 SequenceFile 当做是一个容器,把所有的文件打包到 SequenceFile 类中可以高效的对小文件进行存储和处理。SequenceFile 文件并不按照其存储的 Key 进行排序存储,SequenceFile 的内部类 Writer 提供了 append 功能。SequenceFile 中的 Key 和 Value 可以是任意类型 Writable 或者是自定义 Writable。

   在存储结构上,SequenceFile 主要由一个 Header 后跟多条 Record 组成,Header 主要包含了 Key classname,value classname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一些同步标识,用于快速定位到记录的边界。每条 Record 以键值对的方式进行存储,用来表示它的字符数组可以一次解析成:记录的长度、Key 的长度、Key 值和 value 值,并且 Value 值的结构取决于该记录是否被压缩。

SequenceFile 支持三种记录存储方式:

  • 无压缩, io 效率较差. 相比压缩, 不压缩的情况下没有什么优势.

  • 记录级压缩, 对每条记录都压缩. 这种压缩效率比较一般.

  • 块级压缩, 这里的块不同于 hdfs 中的块的概念. 这种方式会将达到指定块大小的二进制数据压缩为一个块. 相对记录级压缩, 块级压缩拥有更高的压缩效率. 一般来说使用 SequenceFile 都会使用块级压缩.

如何指定

1.stored as sequecefile
2.或者显示指定:
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'

优缺点

1.sequencefile存储格有压缩,存储空间小,有利于优化磁盘和I/O性能

2.同时支持文件切割分片,提供了三种压缩方式:none,record,block(块级别压缩效率跟高).默认是record(记录)

3.基于行存储

-------------------------------------------------------------------------------

RCFile 不推荐,推荐进化的ORCFile 

在hdfs上将表中的数据以二进制格式编码,并且支持压缩。下载后的数据不可以直接可视化。

如何指定

1.stored as rcfile 
2.或者显示指定:
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'

优缺点 

1.行列混合的存储格式,基于列存储。

2.因为基于列存储,列值重复多,所以压缩效率高。

3.磁盘存储空间小,io小。

-------------------------------------------------------------------------------

ORCFile

ORC File,全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。运用ORC File可以提高Hive的读、写以及处理数据的性能。

ORC(optimizedRC File) 存储源自RC(RecordCloimnar File)这种存储格式,RC是一种列式存储引擎,对schema演化(修改schema需要重新生成数据)支持较差,主要是在压缩编码,查询性能方面做了优化.RC/ORC最初是在Hive中得到使用,最后发展势头不错,独立成一个单独的项目.Hive1.xbanbendu版本对事物和update操作的支持,便是给予ORC实现的(其他存储格式暂不支持).


如何指定

1.CREATE TABLE ... STORED AS ORC2.ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC3.SET hive.default.fileformat=Orc

优缺点

1.面向列的存储格式

2.由Hadoop中RC files 发展而来,比RC file更大的压缩比,和更快的查询速度

3.Schema 存储在footer中

4.不支持schema evolution

5.支持事务(ACID)

6.为hive而生,在许多non-hive MapReduce的大数据组件中不支持使用

7.高度压缩比并包含索引

其他

ORC 文件格式可以使用 HIVE 自带的命令 concatenate 快速合并小文件

-------------------------------------------------------------------------------

Parquet

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

Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer thrift json 等 将这类数据存储成列式格式以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,

如何指定

Hive 0.13 and later:STORED AS PARQUET;Hive 0.10 - 0.12:
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'; 

优缺点

1.与ORC类似,基于Google dremel

2.Schema 存储在footer

3.列式存储

4.高度压缩比并包含索引

5.相比ORC的局限性,parquet支持的大数据组件范围更广

Avro

Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。

如何指定
 

1.STORED AS AVRO2.STORED ASINPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'

优缺点

1.Avro以基于行的格式存储数据

2.设计的主要目标是为了满足schema evolution

3.schema和数据保存在一起

Parquet和ORC文件对比

 

不同文件格式的性能测试

测试demo1

新建六张不同文件格式的测试用表:

--textfile文件格式
CREATE TABLE `test_textfile`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS textfile;--sequence文件格式
CREATE TABLE `test_sequence`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS sequence;--rc文件格式
CREATE TABLE `test_rc`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS rc;--orc文件格式
CREATE TABLE `test_orc`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS orc;--parquet文件格式
CREATE TABLE `test_parquet`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS parquet;--avro文件格式
CREATE TABLE `test_avro`(`id` STRING,…,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS avro;

然后,从同一个源表新增数据到这六张测试表,为了体现存储数据的差异性,我们选取了一张数据量比较大的源表(源表数据量为30000000条),根据测试结果从存储空间和SQL查询两个方面进行比较:

文件存储格式    HDFS存储空间    不含group by    含group by
TextFile              7.3 G    105s    370s
Sequence           7.8 G    135s    385s
RC                      6.9 G    92s    330s
ORC                   246.0 M    34s    310s
Parquet              769.0 M    28s    195s
AVRO                 8.0G    240s    530s

根据性能测试总结

  • 从存储文件的压缩比来看,ORC和Parquet文件格式占用的空间相对而言要小得多。
  • 从存储文件的查询速度看,当表数据量较大时Parquet文件格式查询耗时相对而言要小得多。

测试demo2

https://netflixtechblog.com/using-presto-in-our-big-data-platform-on-aws-938035909fd4

这篇文章主要讲解了persto对  orc和parquet 的对比,见文章中部。

=====================================================================

压缩方式

Hadoop对于压缩格式的是透明识别,hadoop能够自动为我们将压缩的文件解压。 目前在Hadoop中常用的几种压缩格式:lzo,gzip,snappy,bzip2,我们简单做一下对比,方便我们在实际场景中选择不同的压缩格式。

压缩格式codec类算法扩展名多文件splitablenative工具hadoop自带
gzipGzipCodecdeflate.gzgzip
bzip2Bzip2Codecbzip2.bz2bzip2
lzoLzopCodeclzo.lzolzop
snappySnappyCodecsnappy.snappy

​​​​​​

  • 压缩相关codec实现在org.apache.hadoop.io.compress包下面

deflate压缩

标准压缩算法,其算法实现是zlib,而gzip文件格式只是在deflate格式上增加了文件头和一个文件尾

gzip压缩

压缩率比较高,而且压缩/解压速度也比较快;
hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;
有hadoop native库;
大部分linux系统都自带gzip命令,使用方便;

缺点  : 不支持split;

①适用于压缩后的文件大小在120M以内(haoop2的标准block大小是120M)的处理,可以有效提高读的并发,对hive,streaming,Java 等mr程序透明,无需修改原程序

②由于gzip拥有较高的压缩比,因此相比于其他压缩算法,更适用于冷数据的存储

bzip2压缩

支持split,支持多文件;
具有很高的压缩率,比gzip压缩率都高;
hadoop本身支持,但不支持native;
在linux系统下自带bzip2命令,使用方便;

压缩/解压速度很慢;
不支持native;

①适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式

②输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况

③对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况

lzo压缩

压缩/解压速度也比较快,合理的压缩率;

支持split,是hadoop中最流行的压缩格式(需要建索引,文件修改后需要重新建索引);

支持hadoop native库;

可以在linux系统下安装lzop命令,使用方便;

压缩率比gzip要低一些;

hadoop本身不支持,需要安装;

在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式);

①适用于较大文本的处理

snappy压缩

高速压缩速度和合理的压缩率;

支持hadoop native库;

不支持split;

压缩率比gzip要低;

hadoop本身不支持,需要安装;

linux系统下没有对应的命令

Tips : 

① 当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;

②或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入

是否压缩数据以及使用何种压缩格式对性能具有重要的影响,一般原则:

  • 需要平衡压缩和解压缩数据所需的能力、读写数据所需的磁盘 IO,以及在网络中发送数据所需的网络带宽。正确平衡这些因素有赖于集群和数据的特征,以及您的使用模式。
  • 如果数据已压缩(例如 JPEG 格式的图像),则不建议进行压缩。事实上,结果文件实际上可能大于原文件。
  • GZIP 压缩使用的 CPU 资源比 Snappy 或 LZO 更多,但可提供更高的压缩比。GZIP 通常是不常访问的冷数据的不错选择。而 Snappy 或 LZO 则更加适合经常访问的热数据。
  • BZip2 还可以为某些文件类型生成比 GZip 更多的压缩,但是压缩和解压缩时会在一定程度上影响速度。HBase 不支持 BZip2 压缩。
  • Snappy 的表现通常比 LZO 好。应该运行测试以查看您是否检测到明显区别。
  • 对于 MapReduce,如果您需要已压缩数据可拆分,BZip2、LZO 和 Snappy 格式都可拆分,但是 GZip 不可以。可拆分性与 HBase 数据无关。
  • 对于 MapReduce,可以压缩中间数据、输出或二者。相应地调整您为 MapReduce 作业提供的参数。

=======================================================================

延申问题

为什么hadoop没有自带lzo和snappy压缩?

主要是由于lzo和snappy压缩采用的是GPL协议,而hadoop是apache协议,有关协议的区别可参考阮大神的图示:

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

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

相关文章

【Windows11】家庭版开启组策略指南

目录 背景新建一个cmd文件运行运行结果 背景 Win11找不到gpedit.msc怎么办?有用户通过命令窗口想要去打开本地组策略的时候,系统突然弹出了一个错误提示,显示系统缺少了gpedit.msc导致无法开启本地组策略编辑器了。那么这个情况要怎么去进行…

计算机网络

一,数据通信基础 1,通信方式 单工、半双工、双工 2,信号和数据 2种信号:正弦波(模拟信号)、光波(数字信号) 正弦波数字数据:3种调制方式(调幅&#xff0…

边听歌边充电LDR6028+LDR9201既能充电又能OTG方案

随着type-c接口的普及,市面上的手机,平板,笔电逐渐都采用了type-c接口,设备为了不断的追求更轻薄的机身和防水要求慢慢的取消了一些影响手机外观完整性的接口,比如3.5mm耳机孔。 有线耳机用户一般会选择使用C口转3.5m…

[自然语言处理] 自然语言处理库spaCy使用指北

spaCy是一个基于Python编写的开源自然语言处理库。基于自然处理领域的最新研究,spaCy提供了一系列高效且易用的工具,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy的官方仓库地址为:spaCy-github。本…

nest的核心概念

请求进来 --- 中间件 --- 守卫 --- 拦截器 --- 通道 --- 处理(controller层) --- 拦截器 --- 返回 Pipe : 就是实现 PipeTransform 接口的 transform 方法,它的返回值就是传给 handler 的值。 ---------------------------------…

C计数问题---2023河南萌新联赛第(三)场:郑州大学

解析&#xff1a; n 可以分成两个数&#xff0c;记录每个数的因子对数&#xff0c;乘起来即可。 注意当因子相同时&#xff0c;只1 #include<bits/stdc.h> using namespace std; int n,res; int main(){cin>>n;for(int i1;i<n;i){int xi,yn-i;int cnt10,cnt20;…

Windows10系统还原操作

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 复制了下虚拟机的Win10系统&#xff0c;但其中有一些软件&#xff0c;想实现类似手机的格式化出厂操作&#xff0c;下面记录Windows10系统的还原操作。 一、系统环境&#xff1a; 虚拟机内的Windows10&#xff0c;64…

软件测试面试题:说说你对TDD测试驱动开发的理解?

很多公司在面测试中高级岗时&#xff0c;都会不同程度地问到“有没有了解过TDD”“你认为TDD可以解决什么问题”或者“说说测试驱动开发的流程”等等&#xff0c;即使公司并不会用到此开发流程&#xff0c;面试官也会通过你对这个相对还比较“陌生”的概念的讲述来了解你对一些…

测试libcurl库的demo时,报错 curl_easy_perform() failed: SSL connect error

系统&#xff1a;麒麟V10 arm roothg-TR3250:/home/cur765/curl-7.65.3/docs/examples# cat /etc/os-release NAME"Kylin" VERSION"银河麒麟桌面操作系统(国防版)V10" VERSION_US"Kylin Linux Desktop (GFB)V10" IDkylin ID_LIKEdebian PRETT…

计算机视觉:卷积层的参数量是多少?

本文重点 卷积核的参数量是卷积神经网络中一个重要的概念,它决定了网络的复杂度和计算量。在深度学习中,卷积操作是一种常用的操作,用于提取图像、语音等数据中的特征。卷积神经网络的优势点在于稀疏连接和权值共享,这使得卷积核的参数相较于传统的神经网络要少很多。 举例…

NICE-SLAM: Neural Implicit Scalable Encoding for SLAM论文阅读

论文信息 标题&#xff1a;NICE-SLAM: Neural Implicit Scalable Encoding for SLAM 作者&#xff1a;Zihan Zhu&#xff0c; Songyou Peng&#xff0c;Viktor Larsson — Zhejiang University 来源&#xff1a;CVPR 代码&#xff1a;https://pengsongyou.github.io/nice-slam…

ES-5-进阶

单机 & 集群 单台 Elasticsearch 服务器提供服务&#xff0c;往往都有最大的负载能力&#xff0c;超过这个阈值&#xff0c;服务器 性能就会大大降低甚至不可用&#xff0c;所以生产环境中&#xff0c;一般都是运行在指定服务器集群中 配置服务器集群时&#xff0c;集…

OpenAI宣布安卓版ChatGPT正式上线;一站式 LLM底层技术原理入门指南

&#x1f989; AI新闻 &#x1f680; OpenAI宣布安卓版ChatGPT正式上线 摘要&#xff1a;OpenAI今日宣布&#xff0c;安卓版ChatGPT已正式上线&#xff0c;目前美国、印度、孟加拉国和巴西四国的安卓用户已可在谷歌Play商店下载&#xff0c;并计划在下周拓展到更多地区。Chat…

linux快速安装tomcat

linux快速安装tomcat 前提安装好jdk 下载Tomcat安装包 wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz如果出现颁发的证书已经过期的错误提示,用下面命令 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-1…

web浏览器脚本的调试

水一贴。 在浏览器中按F12点击"source"或者"源程序"点击html、js、css等源码文件所在的窗口的左边&#xff0c;此时点击处显示为蓝色光标&#xff0c;表示断点中断已经设置完毕。配合窗口右上角的"继续" “下一步” "跳过"等控制按钮…

android stduio 打开工程后直接报Connection refused解决

报错如下:Connection refused 解决方案: 打开gradle-wrapper.properties修改distributionUrl 将: distributionUrlhttp\://localhost/gradle/distributions/gradle-6.5-bin.zip 替换为: distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-bin.zip 错…

【外卖系统】文件上传与下载

文件上传 文件上传又称upload&#xff0c;将本地图片、视频等文件上传到服务器上&#xff0c;供其他用户下载或者浏览。 form表单&#xff1a;HTML中的form元素用于创建一个包含表单字段的区域&#xff0c;用户可以在该区域输入数据&#xff0c;并通过提交表单将数据发送到服务…

谷粒商城第七天-商品服务之分类管理下的分类的拖拽功能的实现

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端实现 2.1 判断是否能进行拖拽 2.2 收集受影响的节点&#xff0c;提交给服务器 三、后端实现 四、总结 一、总述 这个拖拽功能对于这种树形的列表&#xff0c;整体的搬迁是很方便的。但是其实现却并不是那么的简单。 …

618技术揭秘 - 大促弹窗搭投实践 | 京东云技术团队

背景 618 大促来了&#xff0c;对于业务团队来说&#xff0c;最重要的事情莫过于各种大促营销。如会场、直播带货、频道内营销等等。而弹窗作为一个极其重要的强触达营销工具&#xff0c;通常用来渲染大促氛围、引流主会场、以及通过频道活动来提升频道复访等。因此&#xff0…

基于正交滤波器组的语音DPCM编解码算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................................g0zeros(1,lenH); g1zeros(1,l…