Benutzerdefiniertes Dataproc-Image erstellen

Sie können einen Dataproc-Cluster mit einem benutzerdefinierten Image erstellen, das Ihre vorinstallierten Pakete enthält. Auf dieser Seite wird beschrieben, wie Sie ein benutzerdefiniertes Image erstellen und in einem Dataproc-Cluster installieren.

Überlegungen und Einschränkungen zur Nutzung

  • Lebensdauer benutzerdefinierter Images:Damit die Cluster die neuesten Dienstaktualisierungen und Fehlerkorrekturen erhalten, muss die Erstellung von Clustern mit einem benutzerdefinierten Image innerhalb von 365 Tagen ab dem Erstellungsdatum des benutzerdefinierten Images erfolgen. Vorhandene Cluster, die mit einem benutzerdefinierten Image erstellt wurden, können unbegrenzt ausgeführt werden.

    Wenn Sie Cluster mit einem bestimmten benutzerdefinierten Image für einen Zeitraum von mehr als 365 Tagen erstellen möchten, müssen Sie möglicherweise eine Automatisierung verwenden. Weitere Informationen finden Sie unter Cluster mit abgelaufenem benutzerdefiniertem Image erstellen.

  • Nur für Linux:Die Anleitung in diesem Dokument gilt nur für Linux-Betriebssysteme. Andere Betriebssysteme werden möglicherweise in zukünftigen Dataproc-Releases unterstützt.

  • Unterstützte Basis-Images:Benutzerdefinierte Image-Builds müssen auf einem Dataproc-Basis-Image basieren. Die folgenden Basis-Images werden unterstützt: Debian, Rocky Linux und Ubuntu.

    • Verfügbarkeit von Basis-Images:Neue Images, die in den Dataproc-Versionshinweisen angekündigt werden, können erst eine Woche nach ihrer Ankündigung als Basis für benutzerdefinierte Images verwendet werden.
  • Optionale Komponenten verwenden:

    • 2.2 und frühere Basis-Images: Standardmäßig werden alle optionalen Dataproc-Komponenten (Betriebssystempakete und ‑konfigurationen) im benutzerdefinierten Image installiert. Sie können die Versionen und Konfigurationen des Betriebssystempakets anpassen.

    • 2.3 und spätere Basis-Images: Nur die ausgewählten optionalen Komponenten werden im benutzerdefinierten Image installiert (siehe generate_custom_image.py-Flag „--optional-components“).

    Unabhängig vom Basis-Image, das für Ihr benutzerdefiniertes Image verwendet wird, müssen Sie beim Erstellen Ihres Clusters optionale Komponenten auflisten oder auswählen.

    Beispiel: Google Cloud CLI-Befehl zum Erstellen eines Clusters:

    gcloud dataproc clusters create CLUSTER_NAME
        --image=CUSTOM_IMAGE_URI  \
        --optional-components=COMPONENT_NAME \
        ... other flags
    

    Wenn der Komponentenname beim Erstellen des Clusters nicht angegeben wird, wird die optionale Komponente gelöscht (einschließlich benutzerdefinierter Betriebssystempakete und -konfigurationen).

  • Gehostete benutzerdefinierte Images verwenden:Wenn Sie ein benutzerdefiniertes Image verwenden, das in einem anderen Projekt gehostet wird, muss das Dienstkonto des Dataproc-Dienst-Agents in Ihrem Projekt die Berechtigung compute.images.get für das Image im Hostprojekt haben. Sie können diese Berechtigung erteilen, indem Sie dem Dataproc-Dienst-Agent-Dienstkonto Ihres Projekts die Rolle roles/compute.imageUser für das gehostete Image zuweisen (siehe Benutzerdefinierte Images innerhalb einer Organisation freigeben).

  • MOK-Secrets (Machine Owner Key) für Secure Boot verwenden:So aktivieren Sie Secure Boot mit Ihrem benutzerdefinierten Dataproc-Image:

    1. Aktivieren Sie die Secret Manager API (secretmanager.googleapis.com). Dataproc generiert und verwaltet ein Schlüsselpaar mit dem Secret Manager-Dienst.

    2. Fügen Sie dem generate_custom_image.py-Befehl das Flag --service-account="SERVICE_ACCOUNT" hinzu, wenn Sie ein benutzerdefiniertes Image erstellen. Hinweis: Sie müssen dem Dienstkonto die Rolle „Secret Manager Viewer“ (roles/secretmanager.viewer) für das Projekt und die Rolle „Secret Manager Accessor“ (roles/secretmanager.secretAccessor) für die öffentlichen und privaten Secrets zuweisen.

      Weitere Informationen mit Beispielen finden Sie in der Datei README.md und anderen Dateien im Verzeichnis „examples/secure-boot“ des GoogleCloudDataproc/custom-images-Repositorys auf GitHub.

      Secure Boot deaktivieren:Standardmäßig generieren und verwalten die Dataproc-Scripts für benutzerdefinierte Images ein Schlüsselpaar mit Secret Manager, wenn sie in einem Dataproc-Cluster ausgeführt werden. Wenn Sie kein Secure Boot mit Ihrem benutzerdefinierten Image verwenden möchten, fügen Sie dem generate_custom_image.py-Befehl das Flag --trusted-cert="" (leerer Flag-Wert) hinzu, wenn Sie Ihr benutzerdefiniertes Image generieren.

Hinweise

Richten Sie Ihr Projekt ein, bevor Sie Ihr benutzerdefiniertes Image erstellen.

Projekt einrichten

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Installieren Sie Python 3.11 oder höher.
  15. Erstellen Sie ein Anpassungsskript zur Installation benutzerdefinierter Pakete bzw. Aktualisierungskonfigurationen. Beispiel:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      
  16. Cloud Storage-Bucket in Ihrem Projekt erstellen

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets

    2. Click Create.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      1. In the Get started section, do the following:
        • Enter a globally unique name that meets the bucket naming requirements.
        • To add a bucket label, expand the Labels section (), click Add label, and specify a key and a value for your label.
      2. In the Choose where to store your data section, do the following:
        1. Select a Location type.
        2. Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
        3. To set up cross-bucket replication, select Add cross-bucket replication via Storage Transfer Service and follow these steps:

          Set up cross-bucket replication

          1. In the Bucket menu, select a bucket.
          2. In the Replication settings section, click Configure to configure settings for the replication job.

            The Configure cross-bucket replication pane appears.

            • To filter objects to replicate by object name prefix, enter a prefix that you want to include or exclude objects from, then click Add a prefix.
            • To set a storage class for the replicated objects, select a storage class from the Storage class menu. If you skip this step, the replicated objects will use the destination bucket's storage class by default.
            • Click Done.
      3. In the Choose how to store your data section, do the following:
        1. Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
        2. To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
      4. In the Choose how to control access to objects section, select whether or not your bucket enforces public access prevention, and select an access control method for your bucket's objects.
      5. In the Choose how to protect object data section, do the following:
        • Select any of the options under Data protection that you want to set for your bucket.
          • To enable soft delete, click the Soft delete policy (For data recovery) checkbox, and specify the number of days you want to retain objects after deletion.
          • To set Object Versioning, click the Object versioning (For version control) checkbox, and specify the maximum number of versions per object and the number of days after which the noncurrent versions expire.
          • To enable the retention policy on objects and buckets, click the Retention (For compliance) checkbox, and then do the following:
            • To enable Object Retention Lock, click the Enable object retention checkbox.
            • To enable Bucket Lock, click the Set bucket retention policy checkbox, and choose a unit of time and a length of time for your retention period.
        • To choose how your object data will be encrypted, expand the Data encryption section (), and select a Data encryption method.
    4. Click Create.

    Benutzerdefiniertes Bild generieren

    Zum Erstellen eines benutzerdefinierten Dataproc-Images verwenden Sie das Python-Programm generate_custom_image.py.

    Funktionsweise

    Das generate_custom_image.py-Programm startet eine temporäre Compute Engine-VM-Instanz mit dem angegebenen Dataproc-Basis-Image und führt dann das Anpassungsskript in der VM-Instanz aus, um benutzerdefinierte Pakete zu installieren und/oder Konfigurationen zu aktualisieren. Nach Abschluss des Anpassungsskripts beendet es die VM-Instanz und erstellt ein benutzerdefiniertes Dataproc-Image vom Laufwerk der VM-Instanz. Die temporäre VM wird gelöscht, nachdem das benutzerdefinierte Image erstellt wurde. Das benutzerdefinierte Image wird gespeichert und kann zum Erstellen von Dataproc-Clustern verwendet werden.

    Das generate_custom_image.py-Programm verwendet die gcloud CLI, um mehrstufige Workflows in Compute Engine auszuführen.

    Code ausführen

    Verzweigen oder klonen Sie die Dateien auf GitHub unter Benutzerdefinierte Dataproc-Images.

    Führen Sie dann das Skript generate_custom_image.py aus, damit Dataproc Ihr benutzerdefiniertes Image generiert und speichert.

    python3 generate_custom_image.py \
        --image-name=CUSTOM_IMAGE_NAME \
        [--family=CUSTOM_IMAGE_FAMILY_NAME] \
        --dataproc-version=IMAGE_VERSION \
        --customization-script=LOCAL_PATH \
        --zone=ZONE \
        --gcs-bucket=gs://BUCKET_NAME \
        [--no-smoke-test]
    

    Erforderliche Flags

    • --image-name: der Ausgabename für Ihr benutzerdefiniertes Image.

    • --dataproc-version: Die Dataproc-Image-Version, die Sie in Ihrem benutzerdefinierten Image verwenden möchten. Geben Sie die Version im Format x.y.z-os oder x.y.z-rc-os an, z. B. „2.0.69-debian10“.

    • --customization-script: Ein lokaler Pfad zu Ihrem Skript, mit dem das Tool Ihre benutzerdefinierten Pakete installiert oder andere Anpassungen durchführt. Dieses Skript wird nur auf der temporären VM, die zum Erstellen des benutzerdefinierten Images verwendet wird, als Linux-Startskript ausgeführt. Für alle anderen Initialisierungsaktionen, die Sie beim Erstellen eines Clusters mit Ihrem benutzerdefinierten Image ausführen möchten, können Sie ein anderes Initialisierungsskript angeben.

      Projektübergreifende Images:Wenn Ihr benutzerdefiniertes Image zum Erstellen von Clustern in verschiedenen Projekten verwendet wird, kann ein Fehler aufgrund des im Image gespeicherten gcloud- oder gsutil-Befehlscache auftreten. Sie können dieses Problem vermeiden, indem Sie den folgenden Befehl in Ihr Anpassungsskript einfügen, um zwischengespeicherte Anmeldedaten zu löschen.

      rm -r /root/.gsutil /root/.config/gcloud
      
    • --zone: die Compute Engine-Zone, in der generate_custom_image.py eine temporäre VM zum Erstellen Ihres benutzerdefinierten Images erstellt.

    • --gcs-bucket: Ein URI im Format gs://BUCKET_NAME, der auf Ihren Cloud Storage-Bucket verweist. generate_custom_image.py schreibt Logdateien in diesen Bucket.

    Optionale Flags

    • --family: Die Image-Familie für das benutzerdefinierte Image. Image-Familien werden verwendet, um ähnliche Images zu gruppieren, und können beim Erstellen eines Clusters als Zeiger auf das neueste Image in der Familie verwendet werden. Beispiel: custom-2-2-debian12.
    • --no-smoke-test: Dies ist ein optionales Flag, das das Testen des neu erstellten benutzerdefinierten Images deaktiviert. Der Smoke-Test erstellt einen Dataproc-Testcluster mit dem neu erstellten Image, führt einen kleinen Job aus und löscht den Cluster am Ende des Tests. Der Smoke-Test wird standardmäßig ausgeführt, um zu prüfen, ob das neu erstellte benutzerdefinierte Image einen funktionierenden Dataproc-Cluster erstellen kann. Das Deaktivieren dieses Schritts mit dem Flag --no-smoke-test beschleunigt die Erstellung des benutzerdefinierten Image, wird jedoch nicht empfohlen.
    • --subnet: Das Subnetzwerk, das zum Erstellen der VM verwendet werden soll, mit der das benutzerdefinierte Dataproc-Image erstellt wird. Wenn Ihr Projekt Teil einer freigegebenen VPC ist, müssen Sie die vollständige Subnetzwerk-URL im folgenden Format angeben: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.
    • --optional-components: Dieses Flag ist nur verfügbar, wenn Sie Basis-Image-Versionen 2.3 und höher verwenden. Eine Liste der optionalen Komponenten wie SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG und PIG (PIG ist als optionale Komponente in Image-Versionen 2.3 und höher verfügbar), die im Image installiert werden sollen.

      Beispiel: Google Cloud CLI-Befehl zum Erstellen eines Clusters:

      gcloud dataproc clusters create CLUSTER_NAME
          --image=CUSTOM_IMAGE_URI  \
          --optional-components=COMPONENT_NAME \
          ... other flags
      

    Eine Liste der verfügbaren optionalen Flags finden Sie unter Optionale Argumente auf GitHub.

    Wenn generate_custom_image.py erfolgreich ist, wird der imageURI des benutzerdefinierten Images in der Ausgabe des Terminalfensters aufgeführt (der vollständige imageUri ist unten fett dargestellt):

    ...
    managedCluster:
        clusterName: verify-image-20180614213641-8308a4cd
        config:
          gceClusterConfig:
            zoneUri: ZONE
          masterConfig:
            imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
    ...
    
    INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
    INFO:__main__:
    
    #####################################################################
      WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
               WILL EXPIRE ON 2018-07-14 21:35:44.133000.
    #####################################################################
    
    
    aufgeführt.

    Benutzerdefinierte Image-Versionslabels (erweiterte Nutzung)

    Wenn Sie das standardmäßige Tool zur Erstellung von benutzerdefinierten Images von Dataproc verwenden, legt das Tool das Label goog-dataproc-version für das erstellte benutzerdefinierte Image fest. Das Label spiegelt den Funktionsumfang und die Protokolle wider, die von Dataproc zur Verwaltung der Software im Image verwendet werden.

    Erweiterte Nutzung: Wenn Sie mithilfe eines eigenen Prozesses ein benutzerdefiniertes Dataproc-Image erstellen, müssen Sie das Label goog-dataproc-version manuell folgendermaßen zu Ihrem benutzerdefinierten Image hinzufügen:

    1. Extrahieren Sie das Label goog-dataproc-version aus dem Cloud Dataproc-Basis-Image, das zum Erstellen des benutzerdefinierten Images verwendet wird.

      gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
          --project cloud-dataproc \
          --format="value(labels.goog-dataproc-version)"
      

    2. Legen Sie das Label für das benutzerdefinierte Image fest.

      gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
      

    Benutzerdefiniertes Image verwenden

    Sie geben das benutzerdefinierte Image an, wenn Sie einen Dataproc-Cluster erstellen. Ein benutzerdefiniertes Image wird unter Cloud Compute-Images gespeichert und kann ab dem Erstellungstag 365 Tage lang zum Erstellen eines Dataproc-Clusters verwendet werden. Informationen zur Verwendung eines benutzerdefinierten Images nach Ablauf der 365 Tage finden Sie unter Cluster mit abgelaufenem benutzerdefiniertem Image erstellen.

    URI eines benutzerdefinierten Images

    Sie übergeben den imageUri des benutzerdefinierten Images an den Cluster-Erstellungsvorgang. Es gibt drei Möglichkeiten, diesen URI anzugeben:

    1. Vollständiger URI:
      https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
    2. Teil-URI: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
    3. Kurzform: CUSTOM_IMAGE_NAME

    Benutzerdefinierte Images können auch über ihren Familien-URI angegeben werden, der immer das neueste Bild innerhalb der Image-Familie auswählt.

    1. Vollständiger URI:
      https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
    2. Teil-URI: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

    URI des benutzerdefinierten Images ermitteln

    Google Cloud CLI

    Führen Sie den folgenden Befehl aus, um die Namen Ihrer benutzerdefinierten Images aufzulisten.

    gcloud compute images list
    

    Übergeben Sie den Namen Ihres benutzerdefinierten Images an den folgenden Befehl, um den URI (selfLink) Ihres benutzerdefinierten Images aufzulisten.

    gcloud compute images describe custom-image-name
    

    Ausgabe-Snippet:

    ...
    name: CUSTOM_IMAGE_NAME
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
    ...
    

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Compute Engine → Images und klicken Sie auf den Image-Namen. Sie können eine Abfrage in das Feld filter images einfügen, um die Anzahl der angezeigten Bilder zu begrenzen.
    2. Die Seite Bilddetails wird geöffnet. Klicken Sie auf Equivalent REST (Entsprechende REST-Anfrage/-Antwort).
    3. In der REST-Antwort werden zusätzliche Informationen über das Image angezeigt, beispielsweise der Image-URI selfLink.
      {
        ...
        "name": "my-custom-image",
        "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
        "sourceDisk": ...,
        ...
      }
      

    Cluster mit einem benutzerdefinierten Image erstellen

    Erstellen Sie einen Cluster mit der gcloud CLI, der Dataproc API oder derGoogle Cloud -Konsole.

    gcloud-CLI

    Sie können einen Dataproc-Cluster mit einem benutzerdefinierten Image mit dem Befehl dataproc clusters create und dem Flag --image erstellen.

    Beispiel:
    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM_IMAGE_URI \
        --region=REGION \
        ... other flags
    

    REST API

    Sie können einen Cluster mit einem benutzerdefinierten Image erstellen. Geben Sie dazu den URI des benutzerdefinierten Images im Feld InstanceGroupConfig.imageUri in den Objekten masterConfig, workerConfig, und gegebenenfalls secondaryWorkerConfig in der API-Anfrage cluster.create an.

    Beispiel: REST-Anfrage zum Erstellen eines Standard-Dataproc-Clusters (ein Master, zwei Worker-Knoten) mit einem benutzerdefinierten Image.

    POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
    {
      "clusterName": "CLUSTER_NAME",
      "config": {
        "masterConfig": {
          "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
        },
        "workerConfig": {
          "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
        }
      }
    }
      

    Console

    1. Öffnen Sie die Dataproc-Seite Cluster erstellen. Der Bereich Cluster einrichten ist ausgewählt.
    2. Klicken Sie im Abschnitt Versionsverwaltung auf Ändern. Wählen Sie den Tab Benutzerdefiniertes Image aus, wählen Sie das benutzerdefinierte Image aus, das für Ihren Dataproc-Cluster verwendet werden soll, und klicken Sie dann auf Auswählen. Die VMs des Clusters werden mit dem ausgewählten benutzerdefinierten Image bereitgestellt.

    Dataproc-Clusterattribute mit einem benutzerdefinierten Image überschreiben

    Mithilfe von benutzerdefinierten Images können Sie Clusterattribute überschreiben, die während der Clustererstellung festgelegt wurden. Wenn Sie einen Cluster mit einem benutzerdefinierten Image erstellen und beim Erstellen des Clusters Attribute mit Werten festgelegt werden, die sich von den Werten Ihres benutzerdefinierten Images unterscheiden, haben die Attributwerte Ihres benutzerdefinierten Images Vorrang.

    So legen Sie Clusterattribute mit Ihrem benutzerdefinierten Image fest:

    1. Erstellen Sie in dem Anpassungsskript Ihres benutzerdefinierten Images eine dataproc.custom.properties-Datei in /etc/google-dataproc und legen Sie dann die Attributwerte des Clusters in der Datei fest.

      • Beispieldatei dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      
      • Beispiel für ein Snippet zum Erstellen von Dateien zur Anpassung des Skripts, um zwei Clusterattribute zu überschreiben:
      cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
      dataproc.conscrypt.provider.enable=true
      dataproc.logging.stackdriver.enable=false
      EOF
      

    Cluster mit abgelaufenem benutzerdefiniertem Image erstellen

    Benutzerdefinierte Images laufen standardmäßig 365 Tage nach dem Datum der Erstellung des Images ab. So erstellen Sie einen Cluster mit einem abgelaufenen benutzerdefinierten Image:

    1. Versuchen Sie, einen Dataproc-Cluster mit einem abgelaufenen benutzerdefinierten Image oder einem benutzerdefinierten Image zu erstellen, das innerhalb von zehn Tagen abläuft.

      gcloud dataproc clusters create CLUSTER-NAME \
          --image=CUSTOM-IMAGE-NAME \
          --region=REGION \
          ... other flags
      
    2. Die gcloud CLI gibt eine Fehlermeldung aus, die den Attributnamen dataproc:dataproc.custom.image.expiration.token des Clusters und den Tokenwert enthält.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    

    Kopieren Sie den String TOKEN_VALUE in die Zwischenablage.

    1. Verwenden Sie die gcloud CLI, um den Dataproc-Cluster noch einmal zu erstellen. Fügen Sie dazu die kopierte TOKEN_VALUE als Clustereigenschaft hinzu.

      gcloud dataproc clusters create CLUSTER-NAME \
          --image=CUSTOM-IMAGE-NAME \
          --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \
          --region=REGION \
          ... other flags
      

    Der Cluster mit dem benutzerdefinierten Image sollte nun erfolgreich erstellt werden.