一、ORC与Parquet的基本定义
-
ORC(Optimized Row Columnar)
- 设计背景:由Hive社区优化而来,专为Hadoop生态系统设计,尤其针对Hive的查询优化。文件结构包含Stripe(逻辑数据块)、Row Group(最小读取单元)和索引数据,默认使用ZLIB压缩,支持ACID事务和复杂类型(如Struct、Map)。
- 示例:假设一个Hive表包含字段
user_id
(整数)、user_info
(结构体{name: string, age: int}
),ORC会将其拆分为多个子列(如user_info.name
和user_info.age
),每个子列独立存储并压缩,通过索引快速定位数据。
-
Parquet
- 设计背景:受Google Dremel论文启发,由Cloudera和Twitter联合开发,专注于高效存储嵌套数据(如Protocol Buffers、Thrift)。文件结构包含Row Group(行组)、Column Chunk(列块)和Page(最小编码单元),支持Snappy、Gzip等压缩算法,但不支持ACID事务。