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 Cloud Dataproc-Releases unterstützt.
  • Benutzerdefinierte Image-Builds müssen auf einem Dataproc-Basis-Image basieren (derzeit werden Basis-Images von Debian und Ubuntu unterstützt).

Vorbereitung

Projekt einrichten

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

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

    Aktivieren Sie die APIs

  5. Installieren und initialisieren Sie das Cloud SDK.
  6. Installieren Sie Python 2.7+
  7. 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
      

Cloud Storage-Bucket im Projekt erstellen

  1. Wechseln Sie in der Cloud Console zum Cloud Storage-Browser.

    Zum Cloud Storage-Browser

  2. Klicken Sie auf Bucket erstellen.
  3. Geben Sie im Dialogfeld Bucket erstellen die folgenden Attribute 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 generate_custom_image.py-Programm verwendet jeweils gcloud (Standard), 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 Programm generate_custom_image.py aus, damit Dataproc Ihr benutzerdefiniertes Image generiert und speichert.

python generate_custom_image.py \
    --image-name custom_image_name \
    [--family custom_image_family_name] \
    --dataproc-version Dataproc version (example: "1.5.10-debian10") \
    --customization-script local path to your custom script \
    --zone Compute Engine zone to use for the location of the temporary VM \
    --gcs-bucket URI (gs://bucket-name) of a Cloud Storage bucket in your project \
    [--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" oder "x.y.z-rc-os" an, zum Beispiel "1.5.10-debian10", "1.5.10-ubuntu18", "1.5.0-RC10-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.

Eine Liste weiterer optionaler Flags finden Sie unter Optionale Argumente von GithHub.

Wenn der Befehl gcloud 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.
#####################################################################

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 60 Tage lang zum Erstellen eines Dataproc-Clusters verwendet werden. Informationen zur Verwendung eines benutzerdefinierten Images nach Ablauf der 60 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/custom-image-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
  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 in der Cloud Console die Seite Compute Engine → Images 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. In der REST-Antwort werden zusätzliche Informationen über das Image angezeigt, beispielsweise der Image-URI selfLink.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/my-project-id/global/images/my-custom-image",
      "sourceDisk": ...,
      ...
    }
    

Cluster mit benutzerdefiniertem Image erstellen

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

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/global/clusters/
{
  "clusterName": "custom-name",
  "config": {
    "masterConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    },
    "workerConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    }
  }
}
  

Console

Sie können einen Cluster erstellen, der ein benutzerdefiniertes Image von der Dataproc-Seite [Cluster erstellen](https://console.cloud.google.com/dataproc/clustersAdd) der Cloud Console verwendet.
  1. Klicken Sie unten im Formular auf Erweiterte Optionen.
  2. Klicken Sie im Abschnitt Image auf Ändern.
  3. Wählen Sie im Tab Benutzerdefiniertes Image das benutzerdefinierte Image aus, das für Ihren Dataproc-Cluster verwendet werden soll, und klicken Sie dann auf Auswählen.
Wenn Sie das Formular Cluster erstellen senden, werden die VMs des Clusters mit dem ausgewählten benutzerdefinierten Image bereitgestellt.

Cluster mit abgelaufenem benutzerdefiniertem Image erstellen

Benutzerdefinierte Images laufen standardmäßig 60 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. Das gcloud-Tool gibt eine Fehlermeldung aus, die den Attributnamen dataproc:dataproc.custom.image.expiration.token und den Tokenwert des Clusters enthält.

    dataproc:dataproc.custom.image.expiration.token=token value
    
    Kopieren Sie den String mit dem Tokenwert in die Zwischenablage.

  3. Verwenden Sie das gcloud-Tool, um den Dataproc-Cluster noch einmal zu erstellen. Fügen Sie dazu den oben kopierten "Tokenwert" als Clusterattribut 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.