列式存储格式 Apache ORC

列式存储格式 Apache ORC

Apache
C/C++ 查看源码»
Linux
Apache
2017-01-17
红薯

Apache ORC 文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度。

ORC(OptimizedRC File)存储源自于RC(RecordColumnar File)这种存储格式,RC是一种列式存储引擎,对schema演化(修改schema需要重新生成数据)支持较差,而ORC是对RC改进,但它仍对schema演化支持较差,主要是在压缩编码,查询性能方面做了优化。RC/ORC最初是在Hive中得到使用,最后发展势头不错,独立成一个单独的项目。Hive 1.x版本对事务和update操作的支持,便是基于ORC实现的(其他存储格式暂不支持)。ORC发展到今天,已经具备一些非常高级的feature,比如支持update操作,支持ACID,支持struct,array复杂类型。你可以使用复杂类型构建一个类似于parquet的嵌套式数据架构,但当层数非常多时,写起来非常麻烦和复杂,而parquet提供的schema表达方式更容易表示出多级嵌套的数据类型。

ORC原生是不支持嵌套数据格式的,而是通过对复杂数据类型特殊处理的方式实现嵌套格式的支持,例如对于如下的hive表:

CREATE TABLE `orcStructTable`(
  `name` string,
  `course` struct<course:string,score:int>,
  `score` map<string,int>,
  `work_locations` array<string>)

ORC格式会将其转换成如下的树状结构(ORC的schema结构):

ORC的schema结构

在ORC的结构中这个schema包含10个column,其中包含了复杂类型列和原始类型的列,前者包括LIST、STRUCT、MAP和UNION类型,后者包括BOOLEAN、整数、浮点数、字符串类型等,其中STRUCT的孩子节点包括它的成员变量,可能有多个孩子节点,MAP有两个孩子节点,分别为key和value,LIST包含一个孩子节点,类型为该LIST的成员类型,UNION一般不怎么用得到。每一个Schema树的根节点为一个Struct类型,所有的column按照树的中序遍历顺序编号。

ORC只需要存储schema树中叶子节点的值,而中间的非叶子节点只是做一层代理,它们只需要负责孩子节点值得读取,只有真正的叶子节点才会读取数据,然后交由父节点封装成对应的数据结构返回。

文件结构

ORC 文件是以二进制方式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的。ORC的文件结构入图6,其中涉及到如下的概念:

  • ORC文件:保存在文件系统上的普通二进制文件,一个ORC文件中可以包含多个stripe,每一个stripe包含多条记录,这些记录按照列进行独立存储,对应到Parquet中的row group的概念。

  • 文件级元数据:包括文件的描述信息PostScript、文件meta信息(包括整个文件的统计信息)、所有stripe的信息和文件schema信息。

  • stripe:一组行形成一个stripe,每次读取文件是以行组为单位的,一般为HDFS的块大小,保存了每一列的索引和数据。

  • stripe元数据:保存stripe的位置、每一个列的在该stripe的统计信息以及所有的stream类型和位置。

  • row group:索引的最小单位,一个stripe中包含多个row group,默认为10000个值组成。

  • stream:一个stream表示文件中一段有效的数据,包括索引和数据两类。索引stream保存每一个row group的位置和统计信息,数据stream包括多种类型的数据,具体需要哪几种是由该列类型和编码方式决定。

ORC文件结构


ORC文件结构

在ORC文件中保存了三个层级的统计信息,分别为文件级别、stripe级别和row group级别的,他们都可以用来根据Search ARGuments(谓词下推条件)判断是否可以跳过某些数据,在统计信息中都包含成员数和是否有null值,并且对于不同类型的数据设置一些特定的统计信息。

更详细的介绍请看 http://blog.csdn.net/yu616568/article/details/51868447

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

6、hive中的file_format

行存储和列存储在hdfs中的区别 hive中的file_format 可以使用set hive.default.fileformat来查看和设置格式 set hive.default.fileformat 默认是TextFile file_format:【查看hive官方文档】 ...

前天 15:39
7
0
hive进阶学习

只分享有用的东西

2018/04/16 21:34
27
0
Java API连接HDFS并创建Orc文件

1、设置连接,参考之前文章:Java API操作HA方式下的Hadoop static String ClusterName = "nsstargate"; private static final String HADOOP_URL = "hdfs://"+ClusterName; public static ...

2016/10/28 09:41
751
0
Hive格式 Parquet与ORC性能测试报告

一、环境说明 Hadoop集群:使用测试Hadoop集群,节点: hadoop230 hadoop231 hadoop232 hadoop233 这几台机器配置一样,具体参数可参考如下: CPU数量:2个 CPU线程数:32个 内存:128GB 磁盘...

2018/11/13 17:16
226
0
Install hadoop, install hive, 及hive的使用

hadoop , hive 安装过程和配置文件(附件)。 注意: hadoop Name Node未做ha. Hive, 还是基本的hive on MR, 未使用on tez, on spark, 未配置LLAP、 HCatalog and WebHCat。 安装完之后,以...

01/16 14:12
4
0
hive文件格式

1、TEXTFILE create table if not exists xt_format_text( source string,  loginv string,  uv string,  dt string) row format delimited stored as textfile; 插入数据开...

2015/04/26 23:46
34
0
魔兽争霸war3心得体会(一):UD的冰甲蜘蛛流

玩war3好几年了,之前都是打打电脑,随便玩玩的。刚刚在浩方等平台上和人玩的时候,各种被虐,很难赢一局。从去年开始,才认真玩。思考下各种战术。 最初,使用的是兽族orc,后来觉得兽族不够...

2015/04/13 15:07
8
0
魔兽争霸war3心得体会(一):UD的冰甲蜘蛛流

玩war3好几年了,之前都是打打电脑,随便玩玩的。刚刚在浩方等平台上和人玩的时候,各种被虐,很难赢一局。从去年开始,才认真玩。思考下各种战术。 最初,使用的是兽族orc,后来觉得兽族不够...

2015/04/13 12:37
12
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部