このトピックでは、エラーコードODPS-0123144の考えられる原因について説明します。Fuxiジョブが失敗し、解決策を提供します。
エラーメッセージ1: Odps/xxx/xxxでkInstanceMonitorTimeout(errCode:252) 。 詳細エラーmsg: CRASH_EXIT、通常は悪いudfパフォーマンスによって引き起こされます
サンプル
ODPS-0123144: Fuxiジョブが失敗しました-Odps/xxx/xxxでkInstanceMonitorTimeout(errCode:252) 。 詳細エラーmsg: CRASH_EXIT。通常はudfパフォーマンスの不良が原因です。
説明
MaxComputeユーザー定義関数 (UDF) によるデータ処理がタイムアウトします。 デフォルトでは、UDFがデータを処理する時間は制限されています。 ほとんどの場合、1,024レコードは1,800秒以内に完全に処理する必要があります。 この時間制限は、ワーカーが実行される合計期間に課されるのではなく、レコードの小さなバッチが処理される最大期間を指定するために使用されます。 ほとんどの場合、SQLジョブは1秒あたり10,000レコード以上を処理できます。 この制限により、MaxCompute UDFの無限ループ問題が防止され、CPU使用率が向上します。
解決策
PyODPSを使用する場合は、MaxCompute UDFコードにログ情報を追加します。 これにより、ログを表示して、コード内で無限ループが発生しているかどうかを確認できます。 また、ログに記録された時間情報に基づいて、MaxCompute UDFが1つのレコードを処理する期間が期待値を満たしているかどうかを確認できます。 ログに関する次の情報をコードに追加します。 ジョブの実行後、LogView UIのStdOutでログを表示できます。
Java UDFの使用中にエラーが発生した場合は、「パフォーマンスの問題」で説明されているソリューションを実装します。
Python 2
sys.stdout.write('your log') sys.stdout.flush()
Python 3
print('your log', flush=True)
大量のデータを計算する必要がある場合、MaxCompute UDFを長時間実行してデータを処理することがあります。 タイムアウトエラーを防ぐために、次の設定を調整できます。
設定 | 説明 |
set odps.function.timeout=xxx; | MaxCompute UDFのタイムアウト期間。 デフォルト値: 1800 単位は秒です。 ビジネス要件に基づいて、パラメーターをより大きな値に設定できます。 有効な値: 1 ~ 3600 |
set odps.sql.exe cutionengine.batch.rowcount=xxx; | MaxCompute UDFが一度に処理できるデータ行の数。 デフォルト値: 1024。 ビジネス要件に基づいて、パラメーターを小さい値に設定できます。 |