注:

使用 Oracle Cloud Infrastructure Data Flow 处理 Autonomous Database 和 Kafka 中的大文件

简介

Oracle Cloud Infrastructure (OCI) 数据流是用于运行 Apache Spark TM 应用程序的完全托管服务。数据流用于处理大文件、流处理、数据库操作,您可以通过高度可扩展的处理构建大量应用程序。Apache Spark 可以扩展和使用群集计算机,通过最低配置来并行化作业。

使用 Apache Spark 作为托管服务(数据流),您可以添加许多可伸缩服务以乘以云处理的力量,本教程介绍了如何使用:

dataflow-use-case.png

在本教程中,您可以看到用于处理大文件、查询数据库以及合并/联接数据以在内存中形成另一个表的最常见活动。您可以将此海量数据写入数据库,并在 Kafka 队列中写入高性能、低成本的数据。

目标

先决条件

任务 1:创建对象存储结构

对象存储将用作默认文件存储库。您可以使用其他类型的文件资料档案库,但对象存储是一种简单且低成本的方法来处理具有性能的文件。在本教程中,两个应用程序都将从对象存储加载大型 CSV 文件,展示 Apache Spark 如何快速而智能地处理大量数据。

  1. 创建区间:区间对于组织和隔离云资源很重要。您可以按 IAM 策略隔离资源。

    • 您可以使用此链接了解和设置区间的策略:管理区间

    • 创建一个区间来托管本教程中 2 个应用程序的所有资源。创建名为 analytics 的区间。

    • 转到 Oracle Cloud 主菜单并搜索:身份与安全性区间。在“区间”部分中,单击创建区间并输入名称。

      create-compartment.png

      :您需要向一组用户授予访问权限并包括您的用户。

    • 单击创建区间以包括您的区间。

  2. 在对象存储中创建存储桶:存储桶是用于存储对象的逻辑容器,因此用于此演示的所有文件都将存储在此存储桶中。

    • 转到 Oracle Cloud 主菜单并搜索存储存储桶。在“Buckets(存储桶)”部分,选择之前创建的区间 (analytics)。

      select-compartment.png

    • 单击创建存储桶。创建 4 个存储桶:应用、数据、数据流日志、Wallet

      create-bucket.png

    • 输入包含这 4 个存储桶的存储桶名称信息,并使用默认选择维护其他参数。

    • 对于每个存储桶,单击创建。您可以看到创建的存储桶。

      存储桶 -dataflow.png

注:查看存储桶的 IAM 策略。如果要在演示应用程序中使用这些存储桶,则必须设置策略。您可以在对象存储概览IAM 策略中了解这些概念和设置。

任务 2:创建 Autonomous Database

Oracle Cloud Autonomous Database 是 Oracle Database 的托管服务。对于本教程,应用程序将出于安全原因通过 Wallet 连接到数据库。

注:在此处查看用于访问 Autonomous Database 的 IAM 策略:IAM Policy for Autonomous Database

任务 3:上载 CSV 示例文件

为了演示 Apache Spark 的强大功能,应用程序将读取包含 1,000,000 行的 CSV 文件。此数据将仅使用一个命令行插入 Autonomous Data Warehouse 数据库,并在 Kafka 流处理 (Oracle Cloud Streaming) 上发布。所有这些资源都可扩展且非常适合高数据量。

您可以看到名为 GDPPERCAPTA 的新表已成功导入。

adw-table-imported.png

任务 4:为 ADW ADMIN 密码创建密钥储存库

出于安全原因,ADW ADMIN 密码将保存在 Vault 上。Oracle Cloud Vault 可以安全地托管此密码,并且可以通过 OCI 验证在您的应用中访问。

注:请在此处查看 OCI Vault 的 IAM 策略: OCI Vault IAM 策略

任务 5:使用 Oracle Cloud 流处理服务创建 Kafka 流处理

Oracle Cloud Streaming 是一种类似于托管流处理服务的 Kafka。您可以使用 Kafka API 和常用 SDK 开发应用。在本教程中,您将创建流处理实例并配置为在两个应用程序中执行以发布和使用大量数据。

  1. 从 Oracle Cloud 主菜单中,转至 Analytics & AIStreams

  2. 将区间更改为 analytics 。将在此区间中创建此演示中的每个资源。这样可以更安全、更轻松地控制 IAM。

  3. 单击创建流

    create-stream.png

  4. 将名称输入为 kafka_like (例如),您可以使用默认值维护所有其他参数。

    save-create-stream.png

  5. 单击创建以初始化实例。

  6. 等待 Active(活动)状态。现在,您可以使用该实例。

    注:在流创建过程中,您可以选择自动创建默认流池选项以自动创建默认池。

  7. 单击 DefaultPool 链接。

    default-pool-option.png

  8. 查看连接设置。

    stream-conn-settings.png

    kafka-conn.png

  9. 在下一步中根据需要添加此信息注释。

注:请在此处查看 OCI 流处理的 IAM 策略: OCI 流处理的 IAM 策略

任务 6:生成 AUTH TOKEN 以访问 Kafka

您可以使用与 OCI IAM 上的用户关联的验证令牌来访问 Oracle Cloud 中的 OCI 流处理 (Kafka API) 和其他资源。在 Kafka 连接设置中,SASL 连接字符串有一个名为 password 的参数和一个 AUTH_TOKEN 值,如上一个任务中所述。要启用对 OCI 流处理的访问,您需要转到 OCI 控制台上的用户并创建 AUTH TOKEN。

  1. 从 Oracle Cloud 主菜单中,转至身份与安全性用户

    :请记住,创建 AUTH TOKEN 所需的用户是配置有 OCI CLI 的用户,以及直到现在为止创建的资源的所有 IAM 策略配置。资源包括:

    • Oracle Cloud Autonomous Data Warehouse
    • Oracle Cloud 流处理
    • Oracle Object Storage
    • Oracle Data Flow
  2. 单击您的用户名可查看详细信息。

    auth_token_create.png

  3. 单击控制台左侧的 Auth Tokens 选项,然后单击 Generate Token(生成令牌)

    :标记将仅在此步骤中生成,在完成该步骤后将不可见。因此,请复制值并保存该值。如果丢失令牌值,则必须再次生成验证令牌。

    auth_token_1.png

    auth_token_2.png

任务 7:设置演示应用程序

本教程包含两个演示应用程序,我们将为其设置所需信息:

  1. 使用以下链接下载应用程序:

  2. 在 Oracle Cloud 控制台中找到以下详细信息:

    • 租户名称空间

      租户 -namespace-1.png

      租户名称空间 -detail.png

    • 密码密钥

      Vault-adw.png

      vault-adw-detail.png

      机密 -adw.png

    • 流处理连接设置

      kafka-conn.png

    • 验证令牌

      auth_token_create.png

      auth_token_2.png

  3. 打开下载的 zip 文件(Java-CSV-DB.zipJavaConsumeKafka.zip)。转到 /src/main/java/example 文件夹并查找 Example.java 代码。

    代码 -variables.png

    • 这些变量需要随租户资源值一起更改。

      变量名称 资源名称 信息标题
      名称空间 租户名称空间 租户
      OBJECT_STORAGE_NAMESPACE 租户名称空间 租户
      PASSWORD_SECRET_OCID PASSWORD_SECRET_OCID OCID
      streamPoolId 流处理连接设置 ocid1.streampool.oc1.iad..... SASL 连接字符串中的值
      kafkaUsername 流处理连接设置 SASL 连接字符串中 "" 内的用户名的值
      kafkaPassword 验证令牌 该值仅显示在创建步骤中

注:为此教程创建的所有资源都位于 US-ASHBURN-1 区域中。检查要使用的区域。如果更改区域,则需要在 2 个代码文件中更改以下详细信息:

任务 8:了解 Java 代码

此教程是用 Java 创建的,此代码也可以移植到 Python。本教程分为两部分:

为了证明效率和可扩展性,开发了这两个应用程序,以在集成过程的常见用例中显示一些可能性。因此,两个应用程序的代码都显示以下示例:

此演示可以在本地计算机中执行,并可以部署到数据流实例中,以作为作业执行运行。

注:对于数据流作业和本地计算机,使用 OCI CLI 配置访问 OCI 资源。在“数据流”端,所有内容都已预先配置,因此无需更改参数。在本地计算机端,安装 OCI CLI 并配置租户、用户和私有密钥来访问您的 OCI 资源。

让我们在以下部分中显示 Example.java 代码:

任务 9:使用 Maven 为您的应用打包

在 Apache Spark 中执行作业之前,必须使用 Maven 打包应用程序。Maven 是使用库和插件打包应用程序的最知名的实用程序之一。

注:

  1. Java-CSV-DB 程序包

    1. 转到 /Java-CSV-DB 文件夹,然后执行以下命令:

      mvn package

    2. 您可以看到 Maven 正在开始打包。

      maven-package-1a.png

    3. 如果一切正确,可以查看成功消息。

      maven-success-1a.png

    4. 要在本地 Apache Spark 计算机中测试应用程序,请执行以下命令:

      spark-submit --class example.Example target/loadadw-1.0-SNAPSHOT.jar

  2. JavaConsumeKafka 程序包

    1. 转到 /JavaConsumeKafka 文件夹并执行以下命令:

      mvn package

    2. 您可以看到 Maven 正在开始打包。

      maven-package-2a.png

    3. 如果一切正确,可以查看成功消息。

      maven-success-2a.png

    4. 要在本地 Apache Spark 计算机中测试应用程序,请执行以下命令:

      spark-submit --class example.Example target/loadkafka-1.0-SNAPSHOT.jar

任务 10:验证执行

  1. 确认 ADW 插入

    1. 转到 Oracle Cloud 主菜单,选择 Oracle DatabaseAutonomous Data Warehouse

    2. 单击已处理日志实例可查看详细信息。

    3. 单击数据库操作可转到数据库实用程序。

      adw-actions.png

    4. ADMIN 用户输入身份证明。

      adw-login.png

    5. 单击 SQL 选项可转至查询实用程序。

      adw-select-sql.png

    6. 执行查询以查看表中的 1,000,000 行。

      ADW- 查询 -organizations.png

  2. 确认执行日志

    • 如果作业可以访问和加载数据集,则可以在执行日志中查看。

      spark-csv-results.png

任务 11:创建和执行数据流作业

现在,在本地 Apache Spark 计算机中成功运行两个应用后,可以将它们部署到租户中的 Oracle Cloud 数据流中。

  1. 从 Oracle Cloud 主菜单中,转至分析和 AI数据流

  2. 在创建数据流应用程序之前,请确保选择分析区间。

  3. 单击创建应用程序

    create-dataflow-app.png

  4. 如下图所示完成参数:

    数据流 -app.png

  5. 单击创建

  6. 创建后,单击缩放演示链接可查看详细信息。

  7. 单击运行以执行作业。

  8. 确认参数,然后再次单击运行

    dataflow-run-job.png

  9. 查看作业的状态,等待状态更改为成功,您可以看到结果。

    dataflow-run-status.png

    dataflow-run-success.png

后续步骤

第一个应用程序将数据发布到 Kafka 流处理。第二个应用程序从 Kafka 使用这些数据。

确认

更多学习资源

探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心