使用高性能连接器在 hadoop 与 oracle 数 据库之间实现数据 …...oracle loader for...

22
Oracle 白皮书 2012 6 使用高性能连接器在 Hadoop Oracle 据库之间实现数据加载和访问

Upload: others

Post on 20-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

Oracle 白皮书

2012 年 6 月

使用高性能连接器在 Hadoop 与 Oracle 数

据库之间实现数据加载和访问

Page 2: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

执行概要 ............................................................................................................. 1

引言..................................................................................................................... 1

Oracle Loader for Hadoop ............................................................................ 2

Oracle Direct Connector for Hadoop Distributed File System (HDFS) ........ 3

从 Hadoop 到 Oracle 数据库的数据加载与访问 ................................................. 4

技术特性 ........................................................................................................ 4

Oracle Loader for Hadoop ............................................................................ 4

加载选项 ........................................................................................................ 5

Oracle Direct Connector for HDFS ............................................................... 6

性能..................................................................................................................... 8

配置概述 ........................................................................................................ 8

性能测试目标 ................................................................................................. 8

性能测试 ........................................................................................................ 8

偏差数据的加载 ........................................................................................... 16

总结 .............................................................................................................. 16

总结................................................................................................................... 17

Page 3: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

1

执行概要

Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System

(HDFS) 可实现 Hadoop 平台与 Oracle 数据库之间的高性能数据加载和访问。这些针对

Hadoop 和 Oracle 数据库进行了优化的高效连接器可轻松地获取和组织 Hadoop 上的非结构

化数据,并将这些数据与 Oracle 数据库中的数据整合在一起,从而确保应用程序能够分析企

业的所有数据。

在我们的性能测试中,从 Oracle 大数据机到 Oracle Exadata 的数据加载速度达到 12 TB/

小时。

当采用速度最快的加载选项时,Oracle 连接器的加载速度比接受测试的第三方产品快 5 到

20 倍。

本白皮书将介绍 Oracle Loader for Hadoop 和 Oracle Direct Connector for HDFS 的一些用

例,以及如何通过这些技术将 Oracle 大数据机到 Oracle Exadata 的数据加载速度提升至 12

TB/小时。

引言

对于企业来说,低结构化的数据(如 Web 日志、社交媒体数据、电子邮件、传感器数据和位

置数据)是一种潜在的宝藏,它们可以为业务应用程序提供丰富的实用信息。Hadoop 可提供

一个大规模并行架构,专用于从海量非结构化和半结构化内容中提取需要的信息。这些数据常

常需要和关系数据库(大多数商业应用所采用的平台)中的现有数据一起来加以分析。关系数

据库中包含一些关键数据,可帮助用户从 Hadoop 集群中处理和存储的低结构化数据中获取更

深入的洞察。

Hadoop 上的数据必须经过一系列技术和工具(即“连接器”)的处理后才可由数据库进行分

析。Oracle Loader for Hadoop 和 Oracle Direct Connector for HDFS 是两个高性能连接器,

专用于加载和访问 Hadoop 上的海量数据。

Page 4: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

2

这两个连接器可满足各种客户用例的众多需求:

• 定期批量加载,以纳入数据仓库中。示例:

o 某银行计划每天在数据库不繁忙的时段上传 1 亿条记录。

• 流式传输 Hadoop 中的数据,以便在数据库中进行即时分析。示例:

o 全天候监视和分析日志传送:这是一项定期和持续的加载任务。

o 监视传感器数据。当检测到错误数据时,将其加载到数据库中。这是一项不定

期的加载任务。

• 通过数据库应用程序访问和分析 HDFS 中的数据。

• 最大限度地减少暂存,同时将数据转换成适合数据库分析的格式,从而简化存储管理。

这些由 Oracle 开发并提供支持的连接器利用 Oracle 的内部知识实现了对 Hadoop 集群中数据

的强健、高性能的加载和访问。

Oracle Loader for Hadoop

Oracle Loader for Hadoop 可将数据从 Hadoop 加载到 Oracle 数据库中。它以 MapReduce

作业的形式在 Hadoop 上运行,对数据进行分区、分类并将其转换为 Oracle 支持的格式,从

而将一些通常由数据库 CPU 处理的任务分流到 Hadoop。随后,Oracle Loader for Hadoop

作业将这些数据加载到数据库中(联机模式),或者将它们以 Oracle 数据泵文件的形式写入

HDFS,以便以后通过 Oracle Direct Connector for HDFS 加载或访问(脱机模式)。

Page 5: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

3

Oracle Loader for Hadoop 可将负载平均分配到所有 Hadoop 化简器任务中,从而解决可能导

致瓶颈的输入数据偏差问题。

Oracle Direct Connector for Hadoop Distributed File System (HDFS)

Oracle Direct Connector for HDFS 是一个支持通过 Oracle 数据库高速访问 HDFS 数据的连接

器。通过该连接器,用户可在数据库中使用 SQL 直接查询 HDFS 上的数据,这些数据可以是

文本文件,也可以是 Oracle Loader for Hadoop 生成的 Oracle 数据泵文件。如果应用程序需

要,那么还可以使用 SQL 通过该连接器将数据加载到数据库中。

接下来,本白皮书将介绍这两种连接器的性能和一些技术特性。

Page 6: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

4

从 Hadoop 到 Oracle 数据库的数据加载与访问

这两种连接器的关键技术优势包括:

• 高性能

• 减少了对数据库服务器 CPU 的使用

• 具有自动解决任何数据偏差问题的灵活性

• 支持自动、优化的负载平衡,可最大限度地提高性能

这些连接器的性能目标包括:

1. 尽快将数据加载到表中。

2. 最大限度地减小数据加载对已部署的数据库系统的影响,确保这些系统能持续稳

定地满足相应的性能 SLA。

这两个连接器可通过协同工作来实现这些性能目标。此外,它们还提供了一些加载选项来

支持各种用例。

技术特性

这两款连接器适用于任何基于 Apache Hadoop 0.20.2 的 Hadoop 部署(例如包含 Apache

Hadoop 的 Cloudera 发行版 (CDH3)),同时支持任意的 Oracle 数据库(10.2.0.5、11.2.0.2

及以上版本)。除此之外,为了和 Oracle 大数据机以及 Oracle Exadata 数据库云服务器

结合使用,它们还进行了相应的优化。这两个连接器都支持将标量数据加载到 Oracle 数

据库中。

Oracle Loader for Hadoop

Oracle Loader for Hadoop 使用 Hadoop 的并行处理框架来进行数据的预处理操作。这一操

作往往在数据库服务器上进行,属于数据加载过程的一个环节。将这一环节分流到

Hadoop 有助于减少对数据库服务器 CPU 时间的占用。

Oracle Loader for Hadoop 是一个 MapReduce 程序,系统通常会在完成数据的其他

MapReduce 处理之后将该程序作为 Hadoop 作业提交至集群。该程序支持多种输入格式,

包括 Oracle 支持的输入格式(分隔文本、Hive 及 Avro 输入格式)以及任何用户自定义的

输入格式,能以这些格式读取数据。

Page 7: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

5

图 1. Oracle Loader for Hadoop 是一个在 Hadoop 上运行的 MapReduce 作业

目标表 是数据要加载到的数据库中的表。它由用户定义,支持任意表定义和分区方案

(引用和基于虚拟列的分区除外),并且支持所有标量数据类型。该表中包含的列可以采

用 Oracle 不支持的数据类型,但这些列必须可设为空值或其他的值。

Oracle Loader for Hadoop 可对数据进行以下预处理:

• 将数据转换为 Oracle 支持的数据类型

• 依照目标表的分区方案对数据进行分区

• 选择性地对每个分区中的数据进行分类

Oracle Loader for Hadoop 采用高效的直接路径加载机制,可最大限度地减少数据库的额外

处理工作。

如果输入的数据未平均分配到目标表的各个分区中,那么 Oracle Loader for Hadoop 就会将

加载负载平均分配到所有 Hadoop 化简器任务中,从而避免某一节点因加载过多数据而成

为瓶颈。

加载选项

Oracle Loader for Hadoop 提供了联机和脱机加载选项。使用联机加载选项时,预处理数据

和将数据加载到数据库都是 Oracle Loader for Hadoop 作业的必要环节。每项化简任务都会

与 Oracle 数据库建立一个连接,从而并行地将数据加载到数据库。数据库必须在 Oracle

Loader for Hadoop 执行处理期间维持可用性。

Page 8: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

6

使用脱机加载选项时,每个化简任务都会创建一个写入到 HDFS 的 Oracle 数据泵文件。在

此期间,数据库可以处于脱机状态。随后,用户可以使用 Oracle Direct Connector for HDFS

将数据加载到数据库中。

Oracle Direct Connector for HDFS

Oracle Direct Connector for HDFS 支持 Oracle 数据库通过外部表访问 HDFS 上的文件。外部

表允许用户查询数据库外部文件中的数据,在 Oracle Direct Connector for HDFS 的帮助

下,外部文件的范围可扩展至 HDFS 上的文件。这些文件可以是文本文件,也可以是

Oracle Loader for Hadoop 生成的 Oracle 数据泵文件。由于外部表与其他表一样都支持查

询,因此用户可以在 Oracle 数据库中通过 SQL 来访问这些数据。通过查询这些数据以及

将其与数据库中的其他表联接在一起,用户即可将这些数据用于数据库内分析。

Oracle Direct Connector for HDFS 可以直接读取 HDFS 上的文本文件。其他数据格式在由

Oracle Loader for Hadoop 预处理为 Oracle 数据泵文件之后,也可以由 Oracle Direct

Connector for HDFS 进行读取。因此,当与 Oracle Loader for Hadoop 结合使用时,Oracle

Direct Connector for HDFS 可支持多种输入数据格式。

图 2. Oracle Direct Connector for HDFS

Oracle Direct Connector for HDFS(在图 2 中称作 ODCH)采用 Hadoop 客户端(在部署数

据库的机器上运行)。该连接器首先执行发布 操作,生成的文件将指向 HDFS 上数据文件

的 URI。随后,数据库即可通过外部表以并行方式来查询 HDFS 上的数据文件。

Page 9: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

7

通过 Oracle Direct Connector for HDFS 加载数据

也可以使用 SQL 将数据加载到数据库中。如果需要经常访问数据,那么将数据加载到数据

库中是大有裨益的。同时,如果数据必须通过数据库来进行更新,那么这一加载过程也是

必不可少的。

连接器的加载和访问选项

Oracle Loader for Hadoop 和 Oracle Direct Connector for HDFS 既可以共同使用,也可以单独

使用。表 1 汇总了这两个连接器的加载和访问选项。

表 1. 加载和访问选项

加载选项 说明 特点

以脱机模式加载

或访问 Oracle 数

据泵文件

Oracle Loader for Hadoop 创建 Oracle 数据

泵文件。Oracle Direct Connector for HDFS

从 HDFS 访问或加载这些文件。

加载或访问文本

文件 数据库通过 Oracle Direct Connector for HDFS

直接读取 HDFS 中的文本文件 速度最快的加载选项,但与上一选项相比,对数据库服务器

CPU 的占用时间较长

当加载前没有足够的时间或 Hadoop 资源来转换数据时,这

一选项十分有用

可让文本数据驻留在 HDFS 上,并在数据库中通过 SQL 来

查询数据(无需加载)

输入数据仅限于文本文件格式(如需输入其他类型的数

据,则需要先通过 Oracle Loader for Hadoop 将其转换

为 Oracle 数据泵文件,如上一选项所述)

通过 OCI 直接路径

实现联机加载 Oracle Loader for Hadoop 为每个化简任务创建

一个 OCI 直接路径连接 速度最快的联机加载选项

数据库服务器 CPU 的占用时间最短

在进行预处理的同时加载数据

避免了在暂存过程中管理磁盘文件的工作

速度最快的加载选项

减少对数据库服务器 CPU 的占用时间

支持在非峰值时间调度执行加载任务

可让数据驻留在 HDFS 上,并在数据库中通过 SQL 来查

询数据(无需加载)

支持用户自定义的输入格式,可加载多种格式的输入

数据

Page 10: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

8

通过 JDBC 实现联

机加载 Oracle Loader for Hadoop 会为每个映射或化简

任务创建一个 JDBC 连接 对原型开发和测试很有帮助,支持小规模加载

性能 我们在性能测试中测量了不同加载选项的加载时间以及所使用的数据库 CPU。同时,还将

Oracle 连接器与一些第三方产品进行了对比。

配置概述

所有测试均采用 Oracle 大数据机和 Oracle Exadata 系统,并通过 40 GB/秒的 InfiniBand 结

构在两者之间建立了连接。Oracle 大数据机是一款专为 Hadoop 量身设计和优化的产品。

它配有 18 台服务器,每台服务器均搭载 2 个 CPU。每个 CPU 有 6 个内核,合计 216 个内

核。此外,每一台服务器都配有 48 GB 的内存,合计 864 GB 的内存。总存储容量为 500

TB。在该硬件上,用户可为 Hadoop 配置多达 330 个映射器任务。Oracle Exadata 是一个面

向 Oracle 数据库的工程化系统。测试中所采用的 Exadata X2-8 配备 2 台 8 槽数据库服务

器、多个 InfiniBand 交换器,并内置各种技术,可实现极高的吞吐量。

性能测试目标

(1) 测试不同加载选项的性能。

(2) 确定并记录各加载选项的性能特点,以便了解对各种用例的适用性。

(3) 通过测定加载选项所占用的 CPU 时间来评估各加载方式对数据库服务器的影响。

性能测试

数据量的规模从 100 GB(5.55 亿行)到 4 TB(220 亿行)不等。目标表包含 7 列,每个列

的数据类型不尽相同(NUMBER、VARCHAR2、DATE 及 TIMESTAMP),且通过散列分

区技术细分为 128 个分区。该测试记录了数据加载所需的时间,并且计算了加载速度(单

位时间内的数据加载量)。接受测试的加载选项包括:

• 使用 Oracle 数据泵文件的脱机加载选项

• 使用文本文件的脱机加载选项

• 使用 OCI 直接路径的联机加载选项

• 使用 JDBC 的联机加载选项

Page 11: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

9

测定加载时间的注意事项

数据库加载时间 是指将数据从 Hadoop 化简器节点(联机加载选项)或 HDFS(脱机加载

选项)加载到 Oracle 数据库表所花费的时间。此外,端到端加载时间 度量指标是指在

Hadoop 上预处理数据所用的时间与数据库加载时间之和。数据库加载时间 可准确表达从

Hadoop 系统到数据库的数据传输速率。而端到端加载时间 则将在 Hadoop 上预处理数据

(以便缩短对数据库服务器 CPU 时间的占用)所用的时间计入在内。

• 使用联机加载选项时,数据预处理和加载都发生在同一作业中,因此也可选择端到

端加载时间。

• 使用脱机加载选项时,数据预处理是一个单独的作业,并且可与数据加载在不同的

时间进行。

• 端到端加载时间大于数据库加载时间。但需要权衡考虑的是,在 Hadoop 上预处理

数据可降低对数据库服务器 CPU 的占用。

下面我们将阐述每个加载选项的运行方式,以便更好地理解每个选项的性能结果。数据处

理过程将由 Oracle Loader for Hadoop 执行。数据加载过程可由 Oracle Loader for Hadoop

(联机加载选项)完成,也可由 Oracle Direct Connector for HDFS(脱机加载选项)完成。

加载文本文件

用户可通过 Oracle Direct Connector for HDFS 来加载(或访问)文本文件。只需使用一条

SQL 语句即可将数据从外部表加载到目标表中。

使用 Oracle 数据泵文件的脱机加载选项

通过 Oracle Loader for Hadoop 创建 Oracle 数据泵文件,然后通过 Oracle Direct Connector for

HDFS 进行加载。只需使用一条 SQL 语句即可将数据从外部表加载到目标表中。

联机直接路径加载选项

此加载选项使用 OCI 直接路径加载接口,绕过了 SQL。首先在 Hadoop 上预处理数据,然

后通过直接路径加载接口将各个分区的数据加载到数据库。每个化简器任务都会创建一个

到数据库的连接,并将数据直接加载到相应的分区。

Page 12: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

10

联机 JDBC 加载选项

与其他基于 JDBC 的开源和第三方产品一样,此加载选项使用 SQL 插入语句来加载数据。

首先在 Hadoop 上预处理数据,然后使用 SQL 插入语句来加载各个分区的数据。每个化简

器任务都会创建一个到数据库的 JDBC 连接,并将数据加载到相应的分区。

测试 1:加载时间

表 2 列出了使用脱机加载选项加载文本和 Oracle 数据泵文件所需的时间。表 3 列出了使用

联机直接路径加载选项所需的时间。

脱机加载选项

测试数据量:4 TB

测试配置:Oracle 大数据机和 Oracle Exadata X2-8 上的双节点 RAC 数据库

如表 2 所示,4 TB 的数据库加载时间 为 1124 秒。这是速度最快的加载选项,加载速度超

过 12 TB/小时。测试使用 Oracle Direct Connector for HDFS 将数据从 Oracle 大数据机上的

HDFS 加载到全机架 Oracle Exadata。文本文件和 Oracle 数据泵文件的加载速度比较接近,

而加载 Oracle 数据泵文件占用的 CPU 时间较短(参见测试 2)。

表 2. 脱机加载选项的加载结果 (4 TB)

加载选项

所用时间

加载速度

加载速度

(秒) (GB/秒) (TB/小时)

脱机加载 Oracle 数据泵文件或

文本文件

1124

3.6

12

联机加载选项

测试数据量:2 TB

测试配置:Oracle 大数据机和 Oracle Exadata X2-8 上的单数据库实例

表 3 列出了使用联机直接路径加载选项时的数据库加载时间 和端到端加载时间。如上文所

述,这两种度量指标都适用于联机加载选项,因为数据预处理是数据加载作业的一个环

节。端到端加载时间 是 Hadoop 上的数据预处理时间和数据库加载时间的总和。

Page 13: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

11

在本测试中,数据从 Oracle 大数据机加载到运行单数据库实例的 Oracle Exadata 中。由于

大部分数据预处理工作已被分流到 Hadoop,因此单个数据库实例即可满足测试需求。在

部署场景中,在数据库上运行的应用程序可以充分使用其他可用的数据库实例。

表 3. 使用联机直接路径加载选项时的结果 (2 TB)

加载选项

所用时间

加载速度

加载速度

(秒) (GB/秒) (TB/小时)

联机直接路径加载 1239 1.6 5.8

数据库加载 端到端加载

3536 0.6 2

2 TB 数据量的加载速度较其他加载速度慢一些。但需要注意的是,这是端到端加载 的速

度,其中包含了加载前在 Hadoop 上预处理数据所用的时间。

测试 2:测定对数据库的影响

测试配置:Oracle 大数据机和 Oracle Exadata X2-8 上的单数据库实例

这些连接器的一个优势在于,它们可将数据预处理这一步骤分流至 Hadoop,从而减少对

数据库服务器 CPU 时间的占用。这让在数据库上运行的其他应用程序即使在加载海量数

据(大数据用例中的常见情形)期间仍然能够继续占用数据库的 CPU。

对数据库服务器 CPU 时间的占用情况因加载选项而异,图 3 中对此进行了比较。“每 GB

的 CPU 占用时间(秒)”(Y 轴)是加载过程占用的数据库服务器 CPU 时间(秒)除以数

据大小 (GB) 得到的结果。加载过程占用的 CPU 时间是通过自动负载信息库 (AWR) 报告中

的参数 CPU BUSY_TIME 来测量的。该数据包含数据库进程占用的 CPU 时间以及操作系统

进程占用的 CPU 时间。

Page 14: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

12

CP

U S

eco

nd

s u

sed

pe

r G

B

CPU 使用

50

45

40

35

30

25

脱机加载文本文件

20 脱机加载 Oracle 数据泵文件

15 10 通过 OCI 直接路径实现联机加载

5 0

0.1 TB 0.25 TB 0.5 TB

数据大小

图 3. 数据库服务器的 CPU 使用情况

与加载文本数据相比,加载 Oracle 数据泵文件占用的 CPU 时间减少了 50%,而使用联机

直接路径加载时占用的 CPU 时间则仅为加载文本数据时的 20-30%。加载 Oracle 数据泵文

件时,使用联机直接路径加载选项时的效率比使用脱机加载选项的效率更高,原因在于它

绕过了数据库服务器的 SQL。使用这两个加载选项时,数据加载之前在 Hadoop 上经过了

预处理(数据经过分区并转换为 Oracle 支持的数据类型),因此比加载文本文件所用的

CPU 时间更短。

讨论

与其他加载选项相比,联机直接路径加载选项占用的数据库服务器 CPU 时间最短。这一

特性对联机加载选项尤为重要,因为它能够确保应用程序持续运行,而不受加载的影响。

脱机加载速度更快,但数据库需要承担更多工作,因此占用的数据库服务器 CPU 时间更

长。在选择加载选项时,用户应权衡原始加载速度以及最大限度减少数据库 CPU 占用时

间这两者的重要性。在 Hadoop 上创建 Oracle 数据泵文件不仅可以缩短加载时间,而且还

可以将处理工作分流至 Hadoop。

Page 15: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

13

测试 3:数据加载的可伸缩性

测试配置:Oracle 大数据机和 Oracle Exadata X2-8 上的单数据库实例

对于每个加载选项,我们都对三种不同加载量的加载速度进行了对比。对于联机加载选

项,我们再次纳入了端到端加载速度指标。如表 4 和 5 所示,虽然加载时间随着数据量的

增加而增加,但加载速度(每秒所加载的数据量)却基本保持不变。而加载速度随着数据

量增大略有提高的原因在于安装时间(总时间的一部分)降至最低。请注意,在这些测试

中,数据从 Oracle 大数据机加载到 Oracle Exadata 上的单一数据库实例中。

图 4. 加载速度的可伸缩性(脱机)

加载选项 数据量 (TB) 数据库加载速度 所用时间

(GB/秒) (秒)

脱机加载 Oracle 数据泵文件或文本文件 0.1 1.3 76

0.25

1.5

164

0.5

1.6

316

4

1.8

2246

图 5. 加载速度的可伸缩性(联机)

加载选项 数据量 (TB) 端到端加载速度 所用时间

(GB/秒) (秒)

通过直接路径联机加载 0.1 0.5 207

0.25

0.54

472

0.5

0.54

1239

2

0.57

3536

Page 16: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

14

CP

U s

eco

nd

s u

sed

pe

r G

B

测试 4:与第三方产品的对比

测试配置:Oracle 大数据机和 Oracle Exadata X2-8 上的单数据库实例

我们将连接器与第三方产品进行了对比。针对第三方产品的测试仍然采用 Oracle 大数据

机,并通过 InfiniBand 连接至 Oracle Exadata,同时在此基础架构上进行了高度调优。我们

对处理 0.25 TB 数据量时的端到端加载速度和数据库服务器的 CPU 使用情况进行了对比。

由于许多第三方加载产品都基于 JDBC,因此我们将这些产品与使用 JDBC 的 Oracle Loader

for Hadoop 的联机加载选项进行对比,确保比较是在同类产品之间进行的。使用 JDBC 的

Oracle Loader for Hadoop 的加载速度是基于 JDBC 的第三方加载产品的两倍以上(参见表

6),并且所用的数据库 CPU 时间比第三方产品少 85%(参见图 4)。

表 6:与第三方产品的加载速度进行比较(数据量:0.25 TB)

加载选项 端到端加载速度 所用时间

(GB/秒) (秒)

使用 JDBC 的 Oracle Loader for Hadoop 的

联机加载选项

0.11

2226

同类第三方产品

0.042

5946

700

600

500

400

300

200

100

0

CPU 使用

同类第三方 使用 JDBC 的联机加载选项

产品

0.25 TB

图 4. 数据库服务器 CPU 使用情况对比:第三方产品和使用 JDBC 的联机加载选项

Page 17: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

15

CP

U s

eco

nd

s u

sed

pe

r G

B

一些产品的直接路径加载选项会采用加载器定义的分区方案将数据加载到用户表的副本

中,从而优化加载流程。这意味着,必须在加载后将数据复制到目标表中,并根据用户要

求的分区方案来进行分区。(分区通常是处理海量数据时的最佳实践。)但这样一来就增

加了加载的时间,并且占用了更多的数据库 CPU。Oracle Loader for Hadoop 的联机直接路

径加载选项与它的其他加载选项一样,采用用户定义的分区方案直接将数据加载到用户的

目标表中。这是其他产品所无法比拟的。

从功能上来看,Oracle Direct Connector for HDFS 和 Fuse-DFS 具备一些相似之处。它们都

可以从数据库访问 HDFS 上的文件。Oracle Direct Connector for HDFS 使用 Oracle 数据泵文

件加载数据的速度比 Fuse-DFS 快 5 倍(参见表 7),而它使用的数据库服务器 CPU 时间

比后者少 75% 左右(参见图 5)。

表 7:Oracle Direct Connector for HDFS 与 Fuse-DFS 的加载速度对比 (0.25 TB)

加载选项 加载速度 所用时间

(GB/秒) (秒)

Oracle Direct Connector for HDFS

1.5

164

同类第三方产品 (FUSE-DFS)

0.3

777

180

160

140

120

100

80

60

40

20

0

CPU 使用

Fuse-DFS Oracle Direct Connector

for HDFS

0.25 TB

图 5. Oracle Direct Connector for HDFS 与 Fuse-DFS 对比:数据库服务器 CPU 使用情况

Page 18: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

16

讨论

对功能相似的产品进行对比在技术上具有合理性。当使用 JDBC 的 Oracle Loader for

Hadoop 采用联机加载选项时,其加载速度比基于 JDBC 的第三方产品快 2 倍,且所用的

CPU 时间比后者少 85%。同时,Oracle Direct Connector for HDFS 使用 Oracle 数据泵文件

时加载数据的速度比 Fuse-DFS 快 5 倍,且所用的 CPU 时间比后者少 75%。

Oracle 连接器的最快加载选项的加载速度(12 TB/小时)比被测的第三方产品快 5 到

20 倍。

偏差数据的加载

如果未将数据平均分配到目标表的各个分区中,则采样器选项会将负载平均分配给所有化

简器。这将避免任何一个化简器节点成为瓶颈。因此,不管是数据存在偏差,还是没有均

匀分配,加载速度都将保持不变。

总结

借助 Oracle 大数据机和 Oracle Exadata,HDFS 上文件的加载速度可达到 12 TB/小时。如果

预先使用 Oracle Loader for Hadoop 将数据转换为 Oracle 数据泵文件,那么所用的数据库

CPU 时间将缩短 50%。

使用联机加载选项时,数据库的部分工作将分流至 Hadoop。因此,使用联机直接路径加

载选项时占用的数据库 CPU 时间仅为其他加载选项的 20-30%,但其加载速度比最快加载

选项的速度慢。该选项适用于持续的数据传送。此外,由于文件无需暂存,因此它还具备

更简洁的可管理性。

对 Oracle 连接器与第三方产品进行对比时,我们将功能相似的加载选项放在一起进行比

较。Oracle Direct Connector for HDFS 的加载速度比 Fuse-DFS 快 5 倍,且所用的 CPU 时间

减少了约 75%(使用 Oracle 数据泵文件时)。Oracle Loader for Hadoop 使用 JDBC 联机加

载选项时比基于 JDBC 的第三方产品快 2 倍,所用的 CPU 时间减少了 85%。当使用速度最

快的加载选项时,Oracle 连接器的加载速度(12 TB/小时)比其他产品快 5 到 20 倍。

Page 19: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与 Oracle 数据库之间实现数据加载和访问

17

如果输入数据与目标表中对应的分区之间存在偏差,那么一些节点将会处理更多的工作,

这样会拖慢整个加载任务。Oracle Loader for Hadoop 可平均分配所有节点的工作,避免出

现这类瓶颈。

由于支持用户自定义的输入格式,因此 Oracle Loader for Hadoop 可读取几乎所有格式的数

据。当它将数据转换为 Oracle 数据泵文件之后,Oracle Direct Connector for HDFS 即可访问

从众多格式转换而来的数据。

总结

Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS)

是两款高性能连接器,可实现 Hadoop 平台与 Oracle 数据库之间的数据加载与访问。它们

可使 Oracle 大数据机到 Oracle Exadata 的数据加载速度达到 12 TB/小时,所用的数据库

CPU 时间也少于其他产品。得益于 Oracle 的积极研发和全力支持,这两款快速、高效的连

接器可在各种用例中使用。

Page 20: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

甲骨文(中国)软件系统有限公司

北京远洋光华中心办公室

地址:北京市朝阳区景华南街5号远洋光华中心C座21层

邮编:100020

电话:(86.10) 6535-6688

传真:(86.10) 6515-1015

北京汉威办公室

地址:北京市朝阳区光华路7号汉威大厦10层1003-1005单元

邮编:100004

电话:(86.10) 6535-6688

传真:(86.10) 6561-3235

北京甲骨文大厦

地址:北京市海淀区中关村软件园24号楼甲骨文大厦

邮编:100193

电话:(86.10) 6106-6000

传真:(86.10) 6106-5000

北京国际软件大厦办公室

地址:北京市海淀区中关村软件园9号楼国际软件大厦二区308单元

邮编:100193

电话:(86.10) 8279-8400

传真:(86.10) 8279-8686

北京孵化器办公室

地址:北京市海淀区中关村软件园孵化器2号楼A座一层

邮编:100193

电话:(86.10) 8278-6000

传真:(86.10) 8282-6401

上海名人商业大厦办公室

地址:上海市黄浦区天津路155号名人商业大厦12层

邮编:200001

电话:(86.21) 2302-3000

传真:(86.21) 6340-6055

上海腾飞浦汇大厦办公室

地址:上海市黄浦区福州路318号腾飞浦汇大厦508-509室

邮编:200001

电话:(86.21) 2302-3000

传真:(86.21) 6391-2366

上海创智天地10号楼办公室

地址:上海市杨浦区凇沪路290号创智天地10号楼512-516单元

邮编:200433

电话:(86.21) 6095-2500

传真:(86.21) 6107-5108

上海创智天地11号楼办公室

地址:上海市杨浦区淞沪路303号创智天地科教广场3期11号楼7楼

邮编:200433

电话:(86.21) 6072-6200

传真:(86.21) 6082-1960

上海新思大厦办公室

地址:上海市漕河泾开发区宜山路926号新思大厦11层

邮编:200233

电话:(86.21) 6057-9100

传真:(86.21) 6083-5350

广州国际金融广场办公室

地址:广州市天河区珠江新城华夏路8号合景国际金融广场18楼

邮编:510623

电话:(86.20) 8513-2000

传真:(86.20) 8513-2380

成都中海国际中心办公室

地址:成都市高新区交子大道177号中海国际中心7楼B座02-06单元

邮编:610041

电话:(86.28) 8530-8600

传真:(86.28) 8530-8699

深圳飞亚达科技大厦办公室

地址:深圳市南山区高新南一道飞亚达科技大厦16层

邮编:518057

电话:(86.755) 8396-5000

传真:(86.591) 8601-3837

深圳德赛科技大厦办公室

地址:深圳市南山区高新南一道德赛科技大厦8层0801-0803单元

邮编:518057

电话:(86.755) 8660-7100

传真:(86.755) 2167-1299

大连办公室

地址:大连软件园东路23号大连软件园15号楼502

邮编:116023

电话:(86.411) 8465-6000

传真:(86.755) 8465-6499

苏州办公室

地址:苏州工业园区星湖街328号苏州国际科技园5期11幢1001室

邮编:215123

电话:(86.512) 8666-5000

传真:(86.512) 8187-7838

沈阳办公室

地址:沈阳市和平区青年大街390号皇朝万鑫国际大厦A座39层3901&3911室

邮编:110003

电话:(86.24) 8393-8700

传真:(86.24) 2353-0585

济南办公室

地址:济南市泺源大街150号中信广场11层1113单元

邮编:250011

电话:(86.531) 6861-1900

传真:(86.531) 8518-1133

南京办公室

地址:南京市玄武区洪武北路55号置地广场19层1911室

邮编:210018

电话:(86.25) 8579-7500

传真:(86.25) 8476-5226

西安办公室

地址:西安市高新区科技二路72号西安软件园零壹广场主楼1401室

邮编:710075

电话:(86.29) 8834-3400

传真:(86.25) 8833-9829

Page 21: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

重庆办公室

地址:重庆市渝中区邹容路68号大都会商厦1611室

邮编:400010

电话:(86.23) 6037-5600

传真:(86.23) 6370-8700

杭州办公室

地址:杭州市西湖区杭大路15号嘉华国际商务中心810&811室

邮编:310007

电话:(86.571) 8168-3600

传真:(86.571) 8717-5299

福州办公室

地址:福州市五四路158号环球广场1601室

邮编:350003

电话:(86.591) 8621-5050

传真:(86.591) 8801-0330

青岛办公室

地址:青岛市香港中路76号颐中皇冠假日酒店909室

邮编:266071

电话:(86.532) 8571-8888

传真:(86.591) 8571-6666

南昌办公室

地址:江西省南昌市西湖区沿江中大道258号

皇冠商务广场10楼1009室

邮编:330025

电话:(86.791) 8612-1000

传真:(86.791) 8657-7693

呼和浩特办公室

地址:内蒙古自治区呼和浩特市新城区迎宾北路7号

大唐金座19层北侧1902-1904室

邮编:010051

电话:(86.471) 3941-600

传真:(86.471) 5100-535

郑州办公室

地址:河南省郑州市中原区中原中路220号

裕达国际贸易中心A座2015室

邮编:450007

电话:(86.371) 6755-9500

传真:(86.371) 6797-2085

武汉办公室

地址:武汉市江岸区中山大道1628号

武汉天地企业中心5号大厦23层2301单元

邮编:430010

电话:(86.27) 8221-2168

传真:(86.27) 8221-2168

长沙办公室

地址:长沙市芙蓉区韶山北路159号通程国际大酒店1311-1313室

邮编:410011

电话:(86.731) 8977-4100

传真:(86.731) 8425-9601

石家庄办公室

地址:石家庄市中山东路303号石家庄世贸广场酒店14层1402室

邮编:050011

电话:(86.311) 6670-8080

传真:(86.311) 8667-0618

昆明办公室

地址:昆明市三市街六号柏联广场写字楼11层1103A室

邮编:650021

电话:(86.871) 6402-4600

传真:(86.871) 6361-4946

合肥办公室

地址:安徽省合肥市蜀山区政务新区怀宁路1639号平安大厦18层1801室

邮编:230022

电话:(86.551) 6595-8200

传真:(86.551) 6371-3182

南宁办公室

地址:广西省南宁市青秀区民族大道136-2号华润大厦B座2302室

邮编:530028

电话:(86.771) 391-8400

传真:(86.771) 577-5500

Page 22: 使用高性能连接器在 Hadoop 与 Oracle 数 据库之间实现数据 …...Oracle Loader for Hadoop 和 Oracle Direct Connector for Hadoop Distributed File System (HDFS) 可实现

使用高性能连接器在 Hadoop 与

Oracle 数据库之间实现数据加载和访问

2012 年 6 月

公司网址:http://www.oracle.com(英文)

中文网址:http://www.oracle.com/cn(简体中文)

销售中心:800-810-0161

售后服务热线:800-810-0366

培训服务热线:800-810-9931

欢迎访问:

http://www.oracle.com(英文)

http://www.oracle.com/cn(简体中文)

版权© 2014 归 Oracle 公司所有。未经允许,不得以任何

形式和手段复制和使用。

本文的宗旨只是提供相关信息,其内容如有变动,恕不另

行通知。Oracle 公司对本文内容的准确性不提供任何保证,

也不做任何口头或法律形式的其他保证或条件,包括关于

适销性或符合特定用途的所有默示保证和条件。本公司特

别声明对本文档不承担任何义务,而且本文档也不能构成

任何直接或间接的合同责任。未经 Oracle 公司事先书面许

可,严禁将此文档为了任何目的,以任何形式或手段(无论

是电子的还是机械的)进行复制或传播。

Oracle 是 Oracle 公司和/或其分公司的注册商标。其他名

字均可能是各相应公司的商标。