将 Ooozie 工作流程转换为 AWS Step FunctionsAWS Schema Conversion Tool - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Ooozie 工作流程转换为 AWS Step FunctionsAWS Schema Conversion Tool

要转换 Apache Oozie 工作流程,请确保使用 AWS SCT 版本 1.0.671 或更高版本。另外,请熟悉的命令行界面 (CLI)。 AWS SCT有关更多信息,请参阅 CLI的参考 AWS Schema Conversion Tool

转换概述

Apache Oozie 源代码包括操作节点、控制流节点和作业属性。操作节点定义了 Apache Oozie 工作流程中运行的作业。当您使用 Apache Oozie 编排 Apache Hadoop 集群时,操作节点会包含一个 Hadoop 作业。控制流节点提供了一种控制工作流路径的机制。控制流节点包括 startenddecisionforkjoin 等节点。

AWS SCT 将您的源操作节点和控制流节点转换为 AWS Step Functions。在中 AWS Step Functions,您可以使用 Amazon States 语言 (ASL) 定义工作流程。 AWS SCT ASL用于定义你的状态机,它是一个可以起作用的状态的集合,确定下一个要过渡到哪些状态,因错误而停止,等等。接下来, AWS SCT 上传带有状态机定义的JSON文件。然后, AWS SCT 可以使用你的 AWS Identity and Access Management (IAM) 角色在中配置状态机 AWS Step Functions。有关更多信息,请参阅什么是 AWS Step Functions? 在《AWS Step Functions 开发人员指南》中。

此外,还 AWS SCT 会创建一个扩展包, AWS Lambda 其中包含模拟 AWS Step Functions 不支持的源函数的函数。有关更多信息,请参阅 将扩展包与 AWS Schema Conversion Tool

AWS SCT 会将您的源作业属性迁移到。 AWS Systems Manager要存储参数名称和值,请 AWS SCT 使用参数存储,其功能为 AWS Systems Manager。有关更多信息,请参阅什么是 AWS Systems Manager? 在《AWS Systems Manager 用户指南》中。

您可以使用 AWS SCT 自动更新参数的值和名称。由于 Apache Oozie 和之间的架构差异 AWS Step Functions,您可能需要配置参数。 AWS SCT 可以在源文件中找到指定的参数名称或值并将其替换为新值。有关更多信息,请参阅 步骤 3:配置参数

下图显示了 Apache Oozie 转换为 Apache Oozie 的架构图。 AWS Step Functions

将 Apache Oozie 转换为. AWS Step Functions

要开始转换,请创建并运行您的 AWS SCT CLI脚本。此脚本包含运行转换的完整命令集。您可以下载和编辑 Apache Oozie 转换脚本的模板。有关更多信息,请参阅 获取CLI场景

请确保脚本包含以下步骤。

步骤 1:连接到源服务和目标服务

要开始转换你的 Apache Oozie 集群,请创建一个新 AWS SCT 项目。接下来,连接到源服务和目标服务。在开始迁移之前,请务必创建和配置目标 AWS 资源。有关更多信息,请参阅 使用 Apache Oozie 为源的先决条件

在此步骤中,您将使用以下 AWS SCT CLI命令。

  • CreateProject— 创建新 AWS SCT 项目。

  • AddSource:在 AWS SCT 项目中添加源 Apache Oozie 文件。

  • ConnectSource:作为源连接到 Apache Oozie。

  • AddTarget— 在您的项目中添加 AWS Step Functions 为迁移目标。

  • ConnectTarget:连接到 AWS Step Functions。

有关使用这些 AWS SCT CLI命令的示例,请参见连接到 Apache Oozie

当您运行ConnectSourceConnectTarget命令时, AWS SCT 会尝试与您的服务建立连接。如果连接尝试失败,则 AWS SCT 停止运行CLI脚本中的命令并显示错误消息。

步骤 2:设置映射规则

连接到源服务和目标服务后,设置映射规则。映射规则定义源 Apache Oozie 工作流程和参数的迁移目标。有关映射规则的更多信息,请参阅 映射中的数据类型 AWS Schema Conversion Tool

要定义要转换的源对象和目标对象,请使用 AddServerMapping 命令。此命令使用两个参数:sourceTreePathtargetTreePath。这些参数值包括源对象和目标对象的显式路径。要使 Apache Oozie 进行 AWS Step Functions 转换,这些参数必须以 ETL 开头。

以下代码示例为 OOZIEAWS_STEP_FUNCTIONS 对象创建映射规则。您在上一步中使用AddSourceAddTarget命令将这些对象添加到 AWS SCT 项目中。

AddServerMapping -sourceTreePath: 'ETL.APACHE_OOZIE' -targetTreePath: 'ETL.AWS_STEP_FUNCTIONS' /

有关该AddServerMapping命令的更多信息,请参阅《AWS Schema Conversion Tool CLI参考》。

步骤 3:配置参数

如果您的源 Apache Oozie 工作流程使用参数,则可能需要在转换为 AWS Step Functions后更改其值 此外,您可能需要添加新的参数才能与您一起使用 AWS Step Functions。

在此步骤中,您将使用 AddParameterMappingAddTargetParameter 命令。

要替换源文件中的参数值,请使用 AddParameterMapping 命令。 AWS SCT 会扫描源文件,按名称或值查找参数,然后更改其值。您可以运行单个命令扫描所有源文件。您可以使用以下列表中的前三个参数之一定义要扫描的文件范围。此命令最多使用六个参数。

  • filterName:源对象的过滤器名称。您可以使用 CreateFilter 命令创建过滤器。

  • treePath:源对象的显式路径。

  • namePath:特定源对象的显式路径。

  • sourceParameterName:源参数的名称。

  • sourceValue:源参数的值。

  • targetValue:目标参数的值。

以下代码示例将值等于 c:\oozie\hive.py 的所有参数替换为 s3://bucket-oozie/hive.py 值。

AddParameterMapping -treePath: 'ETL.OOZIE.Applications' -sourceValue: 'c:\oozie\hive.py' -targetValue: 's3://bucket-oozie/hive.py' /

以下代码示例将名称等于 nameNode 的所有参数替换为 hdfs://ip-111-222-33-44.eu-west-1.compute.internal:8020 值。

AddParameterMapping -treePath: 'ETL.OOZIE_SOURCE.Applications' -sourceParameter: 'nameNode' -targetValue: 'hdfs://ip-111-222-33-44.eu-west-1.compute.internal:8020' /

以下代码示例将名称等于 nameNode 且值等于 hdfs://ip-55.eu-west-1.compute.internal:8020 的所有参数替换为 targetValue 参数中的值。

AddParameterMapping -treePath: 'ETL.OOZIE_SOURCE.Applications' -sourceParameter: 'nameNode' -sourceValue: 'hdfs://ip-55-66-77-88.eu-west-1.compute.internal:8020' -targetValue: 'hdfs://ip-111-222-33-44.eu-west-1.compute.internal:8020' /

除了源文件中的现有参数外,要在目标文件中添加新参数,请使用 AddTargetParameter 命令。此命令使用与 AddParameterMapping 命令相同的参数集。

以下代码示例添加了 clusterId 目标参数而不是 nameNode 参数。

AddTargetParameter -treePath: 'ETL.OOZIE_SOURCE.Applications' -sourceParameter: 'nameNode' -sourceValue: 'hdfs://ip-55-66-77-88.eu-west-1.compute.internal:8020' -targetParameter: 'clusterId' -targetValue: '1234567890abcdef0' /

有关AddServerMappingAddParameterMappingAddTargetParameterCreateFilter命令的更多信息,请参阅AWS Schema Conversion Tool CLI参考文档

步骤 4:创建评估报告

在开始转换之前,建议您创建一份评估报告。该报告总结了所有迁移任务,并详细说明了迁移期间将出现的操作项。为确保迁移不会失败,请在迁移之前查看此报告并解决操作项。有关更多信息,请参阅 评测报告

在此步骤中,您将使用 CreateReport 命令。此命令使用两个参数。第一个参数描述了为其 AWS SCT 创建评估报告的源对象。为此,请使用以下参数之一:filterNametreePathnamePath。此参数是必填的。此外,您还可以添加可选的布尔参数 forceLoad。如果将此参数设置为true,则 AWS SCT 会自动加载您在CreateReport命令中指定的源对象的所有子对象。

以下代码示例为源 Oozie 文件的 Applications 节点创建评估报告。

CreateReport -treePath: 'ETL.APACHE_OOZIE.Applications' /

然后,您可以将评估报告的副本另存为PDF或以逗号分隔的值 (CSV) 文件。为此,使用SaveReportPDFSaveReportCSV 命令。

SaveReportPDF命令将评估报告的副本保存为PDF文件。此命令使用四个参数。file 参数为必填的;其他参数是可选的。

  • file— PDF 文件的路径及其名称。

  • filter:您之前创建的筛选器的名称,用于定义要迁移的源对象的范围。

  • treePath:保存评估报告副本的源数据库对象的明确路径。

  • namePath:仅包含保存评估报告副本的目标对象名称的路径。

SaveReportCSV命令将您的评估报告保存在CSV文件中。此命令使用四个参数。directory 参数为必填的;其他参数是可选的。

  • directory— AWS SCT 保存CSV文件的文件夹的路径。

  • filter:您之前创建的筛选器的名称,用于定义要迁移的源对象的范围。

  • treePath:保存评估报告副本的源数据库对象的明确路径。

  • namePath:仅包含保存评估报告副本的目标对象名称的路径。

以下代码示例将评估报告的副本保存在 c:\sct\ar.pdf 文件中。

SaveReportPDF -file:'c:\sct\ar.pdf' /

以下代码示例将评估报告的副本另存为c:\sct文件夹中的CSV文件。

SaveReportCSV -file:'c:\sct' /

有关CreateReportSaveReportPDFSaveReportCSV命令的更多信息,请参阅AWS Schema Conversion Tool CLI参考文档

第 5 步:将你的 Apache Oozie 工作流程转换为 AWS Step FunctionsAWS SCT

配置 AWS SCT 项目后,转换源代码并将其应用于 AWS Cloud。

在此步骤中,您将使用 ConvertSaveOnS3ConfigureStateMachineApplyToTarget 命令。

Migrate 命令会将源对象迁移到目标集群。此命令使用四个参数。请务必指定 filtertreePath 参数。其他参数都是可选的。

  • filter:您之前创建的筛选器的名称,用于定义要迁移的源对象的范围。

  • namePath:特定源对象的显式路径。

  • treePath:保存评估报告副本的源数据库对象的明确路径。

  • forceLoad— 如果设置为true, AWS SCT 则会在迁移期间自动加载数据库元数据树。默认值为 false

以下代码示例转换源 Oozie 文件中 Applications 文件夹中的文件。

Convert -treePath: 'ETL.APACHE_OOZIE.Applications' /

SaveOnS3 会将状态机定义上传到 Amazon S3 存储桶。此命令使用 treePath 参数。要运行此命令,请使用带有状态机定义的目标文件夹作为此参数的值。

以下内容将您的AWS_STEP_FUNCTIONS目标对象的State machine definitions文件夹上传到 Amazon S3 存储桶。 AWS SCT 使用您在先决条件 步骤中的 AWS 服务配置文件中存储的 Amazon S3 存储桶。

SaveOnS3 -treePath: 'ETL.AWS_STEP_FUNCTIONS.State machine definitions' /

ConfigureStateMachine 命令配置状态机。此命令最多使用六个参数。请务必使用以下列表中前三个参数中的一个来定义目标范围。

  • filterName:目标对象的过滤器名称。您可以使用 CreateFilter 命令创建过滤器。

  • treePath:目标对象的显式路径。

  • namePath:特定目标对象的显式路径。

  • iamRole— 提供步进机器访问权限的IAM角色的 Amazon 资源名称 (ARN)。此参数为必需参数。

以下代码示例AWS_STEP_FUNCTIONS使用配置中定义的状态机 role_name IAM角色。

ConfigureStateMachine -treePath: 'ETL.AWS_STEP_FUNCTIONS.State machine definitions' -role: 'arn:aws:iam::555555555555:role/role_name' /

ApplyToTarget 命令将转换后的代码应用于目标服务器。要运行此命令,请使用以下参数之一:filterNametreePathnamePath 来定义要应用的目标对象。

以下代码示例将app_wp状态机应用于 AWS Step Functions。

ApplyToTarget -treePath: 'ETL.AWS_STEP_FUNCTIONS.State machines.app_wp' /

要确保转换后的代码产生与源代码相同的结果,您可以使用 AWS SCT 扩展包。这是一组模仿你 AWS Step Functions 不 AWS Lambda 支持的 Apache Oozie 函数的函数。要安装此扩展包,可以使用 CreateLambdaExtPack 命令。

此命令最多使用五个参数。确保将 Oozie2SF 用于 extPackId。在本例中, AWS SCT 为源 Apache Oozie 函数创建一个扩展包。

  • extPackId:一组 Lambda 函数的唯一标识符。此参数为必需参数。

  • tempDirectory— AWS SCT 可以存储临时文件的路径。此参数为必需参数。

  • awsProfile— 您的 AWS 个人资料名称。

  • lambdaExecRoles— 用于 Lambda 函数的执行角色的 Amazon 资源名称 (ARNs) 列表。

  • createInvokeRoleFlag:表示是否为其创建 AWS Step Functions执行角色的布尔标志。

要安装和使用扩展包,请确保您提供所需的权限。有关更多信息,请参阅 使用扩展包中 AWS Lambda 函数的权限

有关Convert、、SaveOnS3ConfigureStateMachineApplyToTargetCreateLambdaExtPack命令的更多信息,请参阅AWS Schema Conversion Tool CLI参考文档

运行你的CLI脚本

编辑完 AWS SCT CLI脚本后,将其另存为.scts扩展名为的文件。现在,您可以从 AWS SCT 安装路径的app文件夹中运行脚本。为此,请使用以下命令。

RunSCTBatch.cmd --pathtoscts "C:\script_path\oozie.scts"

在前面的示例中,替换 script_path 用CLI脚本指向你的文件的路径。有关在中运行CLI脚本的更多信息 AWS SCT,请参阅脚本模式

Apache Oozie 节点 AWS SCT 可以转换为 AWS Step Functions

您可以使用 AWS SCT 将 Apache Oozie 操作节点和控制流节点转换为。 AWS Step Functions

支持的操作节点包括:

  • Hive 操作

  • Hive2 操作

  • Spark 操作

  • MapReduce 直播动作

  • Java 操作

  • DistCp 行动

  • Pig 操作

  • Sqoop 操作

  • FS 操作

  • Shell 操作

支持的控制流节点包括:

  • 开始操作

  • 结束操作

  • 终止操作

  • 决策操作

  • 分流操作

  • 加入操作