Personalizza Apache Spark i tempi di esecuzione in IBM Analytics Engine

Dopo l'installazione IBM Analytics Engine powered by Apache Spark, un amministratore di istanza può personalizzare il Apache Spark runtime creando un'immagine container che estende il runtime predefinito. Utilizza questa immagine per aggiungere pacchetti di sistema, Python librerie o file JAR richiesti dai tuoi carichi di lavoro.

Prima di iniziare

Assicurati di avere quanto segue:

  • Accesso a un Cloud Pak for Data cluster con Analytics Engine installato.
  • Privilegi di amministratore per eseguire i comandi ocdocker e.
  • ID immagine di base per la versione Spark che desideri personalizzare:
    • Scintilla 3.4: os-image-id-jkg34-cp4d-wxd
    • Scintilla 3.5: os-image-id-jkg35-cp4d-wxd
  • Un ambiente di Docker lavoro per costruire l'immagine.

Passi

  1. Ottieni i dettagli dell'immagine di base:
    1. Esegui il seguente comando per recuperare l'immagine di base e il tag. Sostituisci <os-image-id> con l'ID appropriato per la tua versione di Spark. cpd-instance deve essere sostituito con lo spazio dei nomi in cui è installato CPD

       oc get cm -n cpd-instance spark-hb-cluster-template \
        -o=jsonpath='{$.data.os-image-json}' \
      | jq -r '.docs[] | select(._id | test("<os-image-id>")) | "\(.docker_repo)/\(.docker_image)@\(.docker_image_tag)"' 
      
    2. Dall'output, copia i seguenti valori:

      
      REGISTRY=<docker_repo>
      IMAGE_NAME=<docker_image>
      
  2. Crea un file denominato Dockerfile con il seguente contenuto:
    ARG REGISTRY
    ARG IMAGE_NAME
    FROM ${REGISTRY}/${IMAGE_NAME}
    USER root:3000
    COPY *.sh /tmp/
    RUN bash /tmp/install-os-packages.sh && \
        bash /tmp/install-conda-packages.sh && \
        bash /tmp/install-jar.sh
    USER ${CLUSTER_USER}
    WORKDIR ${WORK_DIR}
    
  3. Creare gli script di personalizzazione:
    1. installare-os-packages.sh
      #!/bin/bash
      set -e -o pipefail
      
      # Install operating system packages
      microdnf update -y
      microdnf install -y vim
      
    2. installazione -jar.sh
      #!/bin/bash
      set -e -o pipefail
      
      # Install additional JAR files
      wget -c -P /opt/ibm/spark/external-jars/ \
      https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.18.0/jackson-databind-2.18.0.jar
      
  4. Crea l'immagine personalizzata:
    1. Per ottenere il digest dell'immagine di base:

      os_image_json=$(oc get cm spark-hb-cluster-template -o jsonpath='{.data.os-image-json}' -n <namespace>)
      echo "$os_image_json" | grep -A 6 '"docker_image": "spark-hb-cpd-miniconda-runtimes"' | grep 'docker_image_tag' | awk -F': "' '{print $2}' | sed 's/"$//'
      
    2. Utilizza il digest per creare la tua immagine personalizzata:
      docker build -t <YOUR_REGISTRY>/spark-hb-cpd-miniconda-runtimes:custom-runtime \
      --build-arg REGISTRY=<YOUR_REGISTRY> \
      --build-arg IMAGE_NAME=<image_name_COPIED>
      
  5. Configura l'immagine personalizzata:
    • Livello cluster

      Aggiorna la risorsa AnalyticsEngine personalizzata:

      spec:
        customSparkImage: <your_custom_image_digest>
        builtInSparkImages: <existing_images>
      
    • Livello istanza
      Esegui il seguente comando per applicare la patch alla configurazione predefinita:
      curl -k --request PATCH https://<cpd-url>/v4/analytics_engines/<engine_id>/default_configs \
      -H "Authorization: Bearer $TOKEN" \
      --data-raw '{
        "ae.spark.kubernetes.container.image": "<your_custom_image_digest>",
        "ae.spark.kubernetes.driver.container.image": "",
        "ae.spark.kubernetes.executor.container.image": ""
      }'
      
    • Livello di processo o kernel
      Specificare l'immagine nella configurazione del lavoro:
      "conf": {
        "ae.spark.kubernetes.container.image": "<your_custom_image_digest>",
        "ae.spark.kubernetes.driver.container.image": "",
        "ae.spark.kubernetes.executor.container.image": ""
      }
      

Cosa fare successivamente

Completa le seguenti operazioni in ordine prima che gli utenti possano accedere al servizio:

  1. Un amministratore di istanza può impostare la scala del servizio e regolare il numero di pod disponibili. Vedi Servizi di ridimensionamento.
  2. Prima di poter inviare lavori Spark utilizzando l'API dei lavori Spark, è necessario fornire un'istanza di servizio. Vedere Provisioning dell'istanza di servizio.
  3. Il servizio è pronto per l'uso. Vedi Ambienti Spark.