使用 Oracle Cloud Infrastructure Data Flow 从外部对象存储源分析数据
您的数据位于不同的云中,例如 Amazon Web Services S3 或 Azure Blob Storage,但您希望从通用分析平台对其进行分析。Oracle Cloud Infrastructure Data Flow 是一个完全托管的 Spark 服务,您可以开发和运行大数据分析,而不管数据位于何处,而无需部署或管理大数据集群。
体系结构
此体系结构显示连接到 Amazon Web 服务 (AWS) S3 存储桶或 Azure Blob 存储桶的 Oracle Cloud Infrastructure Data Flow,分析数据,并将结果保存在 Oracle Cloud Infrastructure Object Storage 中。
要连接到 AWS,数据流应用程序需要 AWS 访问密钥和密钥。要连接到 Azure,数据流需要 Azure 帐户名称和帐户关键字。
下图说明了此引用体系结构。
oci-dataflow-architecture-oracle.zip
体系结构包含以下组件:
- 区域
Oracle Cloud Infrastructure 区域是一个本地化地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,其距离很大(跨越国家或甚至大陆)可以分开。
- Oracle Cloud Infrastructure Data Flow
Oracle Cloud Infrastructure Data Flow 是一个基于云的无服务器平台,可用于创建、编辑和运行任何规模的 Spark 作业,而无需群集、操作团队或高度专业化的 Spark 知识。在运行时,数据流获取应用程序源、创建连接、检索数据、处理数据并将输出写入 Oracle Cloud Infrastructure Object Storage。
- 对象存储
通过对象存储,可以快速访问任意内容类型的大量结构化和非结构化数据,包括数据库备份、分析数据以及图像和视频等丰富内容。您可以安全可靠地存储数据,然后直接从互联网或云平台检索数据。您可以无缝扩展存储,而不会降低性能或服务可靠性。对需要快速、立即和频繁访问的“热”存储使用标准存储。将归档存储用于长期保留的“冷”存储,并且很少或很少访问。
建议
使用以下建议案作为使用 Oracle Cloud Infrastructure Data Flow 分析外部对象存储源中的数据的起点。
您的要求可能与此处描述的体系结构不同。
- 数据位置
此体系结构供用户使用数据流快速轻松地测试 Spark 应用程序。成功进行可行性测试后,我们建议将源数据传输到 Oracle Cloud Infrastructure Object Storage ,以提高性能和降低成本。
- 对象存储
此体系结构使用标准 Oracle Cloud Infrastructure Object Storage 存储处理的输出,以便其他云服务可以访问输出进行进一步分析和显示。
考虑事项
使用 Oracle Cloud Infrastructure Data Flow 从外部对象存储源分析数据时,请考虑这些部署选项。
- Spark 应用程序
如果您有针对 Amazon Web Services S3 或 Azure Blob Storage 中的数据执行的现有 Spark 应用程序,则可以在 Oracle Cloud Infrastructure Data Flow 中使用相同的 Spark 应用程序。
- 性能
跨数据中心读取数据本质上是缓慢的。此体系结构适用于概念验证或 CPU 密集型应用程序,例如机器学习工作。如果您的概念证明成功,请先将源数据本地传输到 Oracle Cloud Infrastructure Object Storage,然后再运行大型生产作业。
- 安全性
使用策略可以限制谁可以访问 Oracle Cloud Infrastructure 资源以及在多大程度上访问 Oracle Cloud Infrastructure 资源。
使用 Oracle Cloud Infrastructure Identity and Access Management (IAM) 可以为数据流和数据流中的运行管理的特定用户和用户组分配权限。
默认情况下,已为 Oracle Cloud Infrastructure Object Storage 启用加密,无法关闭。
- 成本
Oracle Cloud Infrastructure Data Flow 按使用付费,因此您只需在运行数据流应用程序时付费,而无需在创建时付费。
处理大量 Amazon Web Services S3 数据可能会导致大量数据出站成本高。
部署
此引用体系结构的 Terraform 代码在 Oracle Cloud Infrastructure Resource Manager 中作为示例堆栈提供。此示例 Terraform 堆栈部署 OCI 数据流应用程序环境,以及 IAM 策略和 OCI 对象存储桶(非第三方存储)。默认情况下,还将部署演示 Python Spark 应用程序。您还可以从 GitHub 下载代码,并对其进行定制以满足您的特定需求。
- 使用 Oracle Cloud Infrastructure Resource Manager 中的示例堆栈进行部署:
- 使用 GitHub 中的 Terraform 代码部署:
- 转到 GitHub 。
- 将系统信息库克隆或下载到本地计算机。
- 按照
README文档中的说明进行操作。
除了 GitHub 上提供的 Terraform 代码之外,下面的代码片段还说明了如何连接到 Amazon Web Services S3 以及如何查询数据。
- 要连接到 S3 并从中查询数据,需要包括
hadoop-aws.jar和aws-java-sdk.jar软件包。可以按如下方式在pom.xml文件中引用这些软件包:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency> - 使用类似于以下代码的代码连接到 Amazon Web Services S3。您必须提供访问密钥和密钥。在下面的片段中,这些值分别由变量
ACCESS和SECRET表示:SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate(); - 使用类似于以下代码的代码使用 S3 位置和指定的表名查询数据。
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");
了解更多信息
了解有关此体系结构功能的更多信息。
-
要查看产品信息,请参阅 Oracle Cloud Infrastructure Data Flow。
-
要尝试数据流,请使用 Oracle Cloud Infrastructure Data Flow 入门教程。
- 要了解有关 Python 和 Oracle Cloud Infrastructure Data Flow 的更多信息,请使用 Oracle LiveLabs 研讨会使用 OCI 数据流的 Python 应用程序示例
-
要了解有关代码片段中显示的 SparkSession 和数据集类的详细信息,请参阅 Spark Java API 文档。
-
有关 Apache Spark 支持的其他 API 的信息,请参见 Spark API Documentation。
有关常规 Oracle Cloud Infrastructure 体系结构准则,请参见 Best practices framework for Oracle Cloud Infrastructure。
