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 ».

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.

Rutas de los directorios
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
Nota: Si no ha añadido el fragmento de código anterior para eliminar los directorios no deseados, el administrador del sistema puede ayudarle a eliminarlos de ** files-api-claim pvc * *.

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 :

  1. 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.

  2. Haga clic en el icono de abrir y cerrar lista de opciones 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.

  3. Busque los trabajos que están atascados en el estado Iniciando o En ejecución .

  4. Para cada trabajo bloqueado, obtenga el run_id y el space_id del URL en el navegador. Por ejemplo:

    https://<CloudPakforData_URL>/jobs/<job_id>/runs/<run_id>?space_id=<space_id>&context=icp4data
    
  5. Ejecute 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:

  1. 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.

  2. 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.

  3. 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
      
  4. Cree y despliegue un trabajo K8s :

    1. 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"
      
    2. Ahora despliegue este trabajo ejecutando el mandato siguiente:

      envsubst < load-spark-db-schema.yml | oc apply -n ${PROJECT_CPD_INST_OPERANDS} -f -
      
    3. 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        22s
      
    4. Suprima 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:

  1. Obtener todos los pods de ibm-nginx :

    oc get pods | grep ibm-nginx
    
  2. Reinicie nginx en los pods de ibm-nginx . Debe ejecutar el mandato para todos los pods de ibm-nginx devueltos por el mandato anterior.

    oc exec <ibm-nginx-pod-name> bash -- nginx -s reload
    
  3. Suprima 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-dataplane se 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.