背景
Hive的rcfile格式已经使用多年,但是,它会将所有的列都当做二进制来处理,没有与类型挂钩。因此,Hive0.11版本引入orcFile。OrcFile有以下几点好处:
- 每个task只生成一个文件,减轻hdfs压力
- 保存列类型,支持datetime, decimal和负责类型(struct, list, map, and union)
- 文件中保存轻量级索引
- 跳过不需的row group
- seek到指定的row
- 根据列类型进行压缩
- 整数类型:run-length encoding
- string类型:dictionary encoding
- 不同的recordReader并发读同一文件
- split时,无需扫描标记
- 可以限制读写占用的内存
- 使用pb存放元数据,支持添加和移除列
结构
(图片来源:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
orc dump工具
// Hive version 0.11 through 0.14:
hive --orcfiledump <location-of-orc-file>
// Hive version 0.15 and later:
hive --orcfiledump [-d] [--rowindex <col_ids>] <location-of-orc-file>
// Hive version 1.2.0 and later:
hive --orcfiledump [-d] [-t] [--rowindex <col_ids>] <location-of-orc-file>
// Hive version 1.3.0 and later:
hive --orcfiledump