转帖翻译 http://www.iteblog.com/archives/1014
原文 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC
一、定义
ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。运用ORC File可以提高Hive的读、写以及处理数据的性能。
和RCFile格式相比,ORC File格式有以下优点:
(1)、每个task只输出单个文件,这样可以减少NameNode的负载;
(2)、支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union);
(3)、在文件中存储了一些轻量级的索引数据;
(4)、基于数据类型的块模式压缩:a、integer类型的列用行程长度编码(run-length encoding);b、String类型的列用字典编码(dictionary encoding);
(5)、用多个互相独立的RecordReaders并行读相同的文件;
(6)、无需扫描markers就可以分割文件;
(7)、绑定读写所需要的内存;
(8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。
二、ORC File文件结构
ORC File包含一组组的行数据,称为stripes,除此之外,ORC File的file footer还包含一些额外的辅助信息。在ORC File文件的最后,有一个被称为postscript的区,它主要是用来存储压缩参数及压缩页脚的大小。
在默认情况下,一个stripe的大小为250MB。大尺寸的stripes使得从HDFS读数据更高效。
在file footer里面包含了该ORC File文件中stripes的信息,每个stripe中有多少行,以及每列的数据类型。当然,它里面还包含了列级别的一些聚合的结果,比如:count, min, max, and sum。下图显示出可ORC File文件结构:
三、Stripe结构
从上图我们可以看出,每个Stripe都包含index data、row data以及stripe footer。Stripe footer包含流位置的目录;Row data在表扫描的时候会用到。
Index data包含每列的最大和最小值以及每列所在的行。行索引里面提供了偏移量,它可以跳到正确的压缩块位置。具有相对频繁的行索引,使得在stripe中快速读取的过程中可以跳过很多行,尽管这个stripe的大小很大。在默认情况下,最大可以跳过10000行。拥有通过过滤谓词而跳过大量的行的能力,你可以在表的 secondary keys 进行排序,从而可以大幅减少执行时间。比如你的表的主分区是交易日期,那么你可以对次分区(state、zip code以及last name)进行排序。
四、Hive里面如何用ORCFile
在建Hive表的时候我们就应该指定文件的存储格式。所以你可以在Hive QL语句里面指定用ORCFile这种文件格式,如下:
1 |
CREATE TABLE ... STORED AS ORC
|
2 |
3 |
ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC
|
4 |
5 |
SET hive. default .fileformat=Orc
|
所有关于ORCFile的参数都是在Hive QL语句的TBLPROPERTIES字段里面出现,他们是:
orc.compress | ZLIB | high level compression (one of NONE, ZLIB, SNAPPY) |
orc.compress.size | 262,144 | number of bytes in each compression chunk |
orc.stripe.size | 268435456 | number of bytes in each stripe |
orc.row.index.stride | 10,000 | number of rows between index entries (must be >= 1000) |
orc.create.index | true | whether to create row indexes |
下面的例子是建立一个没有启用压缩的ORCFile的表
1 |
create table Addresses (
|
2 |
name string,
|
3 |
street string,
|
4 |
city string,
|
5 |
state string,
|
6 |
zip int
|
7 |
) stored as orc tblproperties ( "orc.compress" = "NONE" );
|
五、序列化和压缩
对ORCFile文件中的列进行压缩是基于这列的数据类型是integer或者string。具体什么序列化我就不涉及了。。想深入了解的可以看看下面的英文:
Integer Column Serialization
Integer columns are serialized in two streams.
1、present bit stream: is the value non-null?
2、data stream: a stream of integers
Integer data is serialized in a way that takes advantage of the common distribution of numbers:
1、Integers are encoded using a variable-width encoding that has fewer bytes for small integers.
2、Repeated values are run-length encoded.
3、Values that differ by a constant in the range (-128 to 127) are run-length encoded.
The variable-width encoding is based on Google’s protocol buffers and uses the high bit to represent whether this byte is not the last and the lower 7 bits to encode data. To encode negative numbers, a zigzag encoding is used where 0, -1, 1, -2, and 2 map into 0, 1, 2, 3, 4, and 5 respectively.
Each set of numbers is encoded this way:
1、If the first byte (b0) is negative:
-b0 variable-length integers follow.
2、If the first byte (b0) is positive:
it represents b0 + 3 repeated integers
the second byte (-128 to +127) is added between each repetition
1 variable-length integer.
In run-length encoding, the first byte specifies run length and whether the values are literals or duplicates. Duplicates can step by -128 to +128. Run-length encoding uses protobuf style variable-length integers.
String Column Serialization
Serialization of string columns uses a dictionary to form unique column values The dictionary is sorted to speed up predicate filtering and improve compression ratios.
String columns are serialized in four streams.
1、present bit stream: is the value non-null?
2、dictionary data: the bytes for the strings
3、dictionary length: the length of each entry
4、row data: the row values
Both the dictionary length and the row values are run length encoded streams of integers.
相关推荐
在Hadoop生态系统中,为了高效地存储和处理数据,有多种文件格式被设计出来,如SequenceFile、MapFile、ORCFile和ParquetFile。这些文件格式各有特点,适合不同的场景需求。 1. **SequenceFile** SequenceFile是...
标题 "hadoop关于txt convert orcfile的应用" 涉及的是在Hadoop生态系统中将文本文件(TXT格式)转换为ORC文件的过程。ORC(Optimized Row Columnar)是Hadoop的一种高效列式存储格式,特别适用于大数据处理场景,如...
Hadoop、Hive和Impala是大数据处理中的核心组件,而ORCFile和ParquetFile则是优化数据存储的常用格式。 首先,TextFile是最基础的数据格式,以纯文本形式存储数据,便于人类阅读,但不压缩,且不支持列式存储,因此...
Sqoop with orc file Version : sqoop1.4.5 (CDH540) Description 在Sqoop import的方法中,增加生成ORC File格式的命令. Build 源码取自于 使用ant build Usage 在import命令中,增加: --as-orcdatafile Examples ...
at org.apache.orc.OrcFile$WriterVersion.from(OrcFile.java:145) at org.apache.orc.impl.OrcTail.getWriterVersion(OrcTail.java:74) at org.apache.orc.impl.ReaderImpl.(ReaderImpl.java:385) at org....
藏经阁-File Format Benchmark - Avro, JSON, ORC, & Parquet 本文主要介绍了大数据领域中四种常用的文件格式:Avro、JSON、ORC 和 Parquet,这四种格式的 benchmark 测试结果对比。作者 Owen O'Malley 是 ...
at org.apache.spark.sql.hive.orc.OrcFileFormat$$anonfun$org$apache$spark$sql$hive$orc$OrcFileFormat$$unwrap$1$1.apply(OrcFileFormat.scala:339) at org.apache.spark.sql.hive.orc.OrcFileFormat$$anonfun$...
包含翻译后的API文档:orc-shims-1.5.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.orc:orc-shims:1.5.5; 标签:apache、orc、shims、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...
包含翻译后的API文档:orc-shims-1.5.5-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.orc:orc-shims:1.5.5; 标签:apache、orc、shims、中英对照文档、jar包、java; 使用方法:解压翻译后...
本项目提供的工具类就基于orc格式,利用了snappy或zlib压缩,用于在Flink中自定义合并orc小文件。 orc是一种高效的列式存储格式,适用于大数据处理,它支持多种压缩算法,如snappy和zlib。Snappy是一种快速但压缩率...
在IT行业中,ORC(Optical Character Recognition,光学字符识别)是一种关键技术,它允许软件自动识别并转换图像中的文本到可编辑、可搜索的数据。在本案例中,我们聚焦于C#编程语言如何利用ORC技术来实现图片中的...
写ORC 格式文件的工具类,可以用于写hive orc 的格式,
标题中的“orc.rar”可能是一个压缩包文件,包含与HALCON相关的训练材料,特别是关于orc(光学字符识别)的训练。HALCON是一种流行的机器视觉软件,由德国MVTec公司开发,广泛应用于图像处理和模式识别领域。在这个...
《3C-ORC-AI-V1.69LeagueV 正版地图》是一款深受魔兽争霸III(Warcraft III)玩家喜爱的自定义游戏地图,它基于原版游戏的多人对战模式,提供了丰富的策略与竞技体验。3C,全称"Command & Conquer: Chaos", 是魔兽...
ORC(Optical Character Recognition,光学字符识别)技术是一种计算机视觉技术,用于自动识别和转换图像中的打印或手写文本,使其可以被编辑、搜索和处理。在标题"ORC.rar_ORC"中,".rar"是文件压缩格式,表明包含...
### ORC Manual 知识点概述 #### 一、ORC服务器组件概览(Overview of Orc Server Components) ORC软件是一套专为服务器安装及管理设计的系统工具,旨在简化服务器环境下的各种操作流程,提高工作效率。其核心...
【orc-core-1.2.2.zip】是一个压缩包文件,其名称暗示它可能与ORC(Optimized Row Columnar)格式的核心库有关。ORC是大数据处理领域中广泛使用的列式存储格式,尤其在Hadoop生态系统内,用于高效地存储和处理大规模...
多译是一款高效的桌面端翻译工具,支持Mac与Win系统。多译为用户带来了优良的翻译体验,包括一次性提供百度、谷歌、有道、腾讯四大翻译引擎的结果,支持划取文本翻译、OCR截图翻译、词典查询翻译等翻译功能。