转帖翻译 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.
相关推荐
21、MapReduce读写SequenceFile、MapFile、ORCFile和ParquetFile文件 网址:https://blog.csdn.net/chenwewi520feng/article/details/130455817 本文介绍使用MapReduce读写文件,包括:读写SequenceFile、MapFile、...
NULL 博文链接:https://heaven-9587.iteye.com/blog/2184757
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....
Sqoop with orc file Version : sqoop1.4.5 (CDH540) Description 在Sqoop import的方法中,增加生成ORC File格式的命令. Build 源码取自于 使用ant build Usage 在import命令中,增加: --as-orcdatafile Examples ...
包含翻译后的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; 使用方法:解压翻译后...
3C-ORC-AI-V1.69LeagueV 正版地图,3corc orc3c 正版地图 war3.
多译是一款高效的桌面端翻译工具,支持Mac与Win系统。多译为用户带来了优良的翻译体验,包括一次性提供百度、谷歌、有道、腾讯四大翻译引擎的结果,支持划取文本翻译、OCR截图翻译、词典查询翻译等翻译功能。
本工程是用orc源码做的,能识别中文,但是上传的时候工程太大,没有上传字库,字库的地址是http://download.csdn.net/detail/lilinkun202/9357001,下载好了就放在工程OcrSearch的asset目录下就行了
通过指定目录进行多线程执行合并小文件程序,由于hdfs小文件过多,可用于自定义合并orc小文件。
Orc provides powerful solutions for the global financial industry. Orc delivers trading and market access solutions that are used by proprietary trading and market making firms, investment banks, ...
python利用百度的orc识别接口实现的图片文字识别 python利用百度的orc识别接口实现的图片文字识别 python利用百度的orc识别接口实现的图片文字识别
藏经阁-File Format Benchmark - Avro, JSON, ORC, & Parquet
manual is a orc software, it is for server insallation, and management, it is well written. thanks for your interest.
使用ORC获取图片验证码信息,经过实验,规则的验证码图片,100%准确
ORC识别技术,能够有效识别图片(C#),识别图片上的文字,能够有效识别图片上的文字,里面包含源码SAMPLE
适合ORC软件使用说明与指导,对于matlab设计和数据库子程序设计算法有指导作用
ORC3.0安装包及中文库
使用python版的Tesseract 实现ORC识别