Resolución de problemas de Analytics Engine Powered by Apache Spark
Utiliza estos recursos para resolver los problemas que puedas encontrar con el servicio « Analytics Engine powered by Apache Spark ».
- Eliminación de bibliotecas, directorios de sucesos de Spark y archivos de registro después de la ejecución del cuaderno
- Eliminación de una instancia de « Analytics Engine powered by Apache Spark »
- Pasos para la recuperación si actualizas Analytics Engine powered by Apache Spark y Cloud Pak for Data al mismo tiempo
- El recurso personalizado de Analytics Engine se ha atascado en el estado
InProgress - Uso de un certificado de CA para conectarse a servidores internos desde la plataforma
- Retraso en el inicio de la ejecución de la aplicación Spark
Retraso en el inicio de la ejecución de la aplicación Spark
Si observas que las aplicaciones Spark tardan en iniciarse y estás utilizando agentes de observabilidad como Instana o Dynatrace, es posible que el problema esté relacionado con la carga adicional que imponen estos agentes. Estos agentes recogen varios tipos de datos de monitorización de la aplicación y del entorno del pod, lo que puede ralentizar el proceso del controlador Spark.
Para resolver el problema, asigne un núcleo de CPU adicional al proceso del controlador de Spark.
Eliminación de bibliotecas, directorios de sucesos de Spark y archivos de registro después de la ejecución del cuaderno
Si no desea conservar ninguna de las informaciones siguientes después de haber ejecutado un cuaderno Spark, ejecute el fragmento de código respectivo en la última celda del cuaderno.
| Vía de acceso de directorio | Descripción |
|---|---|
/home/spark/shared/conda |
Bibliotecas Conda o Python que se instalan desde el cuaderno Spark actual |
/home/spark/shared/user-libs |
Contiene los directorios python3.7, python3.8, R y spark2 . Cada carpeta contiene los respectivos paquetes descargados o archivos jar que se incluyen en la vía de acceso de clases |
/home/spark/shared/spark-events |
Directorio de sucesos de Spark |
/home/spark/shared/log |
Registros de maestro, trabajador y controlador de Spark |
Ejemplo: Para no persistir el directorio user-libs, puede utilizar el siguiente fragmento de código.
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
Eliminación de una instancia de « Analytics Engine powered by Apache Spark »
Antes de poder eliminar una instancia de « Analytics Engine powered by Apache Spark », debes eliminar primero el espacio de implementación asociado a ella. Sin embargo, no puede suprimir el espacio si algún trabajo está atascado en el estado Iniciando o En ejecución .
Para habilitar la supresión del espacio de despliegue, debe cambiar todos los trabajos atascados en el estado Iniciando o En ejecución al estado Anómalo :
En el menú de navegación de la interfaz de usuario web de IBM Cloud Pak for Data, haz clic en Servicios > Instancias, busca la instancia Analytics Engine powered by Apache Spark y haz clic en ella para ver los detalles de la instancia.
Haga clic en
a la derecha de la página de detalles de la instancia y seleccione Espacio de despliegue para abrir el espacio de despliegue en la pestaña Trabajos, donde podrá ver los trabajos de Spark.Busque los trabajos que están atascados en el estado Iniciando o En ejecución .
Para cada trabajo bloqueado, obtenga el
run_idy elspace_iddel URL en el navegador. Por ejemplo:https://<CloudPakforData_URL>/jobs/<job_id>/runs/<run_id>?space_id=<space_id>&context=icp4dataEjecute la siguiente API para actualizar el estado de cada trabajo atascado. Consulte Generación de una señal de autorización de 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"}]'Cuando todos los trabajos se encuentren en estado «Fallido», puedes eliminar el espacio de implementación y, a continuación, la instancia de « Analytics Engine powered by Apache Spark ». Consulte «Gestión de instancias de Analytics Engine powered by Apache Spark » para saber cómo eliminar el espacio y, a continuación, la instancia.
Pasos para la recuperación si actualizas Analytics Engine powered by Apache Spark y Cloud Pak for Data al mismo tiempo
Nunca debes actualizar Analytics Engine powered by Apache Spark y Cloud Pak for Data al mismo tiempo, ya que esto podría provocar inconsistencias en la base de datos. Además, es posible que el proceso de actualización de Analytics Engine powered by Apache Spark falle y no se pueda recuperar de este estado.
No se puede utilizar Analytics Engine powered by Apache Spark a menos que la base de datos Analytics Engine powered by Apache Spark se haya restaurado correctamente y todas las tablas de Spark estén disponibles.
Necesita tener derechos de administración de proyecto de Cloud Pak for Data para realizar los siguientes pasos de recuperación.
Para resolver problemas de actualización si actualiza accidentalmente ambos servicios al mismo tiempo:
Defina las variables de entorno que necesita, en concreto PROJECT_CPD_INST_OPERANDS. Para obtener detalles sobre cómo establecer variables de entorno, consulte Configuración de variables de entorno de instalación.
Después de haber definido PROJECT_CPD_INST_OPERANDS, ejecute los mandatos siguientes para establecer DOCKER_IMAGE y 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-`Compruebe que estas variables tienen valores significativos.
Ahora establezca la variable de entorno denominada DB_VERSION en función de Cloud Pak for Data en el que esté trabajando.
Elija el valor que necesita para DB_VERSION:
Cloud Pak for Data 4.0: 6
Cloud Pak for Data 4.5.x: 12
Cloud Pak for Data 4.6.x: 16
Por ejemplo, para Cloud Pak for Data especifique:
export DB_VERSION=16
Cree y despliegue un trabajo K8s :
Cree el siguiente archivo
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"Ahora despliegue este trabajo ejecutando el mandato siguiente:
envsubst < load-spark-db-schema.yml | oc apply -n ${PROJECT_CPD_INST_OPERANDS} -f -Después de desplegar el trabajo, compruebe el estado del trabajo:
oc get job spark-hb-load-db-specs -n ${PROJECT_CPD_INST_OPERANDS}Si el trabajo se ha ejecutado correctamente, debería ver la respuesta siguiente:
NAME COMPLETIONS DURATION AGE spark-hb-load-db-specs 1/1 13s 22sSuprima el trabajo si la recuperación ha sido satisfactoria:
oc delete job spark-hb-load-db-specs -n ${PROJECT_CPD_INST_OPERANDS}La base de datos Analytics Engine powered by Apache Spark ya ha sido reparada y recuperada. Analytics Engine powered by Apache Spark deberían conciliarse correctamente y pasar al estado «Completado».
El recurso personalizado de Analytics Engine se ha atascado en el estado InProgress
Al instalar o actualizar Analytics Engine powered by Apache Spark, es posible que el recurso personalizado « Analytics Engine » (AE CR) se quede bloqueado en InProgress ese estado durante mucho tiempo.
Si esto sucede, puede comprobar posibles errores ejecutando el mandato siguiente. Necesita tener derechos de administración de proyecto de Cloud Pak for Data para solucionar este problema.
oc get ae -n ${PROJECT_CPD_INST_OPERANDS} -o yaml
Si la respuesta contiene Register dataplane task failed, realice los pasos siguientes para recuperarse de esta situación:
Obtener todos los pods de
ibm-nginx:oc get pods | grep ibm-nginxReinicie
nginxen los pods deibm-nginx. Debe ejecutar el mandato para todos los pods deibm-nginxdevueltos por el mandato anterior.oc exec <ibm-nginx-pod-name> bash -- nginx -s reloadSuprima el pod
spark-hb-register-dataplane:oc delete <spark-hb-register-dataplane-pod>Espere a que se reinicie el pod, lo que puede tardar entre 6 y 8 minutos. Cuando el pod
spark-hb-register-dataplanese está ejecutando de nuevo, el CR AE debe pasar al estado completado.
Uso de un certificado de CA para conectarse a servidores internos desde la plataforma
Si desea habilitar la plataforma Cloud Pak for Data para utilizar el certificado de CA de la empresa para validar certificados de los servidores internos, debe crear un secreto que contenga el certificado de CA. Además, si tus servidores internos utilizan un certificado « SSL » firmado con el certificado de la autoridad de certificación (CA) de tu empresa, debes crear este secreto para que la plataforma pueda conectarse a los servidores. Para obtener detalles, consulte Utilización de un certificado de CA para conectarse a servidores internos desde la plataforma.