转帖翻译 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字段里面出现,他们是:
Key Default Notesorc.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.
相关推荐
4. **数据存储**:Hive将数据存储在HDFS上,支持多种文件格式,如TextFile、SequenceFile、ORC和Parquet。这些文件格式具有不同的性能和压缩特性,适用于不同的场景。 5. **分区与桶**:Hive的分区机制允许将大型表...
- 实时翻译:从摄像头捕捉的文字进行即时翻译。 - 图书数字化:将纸质书籍内容快速转为电子文本。 - 账单管理:自动读取账单上的金额、日期等关键信息。 6. 注意事项: - 性能限制:由于JavaScript的执行环境...
数据以文本文件的形式存储,支持多种文件格式,如TextFile、SequenceFile、Parquet和ORC。 5. **计算模型**:Hive的计算是基于MapReduce的,但在新版本中也支持Tez和Spark作为执行引擎,提高了查询性能。用户提交的...
实训商业源码-支付系统-毕业设计.zip
校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
实训商业源码-释怀全网首发召唤神龙源码-毕业设计.zip
实训商业源码-五金器件类企业网站源码-毕业设计.zip
实训商业源码-日主题子主题-毕业设计.zip
放大镜与遮罩层代码实现与思路
毕业论文-TP框架支付-整站商业源码.zip
Feature not supported in this compiler version - 当前版本不支持某些功能(解决办法).md
毕业论文-红包拓客生意宝V2.2.0 解密开源版-整站商业源码.zip
ANSYS EKM,研发仿真数据管理与流程管理方案.pdf
实训商业源码-赞和圈圈-毕业设计.zip
ANSYS塑料橡胶行业解决方案介绍.pdf
2000-2022年上市公司客户、供应商集中度数据 1、时间:2000-2022年 2、来源:上市公司NB 3、指标:年份、股票代码、股票简称、行业代码、省份、城市、省份代码、城市代码、上市状态、前五名客户产生的营业收入_亿元、占全年营业收入的比例、前五名供应商产生的采购额_亿元、占全年采购总额的比例、供应链集中度 4、范围:A股上市公司 5、样本量:5.2W+ 6、方法说明:以客户集中度和供应商集中度之和衡量企业供应链集中度,其中客户集中度以前五名客户产生的营业收入占比衡量,供应商集中度以前五名供应商产生的采购额占比衡量 7、参考文献:吴安兵,龚星宇,陈创练等.非金融企业影子银行化的风险承担效应:内在机制与经验证据 邱保印,余梦,左静静.社会信用体系建设能否促进企业数字化转型?——基于社会信用体系改革试点的准自然实验
jquery-2.0.3.min.js(jQuery下载)
safeint/////
实训商业源码-在线全网音乐搜索下载源码-毕业设计.zip
毕业论文-PHP短网址生成系统-整站商业源码.zip