

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

# 将 Ooozie 工作流程转换为 AWS Step Functions AWS Schema Conversion Tool
<a name="big-data-oozie"></a>

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

**Topics**
+ [转换概述](#big-data-oozie-overview)
+ [步骤 1：连接到源服务和目标服务](#big-data-oozie-connect-to-databases)
+ [步骤 2：设置映射规则](#big-data-oozie-mapping-rules)
+ [步骤 3：配置参数](#big-data-oozie-configure-parameters)
+ [步骤 4：创建评估报告](#big-data-oozie-assessment-report)
+ [第 5 步：将你的 Apache Oozie 工作流程转换为 AWS Step Functions AWS SCT](#big-data-oozie-migrate)
+ [运行 CLI 脚本](#big-data-oozie-run-migration)
+ [AWS SCT 可以转换为 Apache Oozie 节点 AWS Step Functions](#big-data-oozie-supported-nodes)

## 转换概述
<a name="big-data-oozie-overview"></a>

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

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？](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 在《*AWS Step Functions 开发人员指南》*中。

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

AWS SCT 会将您的源作业属性迁移到。 AWS Systems Manager要存储参数名称和值，请 AWS SCT 使用参数存储，其功能为 AWS Systems Manager。有关更多信息，请参阅[什么是 AWS Systems Manager？](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) 在《*AWS Systems Manager 用户指南》*中。

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

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

![\[将 Apache Oozie 转换为. AWS Step Functions\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/aws-sct-oozie-conversion-architecture-diagram.png)


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

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

## 步骤 1：连接到源服务和目标服务
<a name="big-data-oozie-connect-to-databases"></a>

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

在此步骤中，您将使用以下 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](CHAP_Source.Oozie.md)。

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

## 步骤 2：设置映射规则
<a name="big-data-oozie-mapping-rules"></a>

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

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

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

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

有关 `AddServerMapping` 命令的更多信息，请参阅《AWS Schema Conversion Tool CLI 参考》[https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf](https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf)。

## 步骤 3：配置参数
<a name="big-data-oozie-configure-parameters"></a>

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

在此步骤中，您将使用 `AddParameterMapping` 和 `AddTargetParameter` 命令。

要替换源文件中的参数值，请使用 `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'
/
```

有关 `AddServerMapping`、`AddParameterMapping`、`AddTargetParameter` 和 `CreateFilter` 的更多信息，请参阅《AWS Schema Conversion Tool CLI 参考》[https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf](https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf)。

## 步骤 4：创建评估报告
<a name="big-data-oozie-assessment-report"></a>

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

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

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

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

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

该 `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'
/
```

有关`CreateReport`、`SaveReportPDF` 和 `SaveReportCSV` 命令的更多信息，请参阅《AWS Schema Conversion Tool CLI 参考》[https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf](https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf)。

## 第 5 步：将你的 Apache Oozie 工作流程转换为 AWS Step Functions AWS SCT
<a name="big-data-oozie-migrate"></a>

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

在此步骤中，您将使用 `Convert`、`SaveOnS3`、`ConfigureStateMachine` 和 `ApplyToTarget` 命令。

`Migrate` 命令会将源对象迁移到目标集群。此命令使用四个参数。请务必指定 `filter` 或 `treePath` 参数。其他参数都是可选的。
+ `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 使用您在[先决条件](CHAP_Source.Oozie.md#CHAP_Source.Oozie.Prerequisites)步骤中的 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\$1name* IAM 角色配置中定义的状态机。

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

`ApplyToTarget` 命令将转换后的代码应用于目标服务器。要运行此命令，请使用以下参数之一：`filterName`、`treePath` 或 `namePath` 来定义要应用的目标对象。

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

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

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

此命令最多使用五个参数。确保将 **Oozie2SF** 用于 `extPackId`。在本例中， AWS SCT 为源 Apache Oozie 函数创建一个扩展包。
+ `extPackId`：一组 Lambda 函数的唯一标识符。此参数为必需参数。
+ `tempDirectory`— AWS SCT 可以存储临时文件的路径。此参数为必需参数。
+ `awsProfile`— 您的 AWS 个人资料名称。
+ `lambdaExecRoles`— 用于 Lambda 函数的执行角色的 Amazon 资源名称 (ARNs) 列表。
+ `createInvokeRoleFlag`：表示是否为其创建 AWS Step Functions执行角色的布尔标志。

要安装和使用扩展包，请确保您提供所需的权限。有关更多信息，请参阅 [使用扩展包中 AWS Lambda 函数的权限](CHAP_Source.Oozie.md#CHAP_Source.Oozie.TargetPrerequisites)。

有关 `Convert`、`SaveOnS3`、`ConfigureStateMachine`、`ApplyToTarget` 和 `CreateLambdaExtPack` 的更多信息，请参阅《AWS Schema Conversion Tool CLI 参考》[https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf](https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf)。

## 运行 CLI 脚本
<a name="big-data-oozie-run-migration"></a>

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

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

在前面的示例中，*script\$1path*用 CLI 脚本替换为文件路径。有关在中运行 CLI 脚本的更多信息 AWS SCT，请参阅[脚本模式](CHAP_Reference.md#CHAP_Reference.ScriptMode)。

## AWS SCT 可以转换为 Apache Oozie 节点 AWS Step Functions
<a name="big-data-oozie-supported-nodes"></a>

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

支持的操作节点包括：
+ Hive 操作
+ Hive2 操作
+ Spark 操作
+ MapReduce 直播动作
+ Java 操作
+ DistCp 行动
+ Pig 操作
+ Sqoop 操作
+ FS 操作
+ Shell 操作

支持的控制流节点包括：
+ 开始操作
+ 结束操作
+ 终止操作
+ 决策操作
+ 分流操作
+ 加入操作