إنشاء أنظمة مجموعات ودفاتر ملاحظات ومهام باستخدام Terraform
توضح هذه المقالة كيفية استخدام موفر Databricks Terraform لإنشاء نظام مجموعة ودفتر ملاحظات ووظيفة في مساحة عمل Azure Databricks موجودة.
هذه المقالة هي مصاحب لمقالات بدء Azure Databricks التالية:
البرنامج التعليمي: تشغيل مسار تحليلات مستودع شامل، والذي يستخدم نظام مجموعة يعمل مع كتالوج Unity ودفتر ملاحظات Python ووظيفة لتشغيل دفتر الملاحظات.
التشغيل السريع: قم بتشغيل مهمة Spark على مساحة عمل Azure Databricks باستخدام مدخل Microsoft Azure، والذي يستخدم نظام مجموعة للأغراض العامة ودفتر ملاحظات Python.
يمكنك أيضا تكييف تكوينات Terraform في هذه المقالة لإنشاء مجموعات ودفاتر ملاحظات ومهام مخصصة في مساحات العمل الخاصة بك.
الخطوة 1: إنشاء وتكوين مشروع Terraform
إنشاء مشروع Terraform باتباع الإرشادات الواردة في قسم المتطلبات في مقالة نظرة عامة على موفر Databricks Terraform.
لإنشاء نظام مجموعة، قم بإنشاء ملف باسم
cluster.tf
، وأضف المحتوى التالي إلى الملف. ينشئ هذا المحتوى مجموعة مع أصغر قدر من الموارد المسموح بها. يستخدم هذا نظام المجموعة أحدث إصدار من Databricks Runtime Long Term Support (LTS).بالنسبة لنظام مجموعة يعمل مع كتالوج 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 }
بالنسبة لنظام مجموعة لجميع الأغراض:
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 }
لإنشاء نظام مجموعة، قم بإنشاء ملف آخر باسم
cluster.auto.tfvars
، وأضف المحتوى التالي إلى الملف. يحتوي هذا الملف على قيم متغيرة لتخصيص نظام المجموعة. استبدل قيم العنصر النائب بقيمك الخاصة.بالنسبة لنظام مجموعة يعمل مع كتالوج Unity:
cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1 cluster_data_security_mode = "SINGLE_USER"
بالنسبة لنظام مجموعة لجميع الأغراض:
cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
لإنشاء دفتر ملاحظات، قم بإنشاء ملف آخر باسم
notebook.tf
، وأضف المحتوى التالي إلى الملف: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 }
إذا كنت تقوم بإنشاء نظام مجموعة، فاحفظ التعليمة البرمجية لدفتر الملاحظات التالي إلى ملف في نفس الدليل مثل
notebook.tf
الملف:بالنسبة لدفتر ملاحظات Python الخاص بالبرنامج التعليمي: تشغيل مسار تحليلات مستودع شامل، ملف يسمى
notebook-getting-started-lakehouse-e2e.py
بالمحتويات التالية:# 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)
بالنسبة لدفتر ملاحظات Python للتشغيل السريع: قم بتشغيل مهمة Spark على مساحة عمل Azure Databricks باستخدام مدخل Microsoft Azure، وهو ملف يسمى
notebook-quickstart-create-databricks-workspace-portal.py
بالمحتويات التالية:# 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'))
إذا كنت تقوم بإنشاء دفتر ملاحظات، فبادر بإنشاء ملف آخر باسم
notebook.auto.tfvars
، وأضف المحتوى التالي إلى الملف. يحتوي هذا الملف على قيم متغيرة لتخصيص تكوين دفتر الملاحظات.بالنسبة لدفتر ملاحظات Python الخاص بالبرنامج التعليمي: تشغيل مسار تحليلات مستودع شامل:
notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started-lakehouse-e2e.py" notebook_language = "PYTHON"
لدفتر ملاحظات Python للتشغيل السريع: قم بتشغيل مهمة Spark على مساحة عمل Azure Databricks باستخدام مدخل Microsoft Azure:
notebook_subdirectory = "Terraform" notebook_filename = "notebook-quickstart-create-databricks-workspace-portal.py" notebook_language = "PYTHON"
إذا كنت تقوم بإنشاء دفتر ملاحظات، في مساحة عمل Azure Databricks، فتأكد من إعداد أي متطلبات لتشغيل دفتر الملاحظات بنجاح، بالإشارة إلى الإرشادات التالية من أجل:
- دفتر ملاحظات Python الخاص بالبرنامج التعليمي: تشغيل مسار تحليلات مستودع شامل
- دفتر ملاحظات Python للتشغيل السريع: تشغيل مهمة Spark على مساحة عمل Azure Databricks باستخدام مدخل Microsoft Azure
لإنشاء المهمة، قم بإنشاء ملف آخر باسم
job.tf
، وأضف المحتوى التالي إلى الملف. ينشئ هذا المحتوى مهمة لتشغيل دفتر الملاحظات.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 }
إذا كنت تقوم بإنشاء مهمة، فبادر بإنشاء ملف آخر باسم
job.auto.tfvars
، وأضف المحتوى التالي إلى الملف. يحتوي هذا الملف على قيمة متغيرة لتخصيص تكوين الوظيفة.job_name = "My Job" task_key = "my_task"
الخطوة 2: تشغيل التكوينات
في هذه الخطوة، يمكنك تشغيل تكوينات Terraform لنشر نظام المجموعة ودفتر الملاحظات والمهمة في مساحة عمل Azure Databricks.
تحقق لمعرفة ما إذا كانت تكوينات Terraform صالحة عن طريق تشغيل
terraform validate
الأمر. إذا تم الإبلاغ عن أي أخطاء، فقم بإصلاحها، ثم قم بتشغيل الأمر مرة أخرى.terraform validate
تحقق لمعرفة ما سيفعله Terraform في مساحة العمل الخاصة بك، قبل أن يقوم Terraform بذلك بالفعل، عن طريق تشغيل
terraform plan
الأمر .terraform plan
انشر نظام المجموعة ودفتر الملاحظات والمهمة في مساحة العمل الخاصة بك عن طريق تشغيل
terraform apply
الأمر . عند مطالبتك بالنشر، اكتبyes
واضغط على مفتاح الإدخال Enter.terraform apply
ينشر Terraform الموارد المحددة في مشروعك. قد يستغرق نشر هذه الموارد (خاصة نظام المجموعة) عدة دقائق.
الخطوة 3: استكشاف النتائج
إذا قمت بإنشاء نظام مجموعة، في إخراج
terraform apply
الأمر، انسخ الارتباط بجوارcluster_url
، والصقه في شريط عناوين مستعرض الويب الخاص بك.إذا قمت بإنشاء دفتر ملاحظات، في إخراج
terraform apply
الأمر، انسخ الارتباط الموجود بجانبnotebook_url
، والصقه في شريط عناوين مستعرض الويب.إشعار
قبل استخدام دفتر الملاحظات، قد تحتاج إلى تخصيص محتوياته. راجع الوثائق ذات الصلة حول كيفية تخصيص دفتر الملاحظات.
إذا قمت بإنشاء مهمة، في إخراج
terraform apply
الأمر، انسخ الارتباط بجوارjob_url
، والصقه في شريط عناوين مستعرض الويب الخاص بك.إشعار
قبل تشغيل دفتر الملاحظات، قد تحتاج إلى تخصيص محتوياته. راجع الارتباطات في بداية هذه المقالة للحصول على وثائق ذات صلة حول كيفية تخصيص دفتر الملاحظات.
إذا قمت بإنشاء وظيفة، فقم بتشغيل المهمة على النحو التالي:
- انقر فوق تشغيل الآن في صفحة المهمة.
- بعد انتهاء المهمة قيد التشغيل، لعرض نتائج تشغيل الوظيفة، في قائمة عمليات التشغيل المكتملة (ال 60 يوما الماضية) على صفحة المهمة، انقر فوق أحدث إدخال وقت في عمود وقت البدء. يعرض جزء Output نتيجة تشغيل التعليمات البرمجية لدفتر الملاحظات.
الخطوة 4: التنظيف
في هذه الخطوة، يمكنك حذف الموارد السابقة من مساحة العمل الخاصة بك.
تحقق لمعرفة ما سيفعله Terraform في مساحة العمل الخاصة بك، قبل أن يقوم Terraform بذلك بالفعل، عن طريق تشغيل
terraform plan
الأمر .terraform plan
احذف نظام المجموعة ودفتر الملاحظات والمهمة من مساحة العمل الخاصة بك عن طريق تشغيل
terraform destroy
الأمر . عند مطالبتك بالحذف، اكتبyes
واضغط على مفتاح الإدخال Enter.terraform destroy
يحذف Terraform الموارد المحددة في مشروعك.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ