このページでは、Cloud Data Fusion に関する問題を解決する方法について説明します。
パイプラインの停止
Cloud Data Fusion バージョン 6.2 以前では、パイプラインが Starting
状態または Running
状態で停止するという既知の問題があります。パイプラインを停止すると、Malformed reply from SOCKS server
のエラーが発生します。このエラーは、Dataproc マスターノードに十分なメモリリソースがないことが原因です。
推奨事項
パイプラインが次回の実行時に停止しないようにするには、Dataproc クラスタを削除します。次に、Compute Engine プロファイルのマスターメモリを更新します。
- 必須: Dataproc クラスタのサイズを 2 つ以上の CPU に、マスターノードを 8 GB 以上に増やします。
- (省略可)Cloud Data Fusion 6.2 に移行します。バージョン 6.2 以降では、パイプラインの実行は Dataproc ジョブ API を介して送信され、マスターノードでのメモリ使用量が多いことはありません。ただし、本番環境のジョブには 2 つの CPU と 8 GB のマスターノードを使用することをおすすめします。
クラスタサイズの変更
REST API
クラスタサイズを変更するには、コンピューティング プロファイルをエクスポートし、REST API を使用してメモリ設定を更新します。
- Compute プロファイルをエクスポートします。ローカルで JSON ファイルに保存されます。
JSON ファイルのメモリ設定を次のように編集します。
masterCPUs
を2
以上に更新し、masterMemoryMB
を8192
MB(約 8 GB)以上にします。{ "name": "masterCPUs", "value": "2", "isEditable": true }, { "name": "masterMemoryMB", "value": "8192", "isEditable": true },
REST API を使用して、コンピューティング プロファイルを更新します。cURL または UI で HTTP エグゼキュータを使用できます。
cURL の場合は、次のコマンドを使用します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" https://<data-fusion-instance-url>/api/v3/profiles/<profile-name> -X PUT -d @<path-to-json-file>
パイプラインの復元
停止したパイプラインを復元するには、インスタンスを再起動します。インスタンスを再起動するには、REST API または Google Cloud CLI を使用します。
REST API
インスタンスを再起動するには、restart()
メソッドを使用します。
gcloud
インスタンスを再起動するには、次のコマンドを実行します。
同時実行パイプラインが停止する
多くの同時実行パイプラインを実行すると、次の問題が発生することがあります。パイプライン ジョブは、Starting
、Provisioning
、Running
のいずれかの状態で停止します。Cloud Data Fusion UI が遅くなるか、応答しなくなります。この場合、UI または API 呼び出しでパイプラインを停止できないことがあります。
推奨事項
インスタンスを再起動します。
REST API
インスタンスを再起動するには、
restart()
メソッドを使用します。gcloud
インスタンスを再起動するには、次のコマンドを実行します。
パイプラインの実行をずらします。パイプラインをずらして実行することができない場合や、問題が解決しない場合は、サポートの利用をご覧ください。
接合子プラグインに結合条件が表示されない
基本的な結合条件と高度な結合条件を切り替えることができる接合子プラグインを使用すると、Cloud Data Fusion バージョン 6.4.0 では次の問題が発生します。以前のバージョンからパイプラインをアップグレードまたはインポートした後に接合子のプロパティ ページを表示すると、構成したパイプラインの基本的な結合条件が表示されない。この問題はパイプラインの実行には影響しませんが、条件は残ったままとなります。
推奨事項
この問題を解決するには:
- [システム管理者] > [設定] > [HTTP 呼び出しを行う] の順番にクリックします。
HTTP 呼び出しのエグゼキュータのフィールドに、次のように入力します。
PUT namespaces/system/artifacts/core-plugins/versions/CORE_PLUGIN_VERSION/properties/widgets.Joiner-batchjoiner?scope=SYSTEM
CORE_PLUGIN_VERSION
には、最新のコア プラグイン バージョンを使用します。次の JSON コンテンツを [本文] フィールドに貼り付けます。
0967c-fdb73 2ee80-67055 b41f9-1dcd9 425a5-cf822 7e1a0-485e6 eda47-040ea 27430-fabba 803ec-2c6e7 8f7e0-2738d e22b5-4c375 b3abb-778e4 2deda-2d6be 47855-b451d 3e356-1268e f0ff9-876b6 623df-8703a
[送信] をクリックします。
Pipeline のページが別のウィンドウで開いている場合は、ページを更新して結合条件を表示する必要があります。
SQL Server のレプリケーションに、変更されたテーブルのすべての列が複製されない
SQL Server のテーブルからデータを複製するレプリケーション ジョブでは、次の問題が発生します。レプリケーション ソースのテーブルに新しい列が追加された場合、その列が CDC テーブルに自動的に追加されない。基になる CDC テーブルに手動で列を追加する必要があります。
推奨事項
この問題を解決するには:
CDC インスタンスを無効にします。
EXEC sp_cdc_disable_table @source_schema = N'dbo', @source_name = N'myTable', @capture_instance = 'dbo_myTable' GO
CDC インスタンスをもう一度有効にします。
EXEC sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'myTable', @role_name = NULL, @capture_instance = 'dbo_myTable' GO
詳細については、ソーステーブルへの変更の処理をご覧ください。
レプリケーションと SQL Server Always On データベース
Microsoft SQL Server ソースは、Always On 読み取り専用レプリカから変更をキャプチャできます。この設定では、ランタイム引数 source.connector.database.applicationIntent=ReadOnly
をレプリケーション ジョブに渡す必要があります。このランタイム引数がないと、ジョブは次のエラーで失敗します。
Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is
read-only.
推奨事項
このエラーを解決するには、ランタイム引数として source.connector.database.applicationIntent=ReadOnly
を設定します。これにより、snapshot.isolation.mode
が内部で snapshot
に設定されます。
BigQuery プラグインを使用したパイプラインが Access Denied
エラーで失敗する
BigQuery ジョブの実行時に、Access Denied
エラーでパイプラインが失敗するという既知の問題があります。これは、次のプラグインを使用するパイプラインに影響します。
- BigQuery ソース
- BigQuery シンク
- BigQuery マルチテーブル シンク
- 変換プッシュダウン
ログのエラーの例(使用しているプラグインによって異なる場合があります)。
POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}
この例では、PROJECT_ID はプラグインで指定したプロジェクト ID です。プラグインで指定されたプロジェクトのサービス アカウントには、次のうち少なくとも 1 つを実行する権限がありません。
- BigQuery ジョブを実行する
- BigQuery データセットを読み取る
- 一時バケットを作成する
- BigQuery データセットを作成する
- BigQuery テーブルを作成する
推奨事項
この問題を解決するには、不足しているロールをプラグインで指定したプロジェクト(PROJECT_ID)に付与します。
BigQuery ジョブを実行するには、BigQuery ジョブユーザー(
roles/bigquery.jobUser
)のロールを付与します。BigQuery データセットを読み取るには、BigQuery データ閲覧者(
roles/bigquery.dataViewer
)のロールを付与します。一時バケットを作成するには、ストレージ管理者(
roles/storage.admin
)のロールを付与します。BigQuery データセットまたはテーブルを作成するには、BigQuery データ編集者(
roles/bigquery.dataEditor
)のロールを付与します。
詳細については、プラグインのトラブルシューティング ドキュメント(Google BigQuery マルチ テーブル シンクのトラブルシューティング)をご覧ください。
BigQuery シンクのバージョン 0.17.0 でパイプラインが失敗するか、誤った結果を出力する
BigQuery シンク プラグインのバージョン 0.17.0 を含むデータ パイプラインが失敗する、または誤った結果をもたらす既知の問題があります。この問題は、バージョン 0.17.1 で解決されています。
推奨事項
この問題を解決するには、Google Cloud プラグインのバージョンを更新します。
- Google Cloud バージョン 0.17.1 以降を入手します。
- Cloud Data Fusion ウェブ UI で [HUB] をクリックします。
- Google Cloud バージョン 0.17.1 以降を選択して [デプロイ] をクリックします。
- パイプラインで使用しているすべての Google Cloud プラグインを、次のいずれかのオプションにあるバージョンにそろえます。
- すべてのプラグイン バージョンを一度に更新するには、既存のパイプラインをエクスポートして、再度インポートします。インポートする際に、すべてのプラグインを最新バージョンに置き換えるオプションを選択します。
- プラグインを手動で更新するには:
- Pipeline Studio ページを開きます。
- [シンク] メニューで、ポインタを BigQuery の上に置き、[変更] をクリックします。
- バージョン 0.17.1 以降を選択します。
- 使用中の他の Google Cloud プラグイン(BigQuery ソース プラグインなど)についても、この手順を繰り返します。
SQL Server ソース プラグインは、日時データ型をサポートしています
以前のバージョンの SQL Server ソース(バージョン 1.5.3 以前):
- SQL Server の
datetime
とdatetime2
データ型は、CDAPtimestamp
データ型にマッピングされます。 datetimeoffset
データ型は CDAPstring
データ型にマッピングされます。
プラグイン バージョン 1.5.4 には下位互換性がありませんが、パイプラインの下流ステージがソースの出力スキーマに依存している場合、バージョン 1.5.4 へのアップグレード後にバージョン 1.5.4 で動作するパイプラインは動作しない可能性があります(出力スキーマが変わったため)。バージョン 1.5.4 では、datetime
、datetime2
、datetimeoffset
に null 値がある場合、NullPointerException
をスローします。
バージョン 1.5.5 以降は datetime
と互換性があります。ほとんどの場合、1.5.3 で動作するパイプラインは 1.5.5 へのアップグレード後も動作します。ソース プラグインの既存の出力スキーマ設定が使用されます。たとえば、出力スキーマがすでに datetime
と datetime2
のデータ型を timestamp
データ型に、datetimeoffset
データ型を string
データ型にマッピングするよう設定されている場合、これらは引き続き有効です。
特別なケースは、データベース名、スキーマ名、テーブル名にマクロを使用する場合や、出力スキーマを手動で指定していない場合です。そのため、スキーマは実行時に検出され、マッピングされます。古いバージョン(1.5.3)では、実行時に datetime
と datetime2
データ型は timestamp
データ型に、datetimeoffset
データ型は string
データ型にマッピングされます。1.5.5 以降では、これらは実行時に datetime
にマッピングされます。
推奨事項
この問題を解決するには、パイプラインをアップグレードしてプラグイン バージョン 1.5.5 以降を使用します。
アップグレード後、SQL Server の datetime
、datetime2
、datetimeoffset
データ型が実行時に CDAP 日時データ型にマッピングされます。元のタイムスタンプ(datetime
と datetime2
がマッピングされているもの)または文字列(datetimeoffset
がマッピングされているもの)を使用するダウンストリームのステージまたはシンクがある場合、更新するか、datetime
データの使用を想定してください。詳細については、CDAP SQL Server バッチソースをご覧ください。
パイプラインがエラーしきい値で停止しない
エラーしきい値を 1
に設定しても、パイプラインが複数のエラーの後に停止しないことがあります。
エラーしきい値は、処理されずに障害が発生した場合にディレクティブで発生した例外に対するものです。ディレクティブがすでに emitError API を使用している場合、エラーしきい値はアクティブになりません。
推奨
特定のしきい値に達したときに失敗するパイプラインを設計するには、FAIL
ディレクティブを使用します。
FAIL
ディレクティブに渡された条件が満たされると、エラーしきい値にカウントされます。また、しきい値に達するとパイプラインが失敗します。