Vytváření clusterů, poznámkových bloků a úloh pomocí Terraformu
Tento článek ukazuje, jak pomocí poskytovatele Terraformu Databricks vytvořit cluster, poznámkový blok a úlohu v existujícím pracovním prostoru Azure Databricks.
Tento článek je společníkem následujících článků začínáme s Azure Databricks:
Kurz: Spuštění kompletního analytického kanálu lakehouse, který používá cluster, který funguje s katalogem Unity, poznámkovým blokem Pythonu a úlohou pro spuštění poznámkového bloku.
Rychlý start: Spuštění úlohy Sparku v pracovním prostoru Azure Databricks pomocí webu Azure Portal, který používá cluster pro obecné účely a poznámkový blok Pythonu.
Konfigurace Terraformu v tomto článku můžete také přizpůsobit tak, aby ve vašich pracovních prostorech vytvářely vlastní clustery, poznámkové bloky a úlohy.
Krok 1: Vytvoření a konfigurace projektu Terraformu
Podle pokynů v části Požadavky v článku s přehledem zprostředkovatele Databricks Terraform vytvořte projekt Terraformu.
Pokud chcete vytvořit cluster, vytvořte soubor s názvem
cluster.tf
a přidejte do souboru následující obsah. Tento obsah vytvoří cluster s nejmenším povoleným množstvím prostředků. Tento cluster používá nejnovější verzi dlouhodobé podpory modulu Databricks Runtime (LTS).Cluster, který funguje s katalogem Unity:
variable "cluster_name" {} variable "cluster_autotermination_minutes" {} variable "cluster_num_workers" {} variable "cluster_data_security_mode" {} # Create the cluster with the "smallest" amount # of resources allowed. data "databricks_node_type" "smallest" { local_disk = true } # Use the latest Databricks Runtime # Long Term Support (LTS) version. data "databricks_spark_version" "latest_lts" { long_term_support = true } resource "databricks_cluster" "this" { cluster_name = var.cluster_name node_type_id = data.databricks_node_type.smallest.id spark_version = data.databricks_spark_version.latest_lts.id autotermination_minutes = var.cluster_autotermination_minutes num_workers = var.cluster_num_workers data_security_mode = var.cluster_data_security_mode } output "cluster_url" { value = databricks_cluster.this.url }
Pro cluster pro všechny účely:
variable "cluster_name" { description = "A name for the cluster." type = string default = "My Cluster" } variable "cluster_autotermination_minutes" { description = "How many minutes before automatically terminating due to inactivity." type = number default = 60 } variable "cluster_num_workers" { description = "The number of workers." type = number default = 1 } # Create the cluster with the "smallest" amount # of resources allowed. data "databricks_node_type" "smallest" { local_disk = true } # Use the latest Databricks Runtime # Long Term Support (LTS) version. data "databricks_spark_version" "latest_lts" { long_term_support = true } resource "databricks_cluster" "this" { cluster_name = var.cluster_name node_type_id = data.databricks_node_type.smallest.id spark_version = data.databricks_spark_version.latest_lts.id autotermination_minutes = var.cluster_autotermination_minutes num_workers = var.cluster_num_workers } output "cluster_url" { value = databricks_cluster.this.url }
Pokud chcete vytvořit cluster, vytvořte další soubor s názvem
cluster.auto.tfvars
a přidejte do souboru následující obsah. Tento soubor obsahuje proměnné hodnoty pro přizpůsobení clusteru. Zástupné hodnoty nahraďte vlastními hodnotami.Cluster, který funguje s katalogem Unity:
cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1 cluster_data_security_mode = "SINGLE_USER"
Pro cluster pro všechny účely:
cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Pokud chcete vytvořit poznámkový blok, vytvořte další soubor s názvem
notebook.tf
a přidejte do souboru následující obsah:variable "notebook_subdirectory" { description = "A name for the subdirectory to store the notebook." type = string default = "Terraform" } variable "notebook_filename" { description = "The notebook's filename." type = string } variable "notebook_language" { description = "The language of the notebook." type = string } resource "databricks_notebook" "this" { path = "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" language = var.notebook_language source = "./${var.notebook_filename}" } output "notebook_url" { value = databricks_notebook.this.url }
Pokud vytváříte cluster, uložte následující kód poznámkového bloku do souboru ve stejném adresáři jako soubor
notebook.tf
:Pro poznámkový blok Pythonu pro kurz: Spusťte ucelený analytický kanál Lakehouse s názvem
notebook-getting-started-lakehouse-e2e.py
s následujícím obsahem:# Databricks notebook source external_location = "<your_external_location>" catalog = "<your_catalog>" dbutils.fs.put(f"{external_location}/foobar.txt", "Hello world!", True) display(dbutils.fs.head(f"{external_location}/foobar.txt")) dbutils.fs.rm(f"{external_location}/foobar.txt") display(spark.sql(f"SHOW SCHEMAS IN {catalog}")) # COMMAND ---------- from pyspark.sql.functions import col # Set parameters for isolation in workspace and reset demo username = spark.sql("SELECT regexp_replace(current_user(), '[^a-zA-Z0-9]', '_')").first()[0] database = f"{catalog}.e2e_lakehouse_{username}_db" source = f"{external_location}/e2e-lakehouse-source" table = f"{database}.target_table" checkpoint_path = f"{external_location}/_checkpoint/e2e-lakehouse-demo" spark.sql(f"SET c.username='{username}'") spark.sql(f"SET c.database={database}") spark.sql(f"SET c.source='{source}'") spark.sql("DROP DATABASE IF EXISTS ${c.database} CASCADE") spark.sql("CREATE DATABASE ${c.database}") spark.sql("USE ${c.database}") # Clear out data from previous demo execution dbutils.fs.rm(source, True) dbutils.fs.rm(checkpoint_path, True) # Define a class to load batches of data to source class LoadData: def __init__(self, source): self.source = source def get_date(self): try: df = spark.read.format("json").load(source) except: return "2016-01-01" batch_date = df.selectExpr("max(distinct(date(tpep_pickup_datetime))) + 1 day").first()[0] if batch_date.month == 3: raise Exception("Source data exhausted") return batch_date def get_batch(self, batch_date): return ( spark.table("samples.nyctaxi.trips") .filter(col("tpep_pickup_datetime").cast("date") == batch_date) ) def write_batch(self, batch): batch.write.format("json").mode("append").save(self.source) def land_batch(self): batch_date = self.get_date() batch = self.get_batch(batch_date) self.write_batch(batch) RawData = LoadData(source) # COMMAND ---------- RawData.land_batch() # COMMAND ---------- # Import functions from pyspark.sql.functions import col, current_timestamp # Configure Auto Loader to ingest JSON data to a Delta table (spark.readStream .format("cloudFiles") .option("cloudFiles.format", "json") .option("cloudFiles.schemaLocation", checkpoint_path) .load(file_path) .select("*", col("_metadata.file_path").alias("source_file"), current_timestamp().alias("processing_time")) .writeStream .option("checkpointLocation", checkpoint_path) .trigger(availableNow=True) .option("mergeSchema", "true") .toTable(table)) # COMMAND ---------- df = spark.read.table(table_name) # COMMAND ---------- display(df)
Poznámkový blok Pythonu pro rychlý start: Spuštění úlohy Sparku v pracovním prostoru Azure Databricks pomocí webu Azure Portal, souboru s názvem
notebook-quickstart-create-databricks-workspace-portal.py
s následujícím obsahem:# Databricks notebook source blob_account_name = "azureopendatastorage" blob_container_name = "citydatacontainer" blob_relative_path = "Safety/Release/city=Seattle" blob_sas_token = r"" # COMMAND ---------- wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name,blob_relative_path) spark.conf.set('fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name), blob_sas_token) print('Remote blob path: ' + wasbs_path) # COMMAND ---------- df = spark.read.parquet(wasbs_path) print('Register the DataFrame as a SQL temporary view: source') df.createOrReplaceTempView('source') # COMMAND ---------- print('Displaying top 10 rows: ') display(spark.sql('SELECT * FROM source LIMIT 10'))
Pokud vytváříte poznámkový blok, vytvořte další soubor s názvem
notebook.auto.tfvars
a přidejte do souboru následující obsah. Tento soubor obsahuje hodnoty proměnných pro přizpůsobení konfigurace poznámkového bloku.Poznámkový blok Pythonu pro kurz: Spuštění kompletního analytického kanálu Lakehouse:
notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started-lakehouse-e2e.py" notebook_language = "PYTHON"
Poznámkový blok Pythonu pro rychlý start: Spuštění úlohy Sparku v pracovním prostoru Azure Databricks pomocí webu Azure Portal:
notebook_subdirectory = "Terraform" notebook_filename = "notebook-quickstart-create-databricks-workspace-portal.py" notebook_language = "PYTHON"
Pokud vytváříte poznámkový blok, nezapomeňte v pracovním prostoru Azure Databricks nastavit všechny požadavky na úspěšné spuštění poznámkového bloku podle následujících pokynů:
- Poznámkový blok Pythonu pro kurz: Spuštění kompletního analytického kanálu Lakehouse
- Poznámkový blok Pythonu pro rychlý start: Spuštění úlohy Sparku v pracovním prostoru Azure Databricks pomocí webu Azure Portal
Chcete-li vytvořit úlohu, vytvořte další soubor s názvem
job.tf
a přidejte do souboru následující obsah. Tento obsah vytvoří úlohu pro spuštění poznámkového bloku.variable "job_name" { description = "A name for the job." type = string default = "My Job" } variable "task_key" { description = "A name for the task." type = string default = "my_task" } resource "databricks_job" "this" { name = var.job_name task { task_key = var.task_key existing_cluster_id = databricks_cluster.this.cluster_id notebook_task { notebook_path = databricks_notebook.this.path } } email_notifications { on_success = [ data.databricks_current_user.me.user_name ] on_failure = [ data.databricks_current_user.me.user_name ] } } output "job_url" { value = databricks_job.this.url }
Pokud vytváříte úlohu, vytvořte další soubor s názvem
job.auto.tfvars
a přidejte do souboru následující obsah. Tento soubor obsahuje hodnotu proměnné pro přizpůsobení konfigurace úlohy.job_name = "My Job" task_key = "my_task"
Krok 2: Spuštění konfigurací
V tomto kroku spustíte konfigurace Terraformu pro nasazení clusteru, poznámkového bloku a úlohy do pracovního prostoru Azure Databricks.
Spuštěním příkazu zkontrolujte, jestli jsou konfigurace Terraformu
terraform validate
platné. Pokud jsou nahlášeny nějaké chyby, opravte je a spusťte příkaz znovu.terraform validate
Spuštěním
terraform plan
příkazu zkontrolujte, co Bude Terraform ve vašem pracovním prostoru dělat. Teprve pak terraform skutečně provede.terraform plan
Spuštěním
terraform apply
příkazu nasaďte cluster, poznámkový blok a úlohu do pracovního prostoru. Po zobrazení výzvy k nasazení zadejteyes
a stiskněte Enter.terraform apply
Terraform nasadí prostředky zadané v projektu. Nasazení těchto prostředků (zejména clusteru) může trvat několik minut.
Krok 3: Prozkoumání výsledků
Pokud jste vytvořili cluster, zkopírujte ve výstupu
terraform apply
příkazu odkaz vedlecluster_url
něj a vložte ho do adresního řádku webového prohlížeče.Pokud jste vytvořili poznámkový blok, zkopírujte ve výstupu
terraform apply
příkazu odkaz vedlenotebook_url
něj a vložte ho do adresního řádku webového prohlížeče.Poznámka:
Než poznámkový blok použijete, možná budete muset přizpůsobit jeho obsah. Informace o přizpůsobení poznámkového bloku najdete v související dokumentaci.
Pokud jste vytvořili úlohu, zkopírujte ve výstupu
terraform apply
příkazu odkaz vedlejob_url
něj a vložte ho do adresního řádku webového prohlížeče.Poznámka:
Než poznámkový blok spustíte, budete možná muset přizpůsobit jeho obsah. Další informace o přizpůsobení poznámkového bloku najdete na odkazech na začátku tohoto článku.
Pokud jste vytvořili úlohu, spusťte úlohu následujícím způsobem:
- Na stránce úlohy klikněte na Spustit .
- Jakmile se úloha dokončí, zobrazí se výsledky spuštění úlohy v seznamu Dokončená spuštění (posledních 60 dnů) na stránce úlohy, klikněte na poslední položku času ve sloupci Čas zahájení . V podokně Výstup se zobrazí výsledek spuštění kódu poznámkového bloku.
Krok 4: Vyčištění
V tomto kroku odstraníte předchozí prostředky z pracovního prostoru.
Spuštěním
terraform plan
příkazu zkontrolujte, co Bude Terraform ve vašem pracovním prostoru dělat. Teprve pak terraform skutečně provede.terraform plan
Spuštěním
terraform destroy
příkazu odstraňte cluster, poznámkový blok a úlohu z pracovního prostoru. Po zobrazení výzvy k odstranění zadejteyes
a stiskněte Enter.terraform destroy
Terraform odstraní prostředky zadané v projektu.