Benutzerdefiniertes Dataproc-Image erstellen

Dataproc-Cluster können mit einem benutzerdefinierten Image bereitgestellt werden, das die vorinstallierten Pakete eines Nutzers enthält. In den folgenden Schritten wird erläutert, wie Sie ein benutzerdefiniertes Image erstellen und in einem Dataproc-Cluster installieren.

Hinweise:

  • Die Anleitung in diesem Dokument gilt nur für Linux-Betriebssysteme. Andere Betriebssysteme werden möglicherweise in zukünftigen Dataproc-Releases unterstützt.
  • Benutzerdefinierte Image-Builds müssen mit einem Dataproc-Basis-Image ( Basis-Images von Debian, Rocky Linux und Ubuntu unterstützt werden).
  • Optionale Komponenten verwenden: Standardmäßig übernehmen benutzerdefinierte Images alle optionalen Dataproc-Komponenten (Betriebssystem-Pakete und -Konfigurationen) aus ihren Basis-Images. Sie können die standardmäßigen Betriebssystempakete und -konfigurationen anpassen. Sie müssen jedoch beim Erstellen des Clusters den optionalen Komponentennamen angeben (z. B. durch Ausführen des gcloud dataproc clusters create --optional-components=COMPONENT_NAME-Befehls: SieheOptionale Komponenten hinzufügen). Wenn der Komponentenname beim Erstellen des Clusters nicht angegeben wird, wird die Komponente gelöscht (einschließlich benutzerdefinierter Betriebssystempakete und -konfigurationen). <ph type="x-smartling-placeholder">

Hinweise

Projekt einrichten

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Dataproc API, Compute Engine API, and Cloud Storage APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Dataproc API, Compute Engine API, and Cloud Storage APIs aktivieren.

    Aktivieren Sie die APIs

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Python 3.11 oder höher installieren
  13. Bereiten Sie ein Anpassungsskript vor, mit dem benutzerdefinierte Pakete und/oder aktualisiert Konfigurationen, zum Beispiel:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Cloud Storage-Bucket im Projekt erstellen

  1. Wechseln Sie in der Google Cloud Console zur Cloud Storage-Seite Buckets.

    Zur Seite „Buckets“

  2. Klicken Sie auf Bucket erstellen.
  3. Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
    • Geben Sie unter Bucket benennen einen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
    • Gehen Sie unter Speicherort für Daten auswählen folgendermaßen vor:
      • Wählen Sie eine Option für Standorttyp aus.
      • Wählen Sie eine Standort-Option aus.
    • Wählen Sie unter Standardspeicherklasse für Ihre Daten auswählen eine Speicherklasse aus.
    • Wählen Sie unter Zugriffssteuerung für Objekte auswählen eine Option für die Zugriffssteuerung aus.
    • Geben Sie für Erweiterte Einstellungen (optional) eine Verschlüsselungsmethode, eine Aufbewahrungsrichtlinie oder Bucket-Labels an.
  4. Klicken Sie auf Erstellen.

Benutzerdefiniertes Image generieren

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

So gehts:

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 Programm generate_custom_image.py verwendet die gcloud CLI zum Ausführen mehrstufiger Workflows in Compute Engine.

Code ausführen

Verzweigen oder klonen Sie die Dateien auf GitHub unter Benutzerdefinierte Dataproc-Images. Führen Sie dann das Programm 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. Hinweis: Der Image-Name muss dem regulären Ausdruck [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) entsprechen, z. B. keine Unterstriche oder Leerzeichen mit weniger als 64 Zeichen.
  • --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“ an. oder „x.y.z-rc-os“ Format, Beispiel: „2.0.69-debian10“.
  • --customization-script: ein lokaler Pfad zu Ihrem Skript, den das Tool ausführen soll, um Ihre benutzerdefinierten Pakete zu installieren oder andere Anpassungen vorzunehmen. Beachten Sie, dass dieses Skript nur auf der temporären VM ausgeführt wird, die zum Erstellen des benutzerdefinierten Images verwendet wird. 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.
  • --zone: Die Compute Engine-Zone, in der generate_custom_image.py eine temporäre VM zum Erstellen Ihres benutzerdefinierten Image erstellt.
  • --gcs-bucket: Ein URI im Format gs://BUCKET_NAME, der auf den Cloud Storage-Bucket verweist, den Sie unter Cloud Storage-Bucket in Ihrem Projekt erstellen erstellt haben. generate_custom_image.py schreibt Logdateien in diesen Bucket.

Optionale Flags

  • --family: Die Image-Familie für das 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-1-5-debian10".
  • --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. der das benutzerdefinierte Dataproc-Image erstellt. Wenn Ihr Projekt Teil eines Eine freigegebene VPC: Sie müssen die vollständige Subnetzwerk-URL angeben. im folgenden Format: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Eine Liste zusätzlicher optionaler Flags finden Sie unter Optionale Argumente auf GitHub.

Wenn generate_custom_image.py erfolgreich ist, gilt: imageURI des benutzerdefinierten Images in der Ausgabe des Terminalfensters aufgeführt werden (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.
#####################################################################

Benutzerdefinierte Image-Versionslabels für fortgeschrittene Nutzer

Wenn Sie das standardmäßige Tool zur Erstellung von benutzerdefinierten Images von Dataproc verwenden, legt das Tool automatisch das erforderliche 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.

Fortgeschrittene Nutzer, die mithilfe eines eigenen Prozesses ein benutzerdefiniertes Dataproc-Image erstellen, müssen das Label manuell folgendermaßen zu ihrem benutzerdefinierten Image hinzufügen:

  1. Label goog-dataproc-version aus der Dataproc-Basis extrahieren 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 Bild wird gespeichert in Cloud Compute Images und ist zum Erstellen eines Dataproc-Clusters 365 Tage lang gültig, Erstellungsdatum (Informationen zur Verwendung eines benutzerdefinierten Images nach einem Ablaufdatum von 365 Tagen 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

gcloud-Befehl

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

gcloud compute images list

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

gcloud compute images describe custom-image-name
...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

Console

  1. Öffnen Sie das Compute Engine→Images Seite in der Google Cloud Console und klicken Sie auf den Image-Namen. Sie können eine Abfrage in das Textfeld "Filter images" (Images filtern) einfügen, um die Anzahl der angezeigten Images zu begrenzen.
  2. Die Seite mit den Image-Details wird angezeigt. Klicken Sie auf Equivalent REST. (Entsprechende REST-Anfrage/-Antwort).
  3. Die REST-Antwort listet zusätzliche Informationen über das Image auf, einschließlich Den selfLink, also den Image-URI.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Cluster mit benutzerdefiniertem Image erstellen

Sie können einen Cluster erstellen mit Master- und Worker-Knoten, die ein benutzerdefiniertes Image mit der gcloud-Befehlszeile verwenden das Tool, die Dataproc API oder die Google Cloud Console.

gcloud-Befehl

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 Dataproc in der Google Cloud Console. Cluster erstellen Seite. 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.

Wenn Sie das Formular Create a cluster (Cluster erstellen) senden, werden die VMs des Clusters mit dem ausgewählten benutzerdefinierten Image bereitgestellt.

Dataproc-Clusterattribute mit einem benutzerdefinierten Image überschreiben

Mithilfe von benutzerdefinierten Images können Sie alle Clusterattribute überschreiben, die während der Clustererstellung festgelegt wurden. Wenn ein Nutzer einen Cluster mit Ihrem benutzerdefinierten Image erstellt, aber Clusterattribute festlegt, die Sie von Ihren benutzerdefinierten Images unterscheiden, haben Ihre Clustereinstellungen für benutzerdefinierte 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.
    • Inhalt der Beispieldatei dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Beispiel für ein Snippet zum Erstellen einer Datei mit Anpassungsskript zum Überschreiben von zwei Clusterattribute:

     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, einen Dataproc-Cluster mit einem abgelaufenen benutzerdefinierten Cluster zu erstellen Image oder ein benutzerdefiniertes Image erstellen, das innerhalb von 10 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 die Attributname des Clusters dataproc:dataproc.custom.image.expiration.token und Tokenwert.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    Kopieren Sie den Tokenwert in die Zwischenablage einfügen.

  3. Verwenden Sie die gcloud CLI, um den Dataproc-Cluster neu zu erstellen. durch Hinzufügen des Tokenwerts oben als Clusterattribut kopiert.

    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.