IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Apache ORC深度探索(上篇) -> 正文阅读

[大数据]Apache ORC深度探索(上篇)

相信对Hadoop生态系统熟络的大数据开发者对ORC都不会陌生,笔者也是,那么ORC具体是什么?有哪些应用呢?我们今天来看一看这个在Hadoop生态系统中具有举足轻重地位的存储格式 -?Apache ORC

一、Apache ORC简介

Apache ORC(optimizedRC File) 存储源自于RC这种存储格式,是一种列式存储引擎,对schema的变更(修改schema需要重新生成数据)支持较差,主要是在压缩编码、查询性能方面做了优化。

ORC最早创建于2013年1月份,起初是为了提升Apache Hive数据在Apache Hadoop中的存储效率,后来发展势头不错,独立成一个单独的Apache项目。ORC是一种自描述列式文件格式,专门为Hadoop生态设计,用于大批量流式读取场景。以列的格式组织存储数据使数据读取、解压缩和处理仅需要处理一小部分数据。由于ORC文件是类型敏感的,写操作随着文件在写的过程中,会选择为对应类型创建最合适的内部索引。

很多大型的Hadoop用户都在使用ORC,比如Facebook使用ORC节约了他们数据仓库的大量空间并宣称ORC存储格式比RC和Parquet存储格式要快很多。ORC发展到今天,已经具备一些非常高级的feature,比如:

  • 支持update操作
  • 支持ACID:包括ACID事务和快照隔离;
  • 支持复杂类型:当前支持所有的Hive类型,包括符合类型,如:structs、lists、maps和unions;
  • 支持内建索引:在每一列的查询处理上,都可以使用包括最小、最大和布隆过滤的索引方式跳到对应的查询数据上;

二、Apache ORC当前使用情况

Apache Hadoop

ORC文件支持Hadoop MapReduce的读写操作,从ORC 1.1.0版本开始不再需要Hive可执行jar包及其依赖的支持。OrcStruct当前也已经实现了MapReduce shuffle操作的可写适配。

Apache Spark

Apache Spark当前已经提供ORC文件的读写支持,支持列存项目和谓词下推。

Apache Arrow

Apache Arrow当前支持ORC格式文件的读写。

Apache Flink

Apache Flink使用Table API的方式提供ORC文件的读写支持。

Apache Iceberg

Apache Iceberg使用ORC表提供ORC格式的支持。

Apache Druid

Apache Druid通过ORC扩展的方式支持ORC数据格式。

Apache Hive

Apache Hive可以说是ORC的亲爹了。ORC格式强壮的类型系统、压缩、列存、谓词下推和向量化支持,在Hive众多的数据格式中可谓是性能优越、独树一帜。

Apache Gobblin

Apache Gobblin通过Hive的SerDe库来支持写数据到ORC文件。

Apache Nifi

Apache Nifi也增加了写ORC文件的支持。

Apache Pig

Apache Pig从Pig 14.0开始提供ORC文件的读写支持。

EEL

EEL是一个Scala大数据API,支持包括ORC在内的各种文件格式和存储系统。EEL支持ORC的谓词和预测下推。有一个特殊的使用场景,可以讲JDBC的数据抽取出来然后转换成ORC文件存储在HDFS中,或者直接存储成ORC格式的Hive表。

Facebook

Facebook是一个早期的生产用户,已经将超过300PB的数据存储为ORC格式。

LinkedIn

LinkedIn在使用Apache Iceberg元数据平台和Apache Gobblin时,底层存储使用ORC文件格式。

Trino(之前叫Presto SQL)

Trino团队在集成ORC到他们的SQL引擎中付出了很多精力,当然他们也收到了很好的效果。

Vertica

HPE Vertica对ORC C++库有巨大的贡献。ORC是Vertica SQL-on-Hadoop(VSQLoH)的重要组成部分,通过使用ORC为Vertica分析型数据库的Hadoop生态系统带来了性能、可靠性和标准适配的诸多优势。

三、Apache ORC支持的数据类型

ORC文件属于完全自描述格式,不依赖Hive Metastore和其他任何外部元数据。ORC文件包含所存储对象的所有类型和编码信息。由于其自描述性,想要正确理解文件内容并不依赖任何特定的用户环境。

ORC提供丰富的数据类型,包括

  • Integer

    • boolean (1 bit)
    • tinyint (8 bit)
    • smallint (16 bit)
    • int (32 bit)
    • bigint (64 bit)
  • Floating point

    • float
    • double
  • String types

    • string
    • char
    • varchar
  • Binary blobs

    • binary
  • Date/time

    • timestamp
    • timestamp with local time zone
    • date
  • Compound types

    • struct
    • list
    • map
    • union

所有ORC文件按照相同的类型对象进行逻辑顺序组合。Hive通常使用带有顶级列信息的struct作为根对象类型,但这并不是必要条件。ORC中的所有类型都可以包含null值。另外需要注意,因为timestamp有两种表示形式,所以在使用时一定要做好选择,大多数情况下,建议优先使用timestamp with local time zone格式,除非你的应用确实是使用的UTC时间作为标准。

下面给出一个Foobar表的定义示例,并给出了一个文件结构树示意图:

create table Foobar (
 myInt int,
 myMap map<string,
 struct<myString : string,
 myDouble: double>>,
 myTime timestamp
);

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:21:05  更:2022-03-03 16:25:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:38:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码