开始
加载和管理数据
处理数据
政府
参考和资源
2023年2月21日更新
给我们反馈
方法的使用Databricks Terraform提供商要创建集群,一个笔记本,以及工作在现有的数据库里工作空间.
本文是以下Databricks入门文章的配套文章:
在Databricks上运行您的第一个ETL工作负载,它使用一个通用集群、一个Python笔记本和一个运行笔记本的作业。
教程:使用笔记本查询数据它使用一个通用集群和一个SQL笔记本。
教程:运行端到端的湖屋分析管道它使用一个与Unity Catalog一起工作的集群、一个Python笔记本和一个运行笔记本的作业。
您还可以调整本文中的Terraform配置,在您的工作空间中创建自定义集群、笔记本和作业。
一个Databricks工作区。
在你的本地开发机器上,你必须有:
Terraform命令行。看到下载起程拓殖在Terraform网站上。
下列其中一项:
Databricks命令行界面(Databricks CLI),配置您的Databricks工作空间实例URL例如,https://dbc-1234567890123456.cloud.www.neidfyre.com,以及你的数据库个人访问令牌,通过跑步砖配置——令牌.看到设置CLI而且设置身份验证.
https://dbc-1234567890123456.cloud.www.neidfyre.com
砖配置——令牌
请注意
作为安全最佳实践,当使用自动化工具、系统、脚本和应用程序进行身份验证时,Databricks建议您使用属于的访问令牌服务主体而不是工作区用户。要为服务主体创建访问令牌,请参见管理服务主体的访问令牌.
下面两个数据库环境变量:
DATABRICKS_HOST,设置为“数据库”的值工作空间实例URL例如,https://dbc-1234567890123456.cloud.www.neidfyre.com
DATABRICKS_HOST
DATABRICKS_TOKEN,设置为“数据库”的值个人访问令牌.另请参阅管理个人访问令牌.
DATABRICKS_TOKEN
要设置这些环境变量,请参阅操作系统的文档。
在这一步中,您将设置一个Terraform项目,以定义Terraform与您的工作区进行身份验证的设置。您还可以定义Terraform部署到您的工作区的资源的设置。
创建一个空目录,然后切换到它。此目录包含Terraform项目文件。(每一组单独的Terraform项目文件必须在它自己的父目录中。)要做到这一点,在您的终端或PowerShell中,运行如下命令:
mkdir terraform_cluster_notebook_job& &cdterraform_cluster_notebook_job
在这个空目录中,创建一个名为auth.tf,并在文件中添加如下内容。此配置初始化Databricks Terraform提供程序并使用您的工作空间验证Terraform。
auth.tf
使用Databricks命令行配置文件进行认证时,需要添加以下内容:
变量“databricks_connection_profile”{描述=要使用的Databricks连接配置文件的名称。类型=字符串}#初始化Databricks Terraform提供程序起程拓殖{required_providers{砖={源=“砖/砖”}}}#使用Databricks CLI认证。提供者“砖”{配置文件=var.databricks_connection_profile}#检索当前用户的信息。数据“databricks_current_user”“我”{}
如果要使用环境变量进行身份验证,请添加以下内容:
#初始化Databricks Terraform提供程序起程拓殖{required_providers{砖={源=“砖/砖”}}}使用环境变量进行身份验证。提供者“砖”{}#检索当前用户的信息。数据“databricks_current_user”“我”{}
创建另一个名为auth.auto.tfvars,并在文件中添加如下内容。该文件包含用于在工作空间中验证Terraform的变量值。将占位符值替换为您自己的值。
auth.auto.tfvars
databricks_connection_profile=“默认”
要使用环境变量进行身份验证,不需要auth.auto.tfvars文件。
运行起程拓殖初始化命令。这个命令通过创建额外的帮助文件和下载必要的Terraform模块来初始化Terraform项目。
起程拓殖初始化
起程拓殖init
如果您正在创建集群,请创建另一个名为cluster.tf,并在文件中添加如下内容。这些内容创建了一个拥有最少资源的集群。该集群使用最新的Databricks Runtime Long Term Support (LTS)版本。
cluster.tf
对于使用Unity Catalog的集群:
变量“cluster_name”{}变量“cluster_autotermination_minutes”{}变量“cluster_num_workers”{}变量“cluster_data_security_mode”{}#创建数量最小的集群#允许的资源。数据“databricks_node_type”“最小”{local_disk=真正的}使用最新的Databricks Runtime#长期支持(LTS)版本。数据“databricks_spark_version”“latest_lts”{long_term_support=真正的}资源“databricks_cluster”“这”{cluster_name=var.cluster_namenode_type_id=数据.databricks_node_type.最小的.idspark_version=数据.databricks_spark_version.latest_lts.idautotermination_minutes=var.cluster_autotermination_minutesnum_workers=var.cluster_num_workersdata_security_mode=var.cluster_data_security_mode}输出“cluster_url”{价值=databricks_cluster.这.url}
对于通用集群:
变量“cluster_name”{描述=“集群的名称。”类型=字符串默认的=“我的集群”}变量“cluster_autotermination_minutes”{描述="多少分钟后由于不活动而自动终止"类型=数量默认的=60}变量“cluster_num_workers”{描述=“工人的数量。”类型=数量默认的=1}#创建数量最小的集群#允许的资源。数据“databricks_node_type”“最小”{local_disk=真正的}使用最新的Databricks Runtime#长期支持(LTS)版本。数据“databricks_spark_version”“latest_lts”{long_term_support=真正的}资源“databricks_cluster”“这”{cluster_name=var.cluster_namenode_type_id=数据.databricks_node_type.最小的.idspark_version=数据.databricks_spark_version.latest_lts.idautotermination_minutes=var.cluster_autotermination_minutesnum_workers=var.cluster_num_workers}输出“cluster_url”{价值=databricks_cluster.这.url}
如果您正在创建集群,请创建另一个名为cluster.auto.tfvars,并在文件中添加如下内容。该文件包含用于自定义集群的变量值。将占位符值替换为您自己的值。
cluster.auto.tfvars
cluster_name=“我的集群”cluster_autotermination_minutes=60cluster_num_workers=1cluster_data_security_mode=“SINGLE_USER”
cluster_name=“我的集群”cluster_autotermination_minutes=60cluster_num_workers=1
如果您正在创建一个笔记本,请创建另一个名为notebook.tf,并在文件中添加如下内容:
notebook.tf
变量“notebook_subdirectory”{描述="用于存储笔记本的子目录的名称。"类型=字符串默认的=“起程拓殖”}变量“notebook_filename”{描述=“笔记本的文件名。”类型=字符串}变量“notebook_language”{描述=“笔记本的语言。”类型=字符串}资源“databricks_notebook”“这”{路径=" ${data.databricks_current_user.me.home}美元/{var.notebook_subdirectory}美元/{var.notebook_filename}"语言=var.notebook_language源=”。/ ${var.notebook_filename}"}输出“notebook_url”{价值=databricks_notebook.这.url}
将以下笔记本代码保存到与notebook.tf文件:
适用于Python笔记本在Databricks上运行您的第一个ETL工作负载,一个名为notebook-getting-started-etl-quick-start.py其内容如下:
notebook-getting-started-etl-quick-start.py
# Databricks笔记本源代码#导入函数从pyspark.sql.functions进口input_file_name,current_timestamp#定义下面代码中使用的变量file_path=“/ databricks-datasets / structured-streaming /事件”用户名=火花.sql(的“选择regexp_replace (current_user (), [^ a-zA-Z0-9)”,“_”)”).第一个() (0]table_name=f"{用户名}_etl_quickstart”checkpoint_path=f“/ tmp /{用户名}/ _checkpoint / etl_quickstart”清除之前演示执行的数据火花.sql(f如果存在则删除表{table_name}")dbutils.fs.rm(checkpoint_path,真正的)#配置自动加载器摄取JSON数据到Delta表(火花.readStream.格式(“cloudFiles”).选项(“cloudFiles.format”,“json”).选项(“cloudFiles.schemaLocation”,checkpoint_path).负载(file_path).选择(“*”,input_file_name().别名(“source_file”),current_timestamp().别名(“processing_time”)).writeStream.选项(“checkpointLocation”,checkpoint_path).触发(availableNow=真正的).toTable(table_name))#命令----------df=火花.读.表格(table_name)#命令----------显示(df)
用于SQL笔记本教程:使用笔记本查询数据,一个名为notebook-getting-started-quick-start.sql其内容如下:
notebook-getting-started-quick-start.sql
--砖笔记本源--魔法%python--魔法钻石=(火花.读--魔法.格式(“csv”)--魔法.选项(“头”,“真正的”)--魔法.选项(“inferSchema”,“真正的”)--魔法.负载(“/ databricks-datasets / Rdatasets /数据- 001 / csv / ggplot2 / diamonds.csv”)--魔法)--魔法--魔法钻石.写.格式(“δ”).保存(“/ mnt /δ/钻石”)--命令----------下降表格如果存在钻石;创建表格钻石使用δ位置“/ mnt /δ/钻石”--命令----------选择颜色,avg(价格)作为价格从钻石集团通过颜色订单通过颜色
适用于Python笔记本教程:运行端到端的湖屋分析管道,一个名为notebook-getting-started-lakehouse-e2e.py其内容如下:
notebook-getting-started-lakehouse-e2e.py
# Databricks笔记本源代码external_location=“< your_external_location >”目录=“< your_catalog >”dbutils.fs.把(f"{external_location}/ foobar.txt”,“Hello world !”,真正的)显示(dbutils.fs.头(f"{external_location}/ foobar.txt”))dbutils.fs.rm(f"{external_location}/ foobar.txt”)显示(火花.sql(f显示模式{目录}"))#命令----------从pyspark.sql.functions进口上校#设置工作区隔离参数并重置演示用户名=火花.sql(的“选择regexp_replace (current_user (), [^ a-zA-Z0-9)”,“_”)”).第一个() (0]数据库=f"{目录}.e2e_lakehouse_{用户名}_db”源=f"{external_location}/ e2e-lakehouse-source”表格=f"{数据库}.target_table”checkpoint_path=f"{external_location}/ _checkpoint / e2e-lakehouse-demo”火花.sql(f“c.username = '{用户名}’”)火花.sql(f“设置c.database ={数据库}")火花.sql(f“c.source = '{源}’”)火花.sql(drop database if exists $ .{c.database}级联”)火花.sql(创建数据库{c.database}")火花.sql(“使用美元{c.database}")清除之前演示执行的数据dbutils.fs.rm(源,真正的)dbutils.fs.rm(checkpoint_path,真正的)定义一个类来加载批量数据到源代码类LoadData:def__init__(自我,源):自我.源=源defget_date(自我):试一试:df=火花.读.格式(“json”).负载(源)除了:返回“2016-01-01”batch_date=df.selectExpr("max(distinct(date(tpep_pickup_datetime))) + 1天").第一个() (0]如果batch_date.月= =3.:提高异常(“源数据耗尽”)返回batch_datedefget_batch(自我,batch_date):返回(火花.表格(“samples.nyctaxi.trips”).过滤器(上校(“tpep_pickup_datetime”).投(“日期”)= =batch_date))defwrite_batch(自我,批处理):批处理.写.格式(“json”).模式(“添加”).保存(自我.源)defland_batch(自我):batch_date=自我.get_date()批处理=自我.get_batch(batch_date)自我.write_batch(批处理)RawData=LoadData(源)#命令----------RawData.land_batch()#命令----------#导入函数从pyspark.sql.functions进口input_file_name,current_timestamp#配置自动加载器摄取JSON数据到Delta表(火花.readStream.格式(“cloudFiles”).选项(“cloudFiles.format”,“json”).选项(“cloudFiles.schemaLocation”,checkpoint_path).负载(file_path).选择(“*”,input_file_name().别名(“source_file”),current_timestamp().别名(“processing_time”)).writeStream.选项(“checkpointLocation”,checkpoint_path).触发(availableNow=真正的).选项(“mergeSchema”,“真正的”).toTable(表格))#命令----------df=火花.读.表格(table_name)#命令----------显示(df)
如果您正在创建笔记本,请创建另一个名为notebook.auto.tfvars,并在文件中添加如下内容。该文件包含用于自定义笔记本配置的变量值。
notebook.auto.tfvars
适用于Python笔记本在Databricks上运行您的第一个ETL工作负载:
notebook_subdirectory=“起程拓殖”notebook_filename=“notebook-getting-started-etl-quick-start.py”notebook_language=“巨蟒”
用于SQL笔记本教程:使用笔记本查询数据:
notebook_subdirectory=“起程拓殖”notebook_filename=“notebook-getting-started-quickstart.sql”notebook_language=“SQL”
适用于Python笔记本教程:运行端到端的湖屋分析管道:
notebook_subdirectory=“起程拓殖”notebook_filename=“notebook-getting-started-lakehouse-e2e.py”notebook_language=“巨蟒”
如果您正在创建一个笔记本,在Databricks工作空间中,请确保设置了笔记本成功运行的所有要求,具体操作请参见以下说明:
Python笔记本在Databricks上运行您的第一个ETL工作负载
SQL笔记本教程:使用笔记本查询数据
Python笔记本教程:运行端到端的湖屋分析管道
如果您正在创建作业,请创建另一个名为job.tf,并在文件中添加如下内容。这些内容创建了一个运行笔记本的作业。
job.tf
变量“job_name”{描述=“工作的名字。”类型=字符串默认的=“我的工作”}资源“databricks_job”“这”{的名字=var.job_nameexisting_cluster_id=databricks_cluster.这.cluster_idnotebook_task{notebook_path=databricks_notebook.这.路径}email_notifications{on_success=[数据.databricks_current_user.我.user_name]on_failure=[数据.databricks_current_user.我.user_name]}}输出“job_url”{价值=databricks_job.这.url}
如果您正在创建作业,请创建另一个名为job.auto.tfvars,并在文件中添加如下内容。此文件包含用于自定义作业配置的变量值。
job.auto.tfvars
job_name=“我的工作”
在这一步中,您将运行Terraform配置,将集群、笔记本和作业部署到Databricks工作区中。
运行命令查看Terraform配置是否有效起程拓殖验证命令。如果报错,请修复错误后重新执行命令。
起程拓殖验证
在Terraform实际执行之前,检查Terraform将在工作空间中执行什么起程拓殖计划命令。
起程拓殖计划
命令将集群、笔记本和作业部署到工作区中起程拓殖应用命令。当提示部署时,键入是的并按输入.
起程拓殖应用
是的
Terraform部署项目中指定的资源。部署这些资源(尤其是集群)可能需要几分钟时间。
的输出中,如果您创建了集群起程拓殖应用命令,复制旁边的链接cluster_url,并将其粘贴到浏览器的地址栏中。
cluster_url
如果创建了笔记本,则在输出中起程拓殖应用命令,复制旁边的链接notebook_url,并将其粘贴到浏览器的地址栏中。
notebook_url
在使用笔记本之前,您可能需要自定义它的内容。关于如何定制笔记本,请参阅相关文档。
如果创建了作业,则在输出起程拓殖应用命令,复制旁边的链接job_url,并将其粘贴到浏览器的地址栏中。
job_url
在运行笔记本之前,您可能需要自定义它的内容。有关如何定制笔记本的相关文档,请参阅本文开头的链接。
如果您已经创建了job,请执行如下命令运行job。
点击现在运行在招聘页面。
作业运行完成后,要查看作业运行的结果,请在完成次数(过去60天)列表中的时间项,单击开始时间列。的输出窗格显示运行笔记本代码的结果。
在这一步中,您将从您的工作区中删除前面的资源。
命令从工作区中删除集群、笔记本和作业起程拓殖摧毁命令。当提示删除时,键入是的并按输入.
起程拓殖摧毁
Terraform删除项目中指定的资源。