

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Step Functions 使用 將 Oozie 工作流程轉換為 AWS Schema Conversion Tool
<a name="big-data-oozie"></a>

若要轉換 Apache Oozie 工作流程，請確定您使用 1 AWS SCT .0.671 版或更新版本。此外，請熟悉 的命令列界面 (CLI) AWS SCT。如需詳細資訊，請參閱[的 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： AWS Step Functions 使用 將 Apache Oozie 工作流程轉換為 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`、`fork`、 `decision`和 等節點`join`。

AWS SCT 會將您的來源動作節點和控制流程節點轉換為 AWS Step Functions。在 中 AWS Step Functions，您可以在 Amazon States Language (ASL) 中定義工作流程。 AWS SCT 會使用 ASL 來定義狀態機器，這是狀態機器的集合，可執行工作、判斷要轉換到下一個狀態、在發生錯誤時停止，以此類推。接著，使用狀態機器定義 AWS SCT 上傳 JSON 檔案。然後， AWS SCT 可以使用您的 AWS Identity and Access Management (IAM) 角色在其中設定您的狀態機器 AWS Step Functions。如需詳細資訊，請參閱《 *AWS Step Functions 開發人員指南*》中的[什麼是 AWS Step Functions？](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)。

此外， 會使用模擬 AWS Step Functions 不支援的來源 AWS Lambda 函數的函數來 AWS SCT 建立延伸套件。如需詳細資訊，請參閱[搭配 使用延伸套件 AWS Schema Conversion Tool](CHAP_ExtensionPack.md)。

AWS SCT 會將來源任務屬性遷移至 AWS Systems Manager。若要存放參數名稱和值， AWS SCT 會使用 參數存放區，即 的功能 AWS Systems Manager。如需詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[什麼是 AWS Systems Manager？](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)。

您可以使用 AWS SCT 自動更新參數的值和名稱。由於 Apache Oozie 和 之間的架構差異 AWS Step Functions，您可能需要設定參數。 AWS SCT 可以在來源檔案中尋找指定的參數名稱或值，並以新值取代它們。如需詳細資訊，請參閱[步驟 3：設定參數](#big-data-oozie-configure-parameters)。

下圖顯示 Apache Oozie 轉換為 的架構圖 AWS Step Functions。

![\[Apache Oozie 轉換為 的架構圖 AWS Step Functions。\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/images/aws-sct-oozie-conversion-architecture-diagram.png)


若要開始轉換，請建立並執行 CLI AWS SCT 指令碼。此指令碼包含執行轉換的完整命令集。您可以下載和編輯 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`。這些參數的值包含來源和目標物件的明確路徑。若要讓 AWS Step Functions Apache Oozie 轉換，這些參數必須以 開頭`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)。

## 步驟 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`、`AddTargetParameter`、 `AddParameterMapping`和 `CreateFilter`命令的詳細資訊，請參閱 [AWS Schema Conversion Tool CLI 參考](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)。

## 步驟 5： AWS Step Functions 使用 將 Apache Oozie 工作流程轉換為 AWS SCT
<a name="big-data-oozie-migrate"></a>

設定 AWS SCT 專案之後，請轉換原始程式碼並將其套用至 AWS 雲端。

在此步驟中，您會使用 `Convert`、`ConfigureStateMachine`、 `SaveOnS3`和 `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 Resource Name (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 函數，模擬不支援的 AWS Step Functions Apache Oozie 函數。若要安裝此延伸套件，您可以使用 `CreateLambdaExtPack`命令。

此命令最多使用五個參數。請務必將 **Oozie2SF**用於 `extPackId`。在此情況下， 會為來源 Apache Oozie 函數 AWS SCT 建立延伸套件。
+ `extPackId` – 一組 Lambda 函數的唯一識別符。此為必要參數。
+ `tempDirectory` – AWS SCT 可存放暫存檔案的路徑。此為必要參數。
+ `awsProfile` – AWS 設定檔的名稱。
+ `lambdaExecRoles` – 用於 Lambda 函數的執行角色的 Amazon Resource Name (ARNs) 清單。
+ `createInvokeRoleFlag` – 布林值旗標，指出是否要為其建立執行角色 AWS Step Functions。

若要安裝和使用延伸套件，請確定您提供必要的許可。如需詳細資訊，請參閱[在延伸套件中使用 AWS Lambda 函數的許可](CHAP_Source.Oozie.md#CHAP_Source.Oozie.TargetPrerequisites)。

如需 `Convert`、`SaveOnS3`、`ApplyToTarget`、 `ConfigureStateMachine`和 `CreateLambdaExtPack`命令的詳細資訊，請參閱 [AWS Schema Conversion Tool CLI 參考](https://s3.amazonaws.com/publicsctdownload/AWS+SCT+CLI+Reference.pdf)。

## 執行您的 CLI 指令碼
<a name="big-data-oozie-run-migration"></a>

完成編輯 CLI AWS SCT 指令碼後，請將其儲存為副`.scts`檔名為 的檔案。現在，您可以從 AWS SCT 安裝路徑的 `app` 資料夾執行指令碼。為此，請使用下列命令。

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

在上述範例中，使用 CLI *指令碼取代 script\$1path* 為 檔案的路徑。如需在 中執行 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 動作

支援的控制流程節點包括下列項目：
+ 開始動作
+ 結束動作
+ 刪除動作
+ 決策動作
+ 分叉動作
+ 聯結動作