Tabellen aus einem HDFS-Data Lake migrieren

In diesem Dokument wird beschrieben, wie Sie Ihre Apache Hadoop Distributed File System-Tabellen (HDFS) in Trusted Cloudmigrieren.

Mit dem Connector für die HDFS-Data-Lake-Migration im BigQuery Data Transfer Service können Sie Ihre Hive- und Iceberg-Tabellen aus verschiedenen Hadoop-Distributionen in lokalen und Cloud-Umgebungen zu Trusted Cloudmigrieren.

Mit dem HDFS-Data-Lake-Connector können Sie Ihre HDFS-Data-Lake-Tabellen sowohl bei Dataproc Metastore als auch bei BigLake Metastore registrieren und gleichzeitig Cloud Storage als zugrunde liegenden Speicher für Ihre Dateien verwenden.

Das folgende Diagramm bietet einen Überblick über die Tabellenmigration aus dem Hadoop-Cluster.

Übersicht über die Tabellenmigration vom Hive-Data Lake zu BigQuery.

Beschränkungen

Für HDFS-Data-Lake-Übertragungen gelten die folgenden Einschränkungen:

  • Wenn Sie Iceberg-Tabellen migrieren möchten, müssen Sie die Tabellen im BigLake-Metastore registrieren, um Schreibzugriff für Open-Source-Engines (z. B. Spark oder Flink) und Lesezugriff für BigQuery zu ermöglichen.
  • Wenn Sie Hive-Tabellen migrieren möchten, müssen Sie die Tabellen in Dataproc Metastore registrieren, um Schreibzugriff für Open-Source-Engines und Lesezugriff für BigQuery zu ermöglichen.
  • Sie müssen das bq-Befehlszeilentool verwenden, um eine HDFS-Data-Lake-Tabelle zu BigQuery zu migrieren.

Hinweise

Bevor Sie eine HDFS-Data-Lake-Übertragung planen, müssen Sie Folgendes ausführen:

Cloud Storage-Bucket für migrierte Dateien erstellen

Erstellen Sie einen Cloud Storage-Bucket, der das Ziel für Ihre migrierten Data Lake-Dateien sein soll. In diesem Dokument wird dieser Bucket als MIGRATION_BUCKET bezeichnet.

Metadatendatei für Apache Hive generieren

Führen Sie das dwh-migration-dumper-Tool aus, um Metadaten für Apache Hive zu extrahieren. Das Tool generiert eine Datei mit dem Namen hive-dumper-output.zip in einem Cloud Storage-Bucket, der in diesem Dokument als DUMPER_BUCKET bezeichnet wird.

APIs aktivieren

Aktivieren Sie die folgenden APIs in IhremTrusted Cloud -Projekt:

  • Data Transfer API
  • Storage Transfer API

Ein Dienst-Agent wird erstellt, wenn Sie die Data Transfer API aktivieren.

Berechtigungen konfigurieren

  1. Erstellen Sie ein Dienstkonto und weisen Sie ihm die Rolle „BigQuery-Administrator“ (roles/bigquery.admin) zu. Dieses Dienstkonto wird zum Erstellen der Übertragungskonfiguration verwendet.
  2. Beim Aktivieren der Data Transfer API wird ein Dienst-Agent (P4SA) erstellt. Weisen Sie dem Dienstkonto die folgenden Rollen zu:
    • roles/metastore.metadataOwner
    • roles/storagetransfer.admin
    • roles/serviceusage.serviceUsageConsumer
    • roles/storage.objectViewer
      • Wenn Sie Metadaten für BigLake-Iceberg-Tabellen migrieren, weisen Sie ihr die Rollen roles/storage.objectAdmin und roles/bigquery.admin anstelle von roles/storage.objectViewer zu.
  3. Weisen Sie dem Dienst-Agent mit dem folgenden Befehl die Rolle roles/iam.serviceAccountTokenCreator zu:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns.iam.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator

Storage Transfer Agent konfigurieren

So richten Sie den für die Übertragung eines HDFS-Data Lakes erforderlichen Storage Transfer Agent ein:

  1. Berechtigungen konfigurieren, damit der Storage Transfer Agent in Ihrem Hadoop-Cluster ausgeführt werden kann.
  2. Installieren Sie Docker auf lokalen Agent-Computern.
  3. Erstellen Sie einen Storage Transfer Service-Agent-Pool in Ihrem Trusted Cloud by S3NS Projekt.
  4. Installieren Sie Agents auf Ihren lokalen Agent-Computern.

Übertragung eines HDFS-Data Lakes planen

Wenn Sie eine HDFS-Data-Lake-Übertragung planen möchten, geben Sie den Befehl bq mk ein und geben Sie das Flag --transfer_config für die Übertragungserstellung an:

  bq mk --transfer_config
  --data_source=hadoop
  --display_name='TRANSFER_NAME'
  --service_account_name='SERVICE_ACCOUNT'
  --project_id='PROJECT_ID'
  --location='REGION'
  --params='{"table_name_patterns":"LIST_OF_TABLES",
    "agent_pool_name":"AGENT_POOL_NAME",
    "table_metadata_path":"gs://DUMPER_BUCKET/hive-dumper-output.zip",
    "target_gcs_file_path":"gs://MIGRATION_BUCKET",
    "destination_dataproc_metastore":"DATAPROC_METASTORE",
    "destination_bigquery_dataset":"BIGLAKE_METASTORE",
    "translation_output_gcs_path":"gs://TRANSLATION_OUTPUT_BUCKET/metadata/config/default_database/"
    }'

Ersetzen Sie Folgendes:

  • TRANSFER_NAME: Der Anzeigename für die Übertragungskonfiguration. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung identifizieren können, wenn Sie sie später ändern müssen.
  • SERVICE_ACCOUNT ist der Name des Dienstkontos, der zur Authentifizierung der Übertragung verwendet wird. Das Dienstkonto sollte zum selben project_id gehören, das für die Erstellung der Übertragung verwendet wurde, und sollte alle erforderlichen Berechtigungen haben.
  • PROJECT_ID: Projekt-ID in Trusted Cloud by S3NS . Wenn --project_id nicht bereitgestellt wird, um ein bestimmtes Projekt anzugeben, wird das Standardprojekt verwendet.
  • REGION: Speicherort dieser Übertragungskonfiguration.
  • LIST_OF_TABLES: eine Liste der zu übertragenden Einheiten. Verwenden Sie eine hierarchische Namensspezifikation – database.table. In diesem Feld können Sie Tabellen mit regulären RE2-Ausdrücken angeben. Beispiel:
    • db1..*: gibt alle Tabellen in der Datenbank an.
    • db1.table1;db2.table2: eine Liste von Tabellen
  • AGENT_POOL_NAME: Der Name des Agent-Pools, der zum Erstellen von Agents verwendet wird.
  • DUMPER_BUCKET: der Cloud Storage-Bucket, der die Datei hive-dumper-output.zip enthält.
  • MIGRATION_BUCKET: Der GCS-Zielpfad, in den alle zugrunde liegenden Dateien geladen werden.

  • Metadaten können entweder zu Dataproc Metastore oder BigLake Metastore migriert werden, wobei die zugrunde liegenden Daten in Cloud Storage gespeichert werden. Sie können das Ziel mit einem der folgenden Parameter angeben:

    • Verwenden Sie zum Übertragen von Metadaten in Dataproc Metastore den Parameter destination_dataproc_metastore und geben Sie die URL zu Ihrem Metastore in DATAPROC_METASTORE an.
    • Wenn Sie Metadaten stattdessen in den BigLake-Metastore übertragen möchten, verwenden Sie den Parameter destination_bigquery_dataset und geben Sie das BigQuery-Dataset in BIGLAKE_METASTORE an.
  • TRANSLATION_OUTPUT_BUCKET: (Optional) Geben Sie einen Cloud Storage-Bucket für die Übersetzungsausgabe an. Weitere Informationen finden Sie unter Übersetzungsausgabe verwenden.

Führen Sie diesen Befehl aus, um die Übertragungskonfiguration zu erstellen und die Übertragung des HDFS-Data Lakes zu starten. Übertragungen werden standardmäßig alle 24 Stunden ausgeführt. Sie können sie aber mit Optionen für die Übertragungsplanung konfigurieren.

Nach Abschluss der Übertragung werden Ihre Tabellen im Hadoop-Cluster zu MIGRATION_BUCKET migriert.

Optionen für die Datenaufnahme

In den folgenden Abschnitten finden Sie weitere Informationen dazu, wie Sie Ihre HDFS-Datalake-Übertragungen konfigurieren können.

Inkrementelle Übertragungen

Wenn eine Übertragungskonfiguration mit einem wiederkehrenden Zeitplan eingerichtet wird, wird die Tabelle auf Trusted Cloud by S3NS bei jeder nachfolgenden Übertragung mit den neuesten Änderungen an der Quelltabelle aktualisiert. Beispielsweise werden alle Einfüge-, Lösch- oder Aktualisierungsvorgänge mit Schemaänderungen bei jeder Übertragung in Trusted Cloud by S3NS berücksichtigt.

Optionen für die Übertragungsplanung

Standardmäßig werden Übertragungen alle 24 Stunden ausgeführt. Wenn Sie konfigurieren möchten, wie oft Übertragungen ausgeführt werden, fügen Sie der Übertragungskonfiguration das Flag --schedule hinzu und geben Sie einen Übertragungszeitplan mit der Syntax schedule an. Bei HDFS-Data-Lake-Übertragungen müssen zwischen den Übertragungsvorgängen mindestens 24 Stunden liegen.

Bei einmaligen Übertragungen können Sie der Übertragungskonfiguration das Flag end_time hinzufügen, damit die Übertragung nur einmal ausgeführt wird.

Übersetzungsausgabe konfigurieren

Sie können für jede migrierte Tabelle einen eindeutigen Cloud Storage-Pfad und eine eindeutige Datenbank konfigurieren. Führen Sie dazu die folgenden Schritte aus, um eine YAML-Datei mit der Tabellenzuordnung zu generieren, die Sie in Ihrer Übertragungskonfiguration verwenden können.

  1. Erstellen Sie im Verzeichnis DUMPER_BUCKET eine YAML-Konfigurationsdatei (mit dem Suffix config.yaml), die Folgendes enthält:

        type: object_rewriter
        relation:
        - match:
            relationRegex: ".*"
          external:
            location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
    • Ersetzen Sie MIGRATION_BUCKET durch den Namen des Cloud Storage-Bucket, der das Ziel für die migrierten Tabellendateien ist. Das Feld location_expression ist ein CEL-Ausdruck (Common Expression Language).
  2. Erstellen Sie eine weitere YAML-Konfigurationsdatei (mit dem Suffix config.yaml) im DUMPER_BUCKET, die Folgendes enthält:

        type: experimental_object_rewriter
        relation:
          - match:
              schema: SOURCE_DATABASE
            outputName:
              database: null
              schema: TARGET_DATABASE
    • Ersetzen Sie SOURCE_DATABASE und TARGET_DATABASE durch den Namen der Quelldatenbank und der Dataproc Metastore-Datenbank oder des BigQuery-Datasets, je nach ausgewähltem Metastore. Achten Sie darauf, dass das BigQuery-Dataset vorhanden ist, wenn Sie die Datenbank für den BigLake-Metastore konfigurieren.

    Weitere Informationen zu dieser Konfigurations-YAML finden Sie unter Richtlinien zum Erstellen einer Konfigurations-YAML-Datei.

  3. Generieren Sie mit dem folgenden Befehl Tabellen, die die YAML-Datei zuordnen:

    curl -d '{
      "tasks": {
          "string": {
            "type": "HiveQL2BigQuery_Translation",
            "translation_details": {
                "target_base_uri": "TRANSLATION_OUTPUT_BUCKET",
                "source_target_mapping": {
                  "source_spec": {
                      "base_uri": "DUMPER_BUCKET"
                  }
                },
                "target_types": ["metadata"]
            }
          }
      }
      }' \
      -H "Content-Type:application/json" \
      -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/PROJECT_ID/locations/LOCATION/workflows

    Ersetzen Sie Folgendes:

    • TRANSLATION_OUTPUT_BUCKET: (Optional) Geben Sie einen Cloud Storage-Bucket für die Übersetzungsausgabe an. Weitere Informationen finden Sie unter Übersetzungsausgabe verwenden.
    • DUMPER_BUCKET: Der Basis-URI für den Cloud Storage-Bucket, der die hive-dumper-output.zip- und die YAML-Konfigurationsdatei enthält.
    • TOKEN: Das OAuth-Token. Sie können sie in der Befehlszeile mit dem Befehl gcloud auth print-access-token generieren.
    • PROJECT_ID: das Projekt, in dem die Übersetzung verarbeitet werden soll.
    • LOCATION: der Ort, an dem der Job verarbeitet wird. Beispiel: euoder us
  4. Status dieses Jobs überwachen Nach Abschluss wird für jede Tabelle in der Datenbank eine Zuordnungsdatei in einem vordefinierten Pfad in TRANSLATION_OUTPUT_BUCKET generiert.

HDFS-Data-Lake-Übertragungen überwachen

Nachdem Sie eine HDFS-Data-Lake-Übertragung geplant haben, können Sie den Übertragungsjob mit Befehlen des bq-Befehlszeilentools überwachen. Informationen zum Überwachen Ihrer Übertragungsjobs finden Sie unter Übertragungen ansehen.

Status der Tabellenmigration verfolgen

Sie können auch das Tool dwh-dts-status ausführen, um den Status aller übertragenen Tabellen in einer Übertragungskonfiguration oder einer bestimmten Datenbank zu überwachen. Sie können auch das Tool dwh-dts-status verwenden, um alle Übertragungskonfigurationen in einem Projekt aufzulisten.

Hinweise

Bevor Sie das Tool dwh-dts-status verwenden können, müssen Sie Folgendes tun:

  1. Laden Sie das dwh-dts-status-Tool herunter, indem Sie das dwh-migration-tool-Paket aus dem dwh-migration-tools-GitHub-Repository herunterladen.

  2. Authentifizieren Sie Ihr Konto für Trusted Cloud by S3NS mit dem folgenden Befehl:

    gcloud auth application-default login
    

    Weitere Informationen finden Sie unter Funktionsweise von Standardanmeldedaten für Anwendungen.

  3. Prüfen Sie, ob der Nutzer die Rolle bigquery.admin und logging.viewer hat. Weitere Informationen zu IAM-Rollen finden Sie unter Referenz zur Zugriffssteuerung.

Alle Übertragungskonfigurationen in einem Projekt auflisten

Verwenden Sie den folgenden Befehl, um alle Übertragungskonfigurationen in einem Projekt aufzulisten:

  ./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]

Ersetzen Sie Folgendes:

  • PROJECT_ID : die Trusted Cloud by S3NS Projekt-ID, unter der die Übertragungen ausgeführt werden.
  • LOCATION : Der Ort, an dem die Übertragungskonfiguration erstellt wurde.

Mit diesem Befehl wird eine Tabelle mit einer Liste von Namen und IDs von Übertragungskonfigurationen ausgegeben.

Status aller Tabellen in einer Konfiguration ansehen

Mit dem folgenden Befehl können Sie den Status aller Tabellen in einer Übertragungskonfiguration aufrufen:

  ./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Trusted Cloud by S3NS Projekt-ID, unter der die Übertragungen ausgeführt werden.
  • LOCATION: Der Ort, an dem die Übertragungskonfiguration erstellt wurde.
  • CONFIG_ID: Die ID der angegebenen Übertragungskonfiguration.

Mit diesem Befehl wird eine Tabelle mit einer Liste der Tabellen und deren Übertragungsstatus in der angegebenen Übertragungskonfiguration ausgegeben. Der Übertragungsstatus kann einer der folgenden Werte sein: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.

Status aller Tabellen in einer Datenbank ansehen

Mit dem folgenden Befehl können Sie den Status aller Tabellen aufrufen, die aus einer bestimmten Datenbank übertragen wurden:

  ./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Trusted Cloud by S3NS Projekt-ID, unter der die Übertragungen ausgeführt werden.
  • DATABASE:der Name der angegebenen Datenbank.

Mit diesem Befehl wird eine Tabelle mit einer Liste von Tabellen und deren Übertragungsstatus in der angegebenen Datenbank ausgegeben. Der Übertragungsstatus kann einer der folgenden Werte sein: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.