Tabellen aus einem HDFS-Data Lake migrieren

In diesem Dokument wird beschrieben, wie Sie Ihre Apache Hadoop Distributed File System-Tabellen (HDFS) zu 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 tun:

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.

Erforderliche Dateien

Sie benötigen die folgenden Migrationsdateien in einem Cloud Storage-Bucket, bevor Sie eine HDFS-Data Lake-Übertragung planen können:

  • Die extrahierte Metadatendatei (hive-dumper-output.zip)
  • Die YAML-Datei für die Übersetzungskonfiguration (*.config.yaml)
  • Die Tabellen, die YAML-Dateien zuordnen

In den folgenden Abschnitten wird beschrieben, wie Sie diese Dateien erstellen.

hive-dumper-output.zip

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.

YAML-Konfigurationsdatei für Übersetzungen

Erstellen Sie eine YAML-Datei für die Übersetzungskonfiguration mit einem Namen, der das Suffix .config.yaml enthält, z. B. translation.config.yaml, und laden Sie sie in denselben Bucket hoch, der hive-dumper-output.zip enthält. Konfigurieren Sie die YAML-Datei für die Übersetzungskonfiguration, um HDFS-Pfade Cloud Storage-Ordnern zuzuordnen, wie im folgenden Beispiel:

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 Ihre migrierten Dateien ist.

Das Feld location_expression ist ein CEL-Ausdruck (Common Expression Language).

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

Tabellen zum Zuordnen von YAML-Dateien generieren

Führen Sie den folgenden Befehl aus, um eine YAML-Datei für die Tabellenzuordnung zu generieren:

  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: Der Basis-URI für einen Cloud Storage-Bucket, der die YAML-Datei für die Tabellenzuordnung enthält. Beispiel: gs://output_bucket/tables/
  • 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: eu oder us.

Bei der Ausführung gibt die Translation Service API eine WORKFLOW_ID zurück und startet einen asynchronen Hintergrundjob. Sie können den Status dieses Jobs mit dem folgenden Befehl überwachen:

  curl \
  -H "Content-Type:application/json" \
  -H "Authorization:Bearer TOKEN" -X GET https://bigquerymigration.googleapis.com/v2alpha/projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_ID

Wenn Sie fertig sind, werden die YAML-Dateien für die Tabellenzuordnung erstellt. Ihre YAML-Dateien für die Tabellenzuordnung können aus mehreren Zuordnungsdateien bestehen, eine für jede Tabelle, die im Cloud Storage-Ordner gespeichert ist.

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-system.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",
    "destination_dataproc_metastore":"DATAPROC_METASTORE",
    "translation_output_gcs_path":"gs://TRANSLATION_OUTPUT_BUCKET/metadata/config/default_database/",
    "table_metadata_path":"gs://DUMPER_BUCKET/hive-dumper-output.zip"}'

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: Ihre Trusted Cloud by S3NS -Projekt-ID. 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.
  • DATAPROC_METASTORE: Das Ziel-Dataproc Metastore für das verwaltete OSS-Ziel. Wenn Sie stattdessen BigLake Metastore verwenden möchten, können Sie dieses Feld aus dieser Übertragungskonfiguration weglassen. Weitere Informationen zur Verwendung von BigLake Metastore zum Migrieren von Metadaten finden Sie unter Metadatenmigration.

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.

Metadatenmigration

Metadaten können entweder zu Dataproc Metastore oder BigLake Metastore migriert werden, wobei die zugrunde liegenden Daten in Cloud Storage gespeichert werden.

Wenn Sie Metadaten in Dataproc Metastore übertragen möchten, geben Sie die URL zu Ihrem Metastore im Feld destination_dataproc_metastore an.

Wenn Sie Metadaten in BigLake Metastore übertragen möchten, müssen Sie in der Übertragungskonfiguration kein destination_dataproc_metastore-Feld angeben. Das System ermittelt das BigQuery-Zieldataset automatisch aus dem Feld targetName in den generierten YAML-Zuordnungsdateien. Das Feld targetName ist als zweiteilige Kennung formatiert, z. B. bigquery_dataset_name.bigquery_table_name. Standardmäßig entspricht die Benennung Ihrem Quellsystem. Das BigQuery-Dataset mit dem Namen des Quellschemas muss vorhanden sein. Erstellen Sie es andernfalls, bevor Sie die Übertragung ausführen.

Wenn Sie ein anderes BigQuery-Dataset verwenden möchten, müssen Sie eine zusätzliche YAML-Konfigurationsdatei (mit dem Suffix config.yaml) im DUMPER_BUCKET bereitstellen, die ein Regelsatz für das Umschreiben von Objekten enthält, und dann die Übersetzungszuordnungen generieren. Im folgenden Beispiel wird die Quelldatenbank mit dem Namen my_hive_db einem BigQuery-Dataset mit dem Namen my_bq_dataset zugeordnet:

relation:
  - match:
      schema: my_hive_db
    outputName:
      database: null
      schema: my_bq_dataset

Der Parameter schema muss dem Namen des BigQuery-Datasets und der Parameter relation dem Namen der Tabelle entsprechen. Weitere Informationen finden Sie unter Ausgabenamen zuordnen.

Der Parameter database muss ebenfalls auf null festgelegt sein.

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.

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.