Analytics Engine Powered by Apache Spark のトラブルシューティング
Analytics Engine powered by Apache Spark サービスで発生する可能性のある問題を解決するには、これらのリソースを使用します。
- ノートブックの実行後にライブラリー、 Spark イベント・ディレクトリー、およびログ・ファイルを削除しています
- Analytics Engine powered by Apache Spark ・インスタンスの削除
- Analytics Engine powered by Apache Spark および Cloud Pak for Data を同時にアップグレードした場合のリカバリー・ステップ
- Analytics Engine カスタム・リソースが
InProgress状態でスタックする - CA 証明書を使用した、プラットフォームから内部サーバーへの接続
- Spark アプリケーション実行の開始の遅延
Spark アプリケーション実行の開始の遅延
Spark アプリケーションの開始に遅延が生じていることに気付いた場合、Instana や Dynatrace などの可観測性エージェントを使用していると、これらのエージェントによる追加の負荷が問題の原因である可能性があります。 これらのエージェントは、アプリケーションおよびポッド環境からさまざまなタイプのモニター・データを収集します。これにより、 Spark ドライバー・プロセスがスローダウンする可能性があります。
この問題を解決するには、 Spark ドライバー・プロセスに 1 つの追加の CPU コアを割り振ります。
ノートブックの実行後にライブラリー、 Spark イベント・ディレクトリー、およびログ・ファイルを削除する
Spark ノートブックの実行後に以下の情報を永続化しない場合は、ノートブックの最後のセルでそれぞれのコード・スニペットを実行します。
| ディレクトリー・パス | 説明 |
|---|---|
/home/spark/shared/conda |
現在の Spark ノートブックからインストールされた Conda または Python ライブラリー |
/home/spark/shared/user-libs |
python3.7 、 python3.8 、 R 、および spark2 の各ディレクトリーが含まれます。 各フォルダーには、クラスパスに含まれるダウンロードされたパッケージまたは jar が含まれています。 |
/home/spark/shared/spark-events |
Spark イベント・ディレクトリー |
/home/spark/shared/log |
Spark マスター、ワーカー、およびドライバーのログ |
例: user-libs ディレクトリーを永続化しないようにするには、以下のコード・スニペットを使用できます。
Scala
import scala.reflect.io.Directory
import java.io.File
val directory = new Directory(new File("/home/spark/shared/user-libs"))
directory.deleteRecursively()
R
if (dir.exists("/home/spark/shared/user-libs")) {
#Delete dir if it exists
unlink("/home/spark/shared", recursive = TRUE)
}
Python
!rm -rf /home/spark/shared/user-libs
Analytics Engine powered by Apache Spark ・インスタンスの削除
Analytics Engine powered by Apache Spark ・インスタンスを削除する前に、まずそのインスタンスに関連付けられている デプロイメント・スペース を削除する必要があります。 ただし、 Starting または Running 状態のジョブがある場合、スペースを削除することはできません。
デプロイメント・スペース の削除を有効にするには、 開始中 または 実行中 状態のすべてのジョブを 失敗 状態に変更する必要があります。
IBM Cloud Pak for Data Web ユーザー・インターフェースのナビゲーション・メニューから、「 サービス」>「インスタンス」をクリックし、 Analytics Engine powered by Apache Spark インスタンスを見つけてクリックしてインスタンスの詳細を表示します。
インスタンスの詳細ページの右側にある
をクリックし、 デプロイメント・スペース を選択して、 Spark ジョブを表示できる「ジョブ」タブの デプロイメント・スペース を開きます。Starting または Running 状態でスタックしているジョブを見つけます。
スタック・ ジョブ ごとに、ブラウザーで URL から
run_idとspace_idを取得します。 例:https://<CloudPakforData_URL>/jobs/<job_id>/runs/<run_id>?space_id=<space_id>&context=icp4data以下の API を実行して、各スタック・ ジョブ の状態を更新します。 API 許可トークンの生成 を参照してください。
space_id = <copy the space_id from URL in the browser> run_id = <copy the run_id from the URL in the browser> curl -ik -X PATCH -H "content-type: application/json" https://<CloudPakforData_URL>/v2/assets/${run_id}/attributes/job_run?space_id=${space_id} -H "Authorization: ZenApiKey ${TOKEN}" -d '[{"op": "replace","path": "/state","value": "Failed"}]'すべてのジョブが 失敗 状態になったら、 デプロイメント・スペース を削除してから、 Analytics Engine powered by Apache Spark インスタンスを削除できます。 スペースを削除してからインスタンスを削除する方法については、 インスタンスの管理 を参照してください。 Analytics Engine powered by Apache Spark
Analytics Engine powered by Apache Spark と Cloud Pak for Data を同時にアップグレードする場合のリカバリー・ステップ
Analytics Engine powered by Apache Spark と Cloud Pak for Data を同時にアップグレードすることは絶対にしないでください。これを行うと、データベースの不整合が発生する可能性があります。 さらに、 Analytics Engine powered by Apache Spark のアップグレード・プロセスが失敗し、この状態からリカバリーできない可能性があります。
Analytics Engine powered by Apache Spark データベースが正常にリストアされ、すべての Spark 表が使用可能になっていない限り、 Analytics Engine powered by Apache Spark を使用できません。
以下のリカバリー・ステップを実行するには、 Cloud Pak for Data ・プロジェクト管理権限が必要です。
誤って両方のサービスを同時にアップグレードした場合にアップグレードの問題を解決するには、以下のようにします。
必要な環境変数 (特に PROJECT_CPD_INST_OPERANDS) を定義します。 環境変数の設定について詳しくは、 インストール環境変数の設定 を参照してください。
PROJECT_CPD_INST_OPERANDS を定義した後、以下のコマンドを実行して DOCKER_IMAGE および CONFIDENTIAL_PROP を設定します。
export DOCKER_IMAGE=`oc get cronjob -n zen spark-hb-job-cleanup-cron -o jsonpath='{..image}' -n ${PROJECT_CPD_INST_OPERANDS}` export CONFIDENTIAL_PROP=`oc get secret spark-hb-confidential-properties -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath="{.data.confidential\.properties}" | base64 -d | grep "dbUrl" | cut -d '=' -f 2-`これらの変数に意味のある値が設定されていることを確認してください。
作業している Cloud Pak for Data に応じて、 DB_VERSION という環境変数を設定します。
DB_VERSION に必要な値を選択します。
Cloud Pak for Data 4.0: 6
4.5.x:Cloud Pak for Data 12
4.6.x:Cloud Pak for Data 16
例えば、 Cloud Pak for Data の場合は、次のように入力します。
export DB_VERSION=16
K8s ジョブ を作成してデプロイします。
以下の
load-spark-db-schema.ymlファイルを作成します。# This is a YAML-formatted file. apiVersion: batch/v1 kind: Job metadata: name: spark-hb-load-db-specs labels: app: analyticsengine app.kubernetes.io/component: analyticsengine app.kubernetes.io/instance: ibm-analyticsengine-prod app.kubernetes.io/managed-by: analyticsengine app.kubernetes.io/name: analyticsengine component: analyticsengine function: spark-hb-load-db-specs icpdsupport/addOnId: spark icpdsupport/app: api release: ibm-analyticsengine-prod spec: template: metadata: annotations: cloudpakId: "eb9998dcc5d24e3eb5b6fb488f750fe2" cloudpakInstanceId: "" cloudpakName: IBM Cloud Pak for Data hook.activate.cpd.ibm.com/command: '[]' hook.deactivate.cpd.ibm.com/command: '[]' productChargedContainers: All productCloudpakRatio: "1:1" productID: eb9998dcc5d24e3eb5b6fb488f750fe2 productMetric: VIRTUAL_PROCESSOR_CORE productName: Analytics Engine powered by Apache Spark productVersion: 4.6.1 labels: app: analyticsengine app.kubernetes.io/component: analyticsengine app.kubernetes.io/instance: ibm-analyticsengine-prod app.kubernetes.io/managed-by: analyticsengine app.kubernetes.io/name: analyticsengine component: analyticsengine function: spark-hb-load-db-specs icpdsupport/addOnId: spark icpdsupport/app: api job-name: spark-hb-load-db-specs release: ibm-analyticsengine-prod spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - amd64 restartPolicy: "OnFailure" serviceAccount: zen-viewer-sa serviceAccountName: zen-viewer-sa automountServiceAccountToken: false hostNetwork: false hostPID: false hostIPC: false containers: - name: "spark-hb-load-db-specs" securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL runAsNonRoot: true privileged: false readOnlyRootFilesystem: false image: $DOCKER_IMAGE imagePullPolicy: Always resources: requests: cpu: 100m memory: 128Mi ephemeral-storage: 100Mi limits: cpu: 100m memory: 128Mi ephemeral-storage: 100Mi env: - name: DB_URL value: "$CONFIDENTIAL_PROP" command: ["/bin/bash", "-c"] args: - "bash /opt/ibm/entrypoint/load-db-specs.sh /opt/ibm/entrypoint/ cp.icr.io/cp/cpd/spark-hb-python $DB_VERSION /opt/hb/confidential_config/zenmetastore_certs /tmp/zenmetastore_certs_temp" volumeMounts: - name: "spark-hb-load-db-specs-script" mountPath: "/opt/ibm/entrypoint/" - name: "metastore-secret" mountPath: "/tmp/zenmetastore_certs_temp" volumes: - name: "spark-hb-load-db-specs-script" configMap: name: "spark-hb-load-db-specs-script" - name: "spark-hb-zen-metstore-certs" secret: secretName: "zen-service-broker-secret" - name: "metastore-secret" secret: secretName: "metastore-secret"次に、以下のコマンドを実行して、この ジョブ をデプロイします。
envsubst < load-spark-db-schema.yml | oc apply -n ${PROJECT_CPD_INST_OPERANDS} -f -ジョブ をデプロイした後、 ジョブ の状況を確認します。
oc get job spark-hb-load-db-specs -n ${PROJECT_CPD_INST_OPERANDS}ジョブ が正常に実行された場合は、以下の応答が表示されます。
NAME COMPLETIONS DURATION AGE spark-hb-load-db-specs 1/1 13s 22sリカバリーが正常に行われた場合は、 ジョブ を削除します。
oc delete job spark-hb-load-db-specs -n ${PROJECT_CPD_INST_OPERANDS}これで、 Analytics Engine powered by Apache Spark データベースの修復とリカバリーが完了しました。 Analytics Engine powered by Apache Spark は正常に調整され、「完了」状態になります。
Analytics Engine カスタム・リソースが InProgress 状態のままになっている
Analytics Engine powered by Apache Spark のインストールまたはアップグレード中に、 Analytics Engine カスタム・リソース (AE CR) が長時間 InProgress 状態のままになることがあります。
このような場合、以下のコマンドを実行して、考えられるエラーを確認できます。 この問題を修正するには、 Cloud Pak for Data プロジェクト管理権限が必要です。
oc get ae -n ${PROJECT_CPD_INST_OPERANDS} -o yaml
応答に Register dataplane task failed が含まれている場合は、以下の手順を実行してこの状態からリカバリーします。
すべての
ibm-nginxポッドを取得します。oc get pods | grep ibm-nginxibm-nginxポッドでnginxを再始動します。 前のコマンドによって返されたすべてのibm-nginxポッドに対して、このコマンドを実行する必要があります。oc exec <ibm-nginx-pod-name> bash -- nginx -s reloadspark-hb-register-dataplaneポッドを削除します。oc delete <spark-hb-register-dataplane-pod>ポッドが再始動するまで待ちます。これには約 6 分から 8 分かかる場合があります。
spark-hb-register-dataplaneポッドが再び実行されている場合、 AE CR は完了状態に移行する必要があります。
CA 証明書を使用した、プラットフォームから内部サーバーへの接続
Cloud Pak for Data プラットフォームで、社内サーバーからの証明書を検証するために、会社の CA 証明書を使用できるようにする場合は、 CA 証明書を含む シークレット を作成する必要があります。 さらに、社内サーバーが、会社の CA 証明書を使用して署名された SSL 証明書を使用している場合は、このシークレットを作成して、プラットフォームがサーバーに接続できるようにする必要があります。 詳しくは、 プラットフォームから内部サーバーに接続するための CA 証明書の使用 を参照してください。