AWS Schema Conversion Tool で Oozie ワークフローを AWS Step Functions に変換する - AWS Schema Conversion Tool

AWS Schema Conversion Tool で Oozie ワークフローを AWS Step Functions に変換する

Apache Oozie ワークフローを変換するには、必ず AWS SCT バージョン 1.0.671 以降を使用してください。また、AWS SCT のコマンドラインインターフェイス (CLI) についても理解しておいてください。詳細については、「AWS Schema Conversion Tool 用の CLI リファレンス」を参照してください。

変換の概要

Apache Oozie ソースコードには、アクションノード、制御フローノード、ジョブプロパティが含まれます。アクションノードは Apache Oozie ワークフローで実行するジョブを定義します。Apache Oozie を使用して Apache Hadoop クラスターをオーケストレーションする場合、アクションノードには Hadoop ジョブが含まれます。制御フローノードは、ワークフローパスを制御するメカニズムを提供します。制御フローノードにはstartenddecisionforkjoin などのノードが含まれます。

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 とは」を参照してください。

また、AWS SCT は AWS Step Functions がサポートしていないソース関数をエミュレートする AWS Lambda 関数を含む拡張パックを作成します。詳細については、「AWS Schema Conversion Tool 拡張パックの使用」を参照してください。

AWS SCT は、ソースジョブのプロパティを AWS Systems Manager に移行します。パラメータの名前と値を保存するには、AWS SCT は AWS Systems Manager の一機能である Parameter Store を使用します。詳細については、『AWS Systems Manager ユーザーガイド』の「AWS Systems Manager とは何か」を参照してください。

AWS SCT を使用して、パラメータの値と名前を自動的に更新できます。Apache Oozie と AWS Step Functions のアーキテクチャの違いにより、パラメータの設定が必要な場合があります。 AWS SCT は、指定したパラメータ名または値をソースファイル内で検索し、新しい値に置き換えることができます。詳細については、「ステップ 3: パラメータを設定する」を参照してください。

次の図は、Apache Oozie を AWS Step Functions に変換するアーキテクチャ図を示しています。

Apache Oozie を AWS Step Functions に変換する際のアーキテクチャ図です。

変換を開始するには、AWS SCT CLI スクリプトを作成して実行します。このスクリプトには、変換を実行するためのコマンド一式が含まれています。Apache Oozie 変換スクリプトのテンプレートをダウンロードして編集できます。詳細については、「CLI シナリオの取得」を参照してください。

スクリプトに次の手順が含まれていることを確認します。

ステップ 1: ソースサービスとターゲットサービスConnect する

Apache Oozie クラスタの変換を開始するには、新しい AWS SCT プロジェクトを作成します。次に、ソースサービスとターゲットサービスに接続します。移行を開始する前に、必ずターゲット AWS リソースを作成してプロビジョニングしてください。詳細については、「Apache Oozie をソースとして使用する場合の前提条件」を参照してください。

このステップでは、次の AWS SCT CLI コマンドを使用します。

  • CreateProject – 新しい AWS SCT プロジェクトを作成します。

  • AddSource — ソースの Apache Oozie ファイルを AWS SCT プロジェクトに追加します。

  • ConnectSource — ソースとして Apache Oozie に接続するためのものです。

  • AddTarget — プロジェクトの移行ターゲットとして AWS Step Functions を追加します。

  • ConnectTarget – AWS Step Functions に接続します。

これらの AWS SCT CLI コマンドの使用例については、「Apache Oozie への接続」を参照してください。

ConnectSource または ConnectTarget コマンドを実行すると、AWS SCT はサービスへの接続を確立しようとします。接続に失敗すると、AWS SCT で CLI スクリプトからのコマンドの実行が中止され、エラーメッセージが表示されます。

ステップ 2: マッピングルールを設定する

ソースサービスとターゲットサービスに接続したら、マッピングルールを設定します。マッピングルールは、ソース Apache Oozie ワークフローとパラメータの移行ターゲットを定義します。テーブルマッピングの詳細については、「AWS Schema Conversion Tool でのデータ型のマッピング」を参照してください。

変換するソースオブジェクトとターゲットオブジェクトを定義するには、AddServerMapping コマンドを使用します。このコマンドでは、sourceTreePathtargetTreePath 2 つのパラメータを使用します。これらのパラメータの値には、ソースオブジェクトとターゲットオブジェクトへの明示的なパスが含まれます。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 リファレンス」を参照してください。

ステップ 3: パラメータを設定する

ソース Apache Oozie ワークフローでパラメータを使用している場合は、AWS Step Functions への変換後にパラメータの値を変更しなければならない場合があります。また、AWS Step Functions で使用する新しいパラメータを追加する必要がある場合があります。

このステップでは、AddParameterMapping および AddTargetParameter コマンドを使用します。

ソースファイル内のパラメータ値を置き換えるには、AddParameterMapping コマンドを使用します。 AWS SCT はソースファイルをスキャンし、名前または値でパラメータを検索し、値を変更します。1 つのコマンドを実行してすべてのソースファイルをスキャンできます。スキャンするファイルの範囲は、以下のリストの最初の 3 つのパラメータのいずれかを使用して定義します。このコマンドは最大で 6 つのパラメータを使用します。

  • 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 コマンドと同じパラメータセットを使用します。

次のコード例では、nameNode パラメーターの代わりに clusterId ターゲットパラメーターを追加しています。

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 コマンドを使用します。このコマンドは、2 つのパラメータを使用します。1 つ目のパラメータは、AWS SCT が評価レポートを作成するソースオブジェクトを指定します。そのためには、filterNametreePath、または namePath のいずれかのパラメーターを使用します。このパラメータは必須です。オプションの Boolean パラメータ forceLoad を追加することもできます。このパラメータを true に設定すると、AWS SCT は、CreateReport コマンドで指定したソースオブジェクトのすべての子オブジェクトを自動的にロードします。

次のコード例では、ソース Oozie ファイルの Applications ノードの評価レポートを作成します。

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

その後、評価レポートのコピーを PDF またはカンマ区切り (CSV) ファイルとして保存できます。これを行うには、SaveReportPDF コマンドまたは SaveReportCSV コマンドを使用します。

SaveReportPDF コマンドは、評価レポートのコピーを PDF ファイルとして保存します。このコマンドは、4 つのパラメータを使用します。file パラメータは必須です。他のパラメータはオプションです。

  • file — PDF ファイルへのパスとその名前。

  • filter — 移行するソースオブジェクトの範囲を定義するために以前に作成したフィルタの名前。

  • treePath — 評価レポートのコピーを保存するソースデータベースオブジェクトへの明示的なパス。

  • namePath — 評価レポートのコピーを保存する対象オブジェクトの名前のみを含むパス。

SaveReportCSV コマンドは、評価レポートを CSV ファイルに保存します。このコマンドは、4 つのパラメータを使用します。directory パラメータは必須です。他のパラメータはオプションです。

  • directory — AWS SCT が CSV ファイルを保存するフォルダへのパス。

  • filter — 移行するソースオブジェクトの範囲を定義するために以前に作成したフィルタの名前。

  • treePath — 評価レポートのコピーを保存するソースデータベースオブジェクトへの明示的なパス。

  • namePath — 評価レポートのコピーを保存する対象オブジェクトの名前のみを含むパス。

次のコード例では、評価レポートのコピーを c:\sct\ar.pdf ファイルに保存しています。

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

次のコード例では、評価レポートのコピーを CSV ファイルとして c:\sct フォルダに保存します。

SaveReportCSV -file:'c:\sct' /

CreateReportSaveReportPDFSaveReportCSV コマンドの使用の詳細については、『AWS Schema Conversion Tool CLI コマンドリファレンス』を参照してください。

ステップ 5: AWS SCT を使用して Apache Oozie ワークフローを AWS Step Functions に変換する

AWS SCT プロジェクトを設定したら、ソースコードを変換して AWS クラウド に適用します。

このステップでは、 ConvertSaveOnS3ConfigureStateMachineApplyToTarget コマンドを使用します。

Migrate コマンドは、ソースオブジェクトをターゲットクラスターに移行します。このコマンドは、4 つのパラメータを使用します。必ず filter または treePathパラメータを指定してください。その他のパラメータは省略可能です。

  • filter — 移行するソースオブジェクトの範囲を定義するために以前に作成したフィルタの名前。

  • namePath — 特定のソースオブジェクトへの明示的なパス。

  • treePath — 評価レポートのコピーを保存するソースデータベースオブジェクトへの明示的なパス。

  • forceLoadtrue に設定すると、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 コマンドはステートマシンを設定します。このコマンドは最大で 6 つのパラメータを使用します。ターゲットスコープは、必ず以下のリストの最初の 3 つのパラメータのいずれかを使用して定義してください。

  • filterName — ターゲットオブジェクトのフィルターの名前。CreateFilter コマンドを使用してフィルターを作成できます。

  • treePath — ターゲットオブジェクトへの明示的なパス。

  • namePath — 特定のターゲットオブジェクトへの明示的なパス。

  • iamRole — ステップマシンへのアクセスを提供する IAM ロールの Amazon リソースネーム (ARN)。このパラメータは必須です。

次のコード例では、role_name IAM ロールを使用して AWS_STEP_FUNCTIONS で定義されるステートマシンを設定します。

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

ApplyToTarget コマンドは、変換されたコードをターゲットサーバーに適用します。このコマンドを実行するには、filterNametreePath、または namePath のいずれかのパラメータを使用して、適用するターゲットオブジェクトを定義します。

次のコード例では、app_wp ステートマシンを AWS Step Functions に適用しています。

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

変換したコードがソースコードと同じ結果になるようにするには、AWS SCT 拡張パックを使用できます。これは AWS Step Functions でサポートされていない Apache Oozie 関数をエミュレートする一連の AWS Lambda 関数です。CreateLambdaExtPack コマンドを使用して、この拡張パックをインストールできます。

このコマンドは最大 5 つのパラメータを使用します。必ず extPackId 用の Oozie2SF を使用してください。この場合、AWS SCT は Apache Oozie のソース関数用の拡張パックを作成します。

  • extPackId — 一連の Lambda 関数の一意の識別子。このパラメータは必須です。

  • tempDirectory — AWS SCT 一時ファイルを保存できるパス。このパラメータは必須です。

  • awsProfile — AWS プロフィールの名前。

  • lambdaExecRoles — Lambda 関数に使用する実行ロールの Amazon リソースネーム (ARN) のリスト。

  • createInvokeRoleFlag — AWS Step Functions の実行ロールを作成するかどうかを示すブール型フラグ。

拡張パックをインストールして使用するには、必要な許可を与えていることを確認します。詳細については、「拡張パック内の AWS Lambda 関数を使用するための権限」を参照してください。

ConvertSaveOnS3ConfigureStateMachineApplyToTargetCreateLambdaExtPack コマンドの使用の詳細については、『AWS Schema Conversion Tool CLI コマンドリファレンス』を参照してください。

CLI スクリプトの実行

AWS SCT CLI スクリプトの編集が終了したら、.scts 拡張子の付いたファイルとして保存します。これで、AWS SCT インストールパスの app フォルダからスクリプトを実行できます。そのためには、次のコマンドを使用します。

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

前の例では、script_path を CLI スクリプトを含むファイルへのパスに置き換えます。AWS SCT での CLI スクリプトの実行の詳細については、「スクリプトモード」を参照してください。

AWS SCT が AWS Step Functions に変換できる Apache Oozie ノード

AWS SCT を使用して Apache Oozie アクションノードと制御フローノードを AWS Step Functions に変換できます。

サポートされているアクションノードは次のとおりです。

  • Hive アクション

  • Hive2 アクション

  • Spark アクション

  • MapReduce ストリーミングアクション

  • Java アクション

  • DistCp アクション

  • Pig アクション

  • Sqoop アクション

  • FS アクション

  • Shell アクション

サポートされている制御フローノードは次のとおりです。

  • Start アクション

  • End アクション

  • Kill アクション

  • Decision アクション

  • Fork アクション

  • Join アクション