Bagikan melalui


Membuat kluster, notebook, dan pekerjaan dengan Terraform

Artikel ini memperlihatkan cara menggunakan penyedia Databricks Terraform untuk membuat kluster, buku catatan, dan pekerjaan di ruang kerja Azure Databricks yang sudah ada.

Artikel ini adalah pendamping artikel memulai Azure Databricks berikut ini:

Anda juga dapat menyesuaikan konfigurasi Terraform dalam artikel ini untuk membuat kluster, buku catatan, dan pekerjaan kustom di ruang kerja Anda.

Langkah 1: Membuat dan mengonfigurasi proyek Terraform

  1. Buat proyek Terraform dengan mengikuti instruksi di bagian Persyaratan dari artikel gambaran umum penyedia Databricks Terraform.

  2. Untuk membuat kluster, buat file bernama cluster.tf, dan tambahkan konten berikut ke file. Konten ini membuat kluster dengan jumlah sumber daya terkecil yang diizinkan. Kluster ini menggunakan versi Databricks Runtime Long Term Support (LTS) terakhir.

    Untuk kluster yang berfungsi dengan Unity Catalog:

    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
    }
    

    Untuk kluster semua tujuan:

    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
    }
    
  3. Untuk membuat kluster, buat file lain bernama cluster.auto.tfvars, dan tambahkan konten berikut ke file. File ini berisi nilai variabel untuk menyesuaikan kluster. Ganti nilai tempat penampung dengan nilai Anda sendiri.

    Untuk kluster yang berfungsi dengan Unity Catalog:

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    cluster_data_security_mode      = "SINGLE_USER"
    

    Untuk kluster semua tujuan:

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  4. Untuk membuat buku catatan, buat file lain bernama notebook.tf, dan tambahkan konten berikut ke file:

    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
    }
    
  5. Jika Anda membuat kluster, simpan kode buku catatan berikut ke file di direktori yang sama dengan notebook.tf file:

    Di bawah ini adalah file notebook-getting-started-etl-quick-start.py buku catatan Python untuk panduan mulai cepat ETL:

    # Databricks notebook source
    # Import functions
    from pyspark.sql.functions import col, current_timestamp
    
    # Define variables used in code below
    file_path = "/databricks-datasets/structured-streaming/events"
    username = spark.sql("SELECT regexp_replace(current_user(), '[^a-zA-Z0-9]', '_')").first()[0]
    table_name = f"{username}_etl_quickstart"
    checkpoint_path = f"/tmp/{username}/_checkpoint/etl_quickstart"
    
    # Clear out data from previous demo execution
    spark.sql(f"DROP TABLE IF EXISTS {table_name}")
    dbutils.fs.rm(checkpoint_path, True)
    
    # 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)
      .toTable(table_name))
    
    # COMMAND ----------
    
    df = spark.read.table(table_name)
    
    # COMMAND ----------
    
    display(df)
    

    Untuk buku catatan Python untuk Mulai Cepat: Jalankan pekerjaan Spark di Ruang Kerja Azure Databricks menggunakan portal Azure, file bernama notebook-quickstart-create-databricks-workspace-portal.py dengan konten berikut:

    # 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'))
    
  6. Jika Anda membuat buku catatan, buat file lain bernama notebook.auto.tfvars, dan tambahkan konten berikut ke file. File ini berisi nilai variabel untuk menyesuaikan konfigurasi buku catatan.

    Untuk notebook Python untuk Memulai: Muat data ke dalam tabel streaming:

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started-etl-quick-start.py"
    notebook_language     = "PYTHON"
    

    Untuk buku catatan Python untuk Mulai Cepat: Jalankan pekerjaan Spark di Ruang Kerja Azure Databricks menggunakan portal Azure:

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-quickstart-create-databricks-workspace-portal.py"
    notebook_language     = "PYTHON"
    
  7. Jika Anda membuat buku catatan, di ruang kerja Azure Databricks Anda, pastikan untuk menyiapkan persyaratan apa pun agar buku catatan berhasil dijalankan, dengan merujuk pada instruksi berikut untuk:

  8. Untuk membuat pekerjaan, buat file lain bernama job.tf, dan tambahkan konten berikut ke file. Konten ini membuat pekerjaan untuk menjalankan buku catatan.

    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
    }
    
  9. Jika Anda membuat pekerjaan, buat file lain bernama job.auto.tfvars, dan tambahkan konten berikut ke file . File ini berisi nilai variabel untuk menyesuaikan konfigurasi pekerjaan.

    job_name = "My Job"
    task_key = "my_task"
    

Langkah 2: Jalankan konfigurasi

Dalam langkah ini, Anda menjalankan konfigurasi Terraform untuk menyebarkan kluster, buku catatan, dan pekerjaan ke ruang kerja Azure Databricks Anda.

  1. Periksa untuk melihat apakah konfigurasi Terraform Anda valid dengan menjalankan terraform validate perintah. Jika ada kesalahan yang dilaporkan, perbaiki, dan jalankan perintah lagi.

    terraform validate
    
  2. Periksa untuk melihat apa yang akan dilakukan Terraform di ruang kerja Anda, sebelum Terraform benar-benar melakukannya, dengan menjalankan terraform plan perintah.

    terraform plan
    
  3. Sebarkan kluster, buku catatan, dan pekerjaan ke ruang kerja Anda dengan menjalankan terraform apply perintah . Saat diminta untuk menyebarkan, ketik yes dan tekan Enter.

    terraform apply
    

    Terraform menyebarkan sumber daya yang ditentukan dalam proyek Anda. Menyebarkan sumber daya ini (terutama kluster) dapat memakan waktu beberapa menit.

Langkah 3: Jelajahi hasilnya

  1. Jika Anda membuat kluster, dalam output terraform apply perintah, salin tautan di samping cluster_url, dan tempelkan ke bilah alamat browser web Anda.

  2. Jika Anda membuat buku catatan, dalam output terraform apply perintah, salin tautan di samping notebook_url, dan tempelkan ke bilah alamat browser web Anda.

    Catatan

    Sebelum Anda menggunakan buku catatan, Anda mungkin perlu mengkustomisasi kontennya. Lihat dokumentasi terkait tentang cara mengkustomisasi buku catatan.

  3. Jika Anda membuat pekerjaan, dalam output terraform apply perintah, salin tautan di samping job_url, dan tempelkan ke bilah alamat browser web Anda.

    Catatan

    Sebelum menjalankan buku catatan, Anda mungkin perlu mengkustomisasi kontennya. Lihat tautan di awal artikel ini untuk dokumentasi terkait tentang cara mengkustomisasi buku catatan.

  4. Jika Anda membuat pekerjaan, jalankan pekerjaan sebagai berikut:

    1. Klik Jalankan sekarang di halaman pekerjaan.
    2. Setelah pekerjaan selesai berjalan, untuk melihat hasil eksekusi pekerjaan, dalam daftar Selesai berjalan (60 hari terakhir) di halaman pekerjaan, klik entri waktu terbaru di kolom Waktu mulai. Panel Output memperlihatkan hasil menjalankan kode buku catatan.

Langkah 4: Bersihkan

Dalam langkah ini, Anda menghapus sumber daya sebelumnya dari ruang kerja Anda.

  1. Periksa untuk melihat apa yang akan dilakukan Terraform di ruang kerja Anda, sebelum Terraform benar-benar melakukannya, dengan menjalankan terraform plan perintah.

    terraform plan
    
  2. Hapus kluster, buku catatan, dan pekerjaan dari ruang kerja Anda dengan menjalankan terraform destroy perintah . Saat diminta untuk menghapus, ketik yes dan tekan Enter.

    terraform destroy
    

    Terraform menghapus sumber daya yang ditentukan dalam proyek Anda.