Utiliser le metastore BigLake avec Dataproc sans serveur

Ce document explique comment utiliser BigLake Metastore avec Dataproc sans serveur.

Avant de commencer

  1. Activez la facturation pour votre projet Google Cloud . Découvrez comment vérifier si la facturation est activée sur un projet.
  2. Activez les API BigQuery et Dataproc.

    Activer les API

  3. (Facultatif) Découvrez le fonctionnement de BigLake Metastore et pourquoi vous devriez l'utiliser.

Rôles requis

Pour obtenir les autorisations nécessaires pour utiliser Spark et Dataproc sans serveur avec BigLake Metastore comme magasin de métadonnées, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Workflow général

Pour utiliser BigQuery avec Dataproc sans serveur, suivez ces étapes générales :

  1. Créez un fichier contenant les commandes que vous souhaitez exécuter dans BigLake Metastore.
  2. Connectez-vous au moteur de logiciel Open Source de votre choix.
  3. Envoyez un job par lot à l'aide de la méthode de votre choix, comme SparkSQL ou PySpark.

Connecter BigLake Metastore à Spark

Les instructions suivantes vous montrent comment connecter Dataproc sans serveur au metastore BigLake :

SparkSQL

Pour envoyer un job SparkSQL par lot, procédez comme suit.

  1. Créez un fichier SQL contenant les commandes Spark SQL que vous souhaitez exécuter dans le metastore BigLake. Par exemple, cette commande crée un espace de noms et une table.

    CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME;
    CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';

    Remplacez les éléments suivants :

    • CATALOG_NAME : nom du catalogue qui fait référence à votre table Spark.
    • NAMESPACE_NAME : nom de l'espace de noms qui fait référence à votre table Spark.
    • TABLE_NAME : nom de table pour votre table Spark.
    • WAREHOUSE_DIRECTORY : URI du dossier Cloud Storage dans lequel votre entrepôt de données est stocké.
  2. Envoyez un job par lot SparkSQL en exécutant la commande gcloud dataproc batches submit spark-sql gcloud CLI suivante :

    gcloud dataproc batches submit spark-sql SQL_SCRIPT_PATH \
    --project=PROJECT_ID \
    --region=REGION \
    --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --deps-bucket=BUCKET_PATH \
    --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY"

    Remplacez les éléments suivants :

    • SQL_SCRIPT_PATH : chemin d'accès au fichier SQL utilisé par le job par lot.
    • PROJECT_ID : ID du Google Cloud projet dans lequel exécuter le job par lot.
    • REGION : région dans laquelle votre charge de travail est exécutée.
    • SUBNET_NAME : facultatif. Nom d'un sous-réseau VPC dans REGION pour lequel l'accès privé à Google est activé et qui répond aux autres exigences concernant le sous-réseau de session.
    • LOCATION : emplacement dans lequel exécuter le job par lot.
    • BUCKET_PATH : emplacement du bucket Cloud Storage pour importer les dépendances de charge de travail. Le fichier WAREHOUSE_FOLDER se trouve dans ce bucket. Le préfixe d'URI gs:// du bucket n'est pas obligatoire. Vous pouvez spécifier le chemin d'accès ou le nom du bucket, par exemple mybucketname1.

    Pour en savoir plus sur l'envoi de jobs Spark par lot, consultez Exécuter une charge de travail Spark par lot.

PySpark

Pour envoyer un job par lot PySpark, procédez comme suit.

  1. Créez un fichier Python avec les commandes PySpark que vous souhaitez exécuter dans BigLake Metastore.

    Par exemple, la commande suivante configure un environnement Spark pour interagir avec les tables Iceberg stockées dans le metastore BigLake. La commande crée ensuite un espace de noms et une table Iceberg dans cet espace de noms.

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
    .appName("BigLake Metastore Iceberg") \
    .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \
    .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \
    .getOrCreate()
    
    spark.sql("USE `CATALOG_NAME`;")
    spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")
    spark.sql("USE NAMESPACE_NAME;")
    spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';")

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du Google Cloud projet dans lequel exécuter le job par lot.
    • LOCATION : emplacement des ressources BigQuery.
    • CATALOG_NAME : nom du catalogue qui fait référence à votre table Spark.
    • TABLE_NAME : nom de table pour votre table Spark.
    • WAREHOUSE_DIRECTORY : URI du dossier Cloud Storage dans lequel votre entrepôt de données est stocké.
    • NAMESPACE_NAME : nom de l'espace de noms qui fait référence à votre table Spark.
  2. Envoyez le job par lot à l'aide de la commande gcloud dataproc batches submit pyspark.

    gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \
     --version=2.2 \
     --project=PROJECT_ID \
     --region=REGION \
     --deps-bucket=BUCKET_PATH \
     --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY"

    Remplacez les éléments suivants :

    • PYTHON_SCRIPT_PATH : chemin d'accès au script Python utilisé par le job par lot.
    • PROJECT_ID : ID du Google Cloud projet dans lequel exécuter le job par lot.
    • REGION : région dans laquelle votre charge de travail est exécutée.
    • BUCKET_PATH : emplacement du bucket Cloud Storage pour importer les dépendances de charge de travail. Le préfixe d'URI gs:// du bucket n'est pas obligatoire. Vous pouvez spécifier le chemin d'accès ou le nom du bucket, par exemple mybucketname1.

    Pour en savoir plus sur l'envoi de jobs par lot PySpark, consultez la documentation de référence de gcloud pour PySpark.

Étapes suivantes