`
tobyqiu
  • 浏览: 40464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ORC File 翻译

 
阅读更多

转帖翻译 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 Notes
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文件

    在Hadoop生态系统中,为了高效地存储和处理数据,有多种文件格式被设计出来,如SequenceFile、MapFile、ORCFile和ParquetFile。这些文件格式各有特点,适合不同的场景需求。 1. **SequenceFile** SequenceFile是...

    hadoop关于txt convert orcfile的应用

    标题 "hadoop关于txt convert orcfile的应用" 涉及的是在Hadoop生态系统中将文本文件(TXT格式)转换为ORC文件的过程。ORC(Optimized Row Columnar)是Hadoop的一种高效列式存储格式,特别适用于大数据处理场景,如...

    1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(二)

    Hadoop、Hive和Impala是大数据处理中的核心组件,而ORCFile和ParquetFile则是优化数据存储的常用格式。 首先,TextFile是最基础的数据格式,以纯文本形式存储数据,便于人类阅读,但不压缩,且不支持列式存储,因此...

    sqoop-orc-import

    Sqoop with orc file Version : sqoop1.4.5 (CDH540) Description 在Sqoop import的方法中,增加生成ORC File格式的命令. Build 源码取自于 使用ant build Usage 在import命令中,增加: --as-orcdatafile Examples ...

    cdh-hive2.1.1版本orc格式表读取包数组越界替换包

    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.pdf

    藏经阁-File Format Benchmark - Avro, JSON, ORC, & Parquet 本文主要介绍了大数据领域中四种常用的文件格式:Avro、JSON、ORC 和 Parquet,这四种格式的 benchmark 测试结果对比。作者 Owen O'Malley 是 ...

    谨慎修改ORC文件.doc

    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$...

    orc-shims-1.5.5-API文档-中文版.zip

    包含翻译后的API文档:orc-shims-1.5.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.orc:orc-shims:1.5.5; 标签:apache、orc、shims、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...

    orc-shims-1.5.5-API文档-中英对照版.zip

    包含翻译后的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压缩,用于在Flink中自定义合并orc小文件。 orc是一种高效的列式存储格式,适用于大数据处理,它支持多种压缩算法,如snappy和zlib。Snappy是一种快速但压缩率...

    ORC有效识别图片(C#)

    在IT行业中,ORC(Optical Character Recognition,光学字符识别)是一种关键技术,它允许软件自动识别并转换图像中的文本到可编辑、可搜索的数据。在本案例中,我们聚焦于C#编程语言如何利用ORC技术来实现图片中的...

    写ORC 格式文件,HIVE 工具类

    写ORC 格式文件的工具类,可以用于写hive orc 的格式,

    orc.rar_HALCON 训练_Halcon 图像处理_c++ orc_c++ orc库_halcon训练

    标题中的“orc.rar”可能是一个压缩包文件,包含与HALCON相关的训练材料,特别是关于orc(光学字符识别)的训练。HALCON是一种流行的机器视觉软件,由德国MVTec公司开发,广泛应用于图像处理和模式识别领域。在这个...

    3C-ORC-AI-V1.69LeagueV 正版地图

    《3C-ORC-AI-V1.69LeagueV 正版地图》是一款深受魔兽争霸III(Warcraft III)玩家喜爱的自定义游戏地图,它基于原版游戏的多人对战模式,提供了丰富的策略与竞技体验。3C,全称"Command & Conquer: Chaos", 是魔兽...

    ORC.rar_ORC

    ORC(Optical Character Recognition,光学字符识别)技术是一种计算机视觉技术,用于自动识别和转换图像中的打印或手写文本,使其可以被编辑、搜索和处理。在标题"ORC.rar_ORC"中,".rar"是文件压缩格式,表明包含...

    orc manual

    ### ORC Manual 知识点概述 #### 一、ORC服务器组件概览(Overview of Orc Server Components) ORC软件是一套专为服务器安装及管理设计的系统工具,旨在简化服务器环境下的各种操作流程,提高工作效率。其核心...

    orc-core-1.2.2.zip

    【orc-core-1.2.2.zip】是一个压缩包文件,其名称暗示它可能与ORC(Optimized Row Columnar)格式的核心库有关。ORC是大数据处理领域中广泛使用的列式存储格式,尤其在Hadoop生态系统内,用于高效地存储和处理大规模...

    多译 OCR 截图翻译工具(windows 版)

    多译是一款高效的桌面端翻译工具,支持Mac与Win系统。多译为用户带来了优良的翻译体验,包括一次性提供百度、谷歌、有道、腾讯四大翻译引擎的结果,支持划取文本翻译、OCR截图翻译、词典查询翻译等翻译功能。

Global site tag (gtag.js) - Google Analytics