使用 Azure 数据工厂自动化 Azure Databricks 笔记本
可以使用 Azure Databricks 中的笔记本来执行数据工程任务,例如处理数据文件以及将数据加载到表中。 如果需要将这些任务作为数据工程管道的一部分进行协调,可以使用 Azure 数据工厂。
完成此练习大约需要 40 分钟。
预配 Azure Databricks 工作区
提示:如果你已有 Azure Databricks 工作区,则可以跳过此过程并使用现有工作区。
本练习包括一个用于预配新 Azure Databricks 工作区的脚本。 该脚本会尝试在一个区域中创建高级层 Azure Databricks 工作区资源,在该区域中,Azure 订阅具有本练习所需计算核心的充足配额;该脚本假设你的用户帐户在订阅中具有足够的权限来创建 Azure Databricks 工作区资源。 如果脚本由于配额或权限不足失败,可以尝试 在 Azure 门户中以交互方式创建 Azure Databricks 工作区。
- 在 Web 浏览器中,登录到 Azure 门户,网址为
https://portal.azure.com
。 -
使用页面顶部搜索栏右侧的 [>_] 按钮在 Azure 门户中创建新的 Cloud Shell,在出现提示时选择“PowerShell”环境并创建存储。 Cloud Shell 在 Azure 门户底部的窗格中提供命令行界面,如下所示:
注意:如果以前创建了使用 Bash 环境的 Cloud shell,请使用 Cloud Shell 窗格左上角的下拉菜单将其更改为“PowerShell”。
-
请注意,可以通过拖动窗格顶部的分隔条或使用窗格右上角的 —、◻ 或 X 图标来调整 Cloud Shell 的大小,以最小化、最大化和关闭窗格 。 有关如何使用 Azure Cloud Shell 的详细信息,请参阅 Azure Cloud Shell 文档。
-
在 PowerShell 窗格中,输入以下命令以克隆此存储库:
rm -r mslearn-databricks -f git clone https://github.com/MicrosoftLearning/mslearn-databricks
-
克隆存储库后,请输入以下命令以运行 setup.ps1 脚本,以在可用区域中预配 Azure Databricks 工作区:
./mslearn-databricks/setup.ps1
- 如果出现提示,请选择要使用的订阅(仅当有权访问多个 Azure 订阅时才会发生这种情况)。
- 等待脚本完成 - 这通常需要大约 5 分钟,但在某些情况下可能需要更长的时间。 在等待时,请查看什么是 Azure 数据工厂?。
创建 Azure 数据工厂资源
除了 Azure Databricks 工作区之外,还需要在订阅中预配 Azure 数据工厂资源。
- 在 Azure 门户中,关闭云 shell 窗格并浏览到由安装脚本创建的 msl-xxxxxxx***** 资源组(或包含现有 Azure Databricks 工作区的资源组)。
- 在工具栏中,选择“+ 创建”** 并搜索
Data Factory
。 然后使用以下设置创建新的“数据工厂”资源**:- 订阅:你的订阅
- 资源组**:msl-xxxxxxx(或包含现有 Azure Databricks 工作区的资源组)
- 名称:唯一名称,例如 adf-xxxxxxx**
- 区域**:与 Azure databricks 工作区相同的区域(如果未列出,则为任何其他可用区域)
- 版本:V2
- 创建新资源后,验证资源组是否包含 Azure Databricks 工作区和 Azure 数据工厂资源。
创建笔记本
可以在 Azure Databricks 工作区中创建笔记本,运行用一系列编程语言编写的代码。 在本练习中,你将创建一个简单的笔记本,用于从文件中引入数据并将其保存在 Databricks 文件系统 (DBFS) 的文件夹中。
- 在 Azure 门户中,浏览到已由脚本创建的 msl-xxxxxxx** 资源组(或包含现有 Azure Databricks 工作区的资源组)
- 选择 Azure Databricks 服务资源(如果已使用安装脚本创建,则名为 databricks-xxxxxxx*)。
-
在工作区的“概述”** 页中,使用“启动工作区”** 按钮在新的浏览器标签页中打开 Azure Databricks 工作区;请在出现提示时登录。
提示:使用 Databricks 工作区门户时,可能会显示各种提示和通知。 消除这些内容,并按照提供的说明完成本练习中的任务。
- 查看 Azure Databricks 工作区门户,请注意,左侧边栏包含可执行的各种任务的图标。
- 在边栏中,使用“(+) 新建”** 链接创建笔记本**。
- 将默认笔记本名称(Untitled Notebook [日期]**)更改为“Process Data”**。
-
在笔记本的第一个单元格中,输入(但不运行)以下代码,为供此笔记本在其中保存数据的文件夹设置一个变量。
# Use dbutils.widget define a "folder" variable with a default value dbutils.widgets.text("folder", "data") # Now get the parameter value (if no value was passed, the default set above will be used) folder = dbutils.widgets.get("folder")
-
在现有代码单元格下,使用 + 图标添加新的代码单元格**。 然后在新单元格中输入(但不运行)以下代码,以便下载数据并将其保存到文件夹中:
import urllib3 # Download product data from GitHub response = urllib3.PoolManager().request('GET', 'https://raw.githubusercontent.com/MicrosoftLearning/mslearn-databricks/main/data/products.csv') data = response.data.decode("utf-8") # Save the product data to the specified folder path = "dbfs:/{0}/products.csv".format(folder) dbutils.fs.put(path, data, True)
-
在左侧边栏中,选择“工作区”** 并确保列出 Process Data ** 笔记本。 你将使用 Azure 数据工厂将笔记本作为管道的一部分运行。
注意:笔记本几乎可以包含所需的任何数据处理逻辑。 此简单示例旨在展示关键原则。
启用 Azure Databricks 与 Azure 数据工厂的集成
若要从 Azure 数据工厂管道使用 Azure Databricks,需要在 Azure 数据工厂中创建一个链接服务,以便能够访问 Azure Databricks 工作区。
生成访问令牌
- 在 Azure Databricks 门户的右上方菜单栏中,选择用户名,然后从下拉列表中选择“用户设置”。
- 在“用户设置”页中,选择“开发人员” 。 然后在“访问令牌”旁边,选择“管理” 。
- 选择“生成新令牌”,并使用注释“数据工厂”和空白生存期生成新令牌(这样令牌不会过期)。 在选择“完成”之前,请注意在显示令牌时复制令牌。
- 将复制的令牌粘贴到文本文件中,以便稍后在本练习中使用。
在 Azure 数据工厂中创建链接服务
- 返回到 Azure 门户,在 msl-xxxxxxx 资源组中,选择 Azure 数据工厂资源 adfxxxxxxx。****
- 在“概述”页上,选择“启动工作室”以打开 Azure 数据工厂工作室 。 根据提示登录。
- 在 Azure 数据工厂工作室中,使用 » 图标展开左侧的导航窗格。 然后选择“管理”页。
- 在“管理”页的“链接服务”选项卡中,选择“+ 新建”添加新的链接服务 。
- 在“新建链接服务”窗格中,选择顶部的“计算”选项卡 。 然后选择“Azure Databricks”。
- 继续,使用以下设置创建链接服务:
- 名称:AzureDatabricks
- 说明:Azure Databricks 工作区
- 通过集成运行时连接:AutoResolveInegrationRuntime
- 帐户选择方式:从 Azure 订阅
- Azure 订阅:选择你的订阅
- Databricks 工作区:选择你的 databricksxxxxxxx 工作区**
- 选择群集:新建作业群集
- Databrick 工作区 URL:自动设置为 Databricks 工作区 URL
- 身份验证类型:访问令牌
- 访问令牌:粘贴访问令牌
- 群集版本:13.3 LTS(Spark 3.4.1、Scala 2.12)
- 群集节点类型:Standard_DS3_v2
- Python 版本:3
- 辅助角色选项:已修复
- 辅助角色:1
使用管道运行 Azure Databricks 笔记本
创建链接服务后,可以在管道中使用它来运行之前查看的笔记本。
创建管道
- 在 Azure 数据工厂工作室的导航窗格中,选择“创作”。
- 在“创作”页上的“工厂资源”窗格中,使用 + 图标添加“管道” 。
- 在新管道的“属性”窗格中,将其名称更改为“使用 Databricks 处理数据” 。 然后使用工具栏右侧的“属性”按钮(看起来类似于“🗏”*)隐藏“属性”窗格 。
- 在“活动”窗格中展开“Databricks”,将“笔记本”活动拖动到管道设计器图面 。
- 选择新的“Notebook1”活动后,在底部窗格中设置以下属性:
- 常规:
- 名称:处理数据
- Azure Databricks:
- Databricks 链接服务:选择之前创建的 AzureDatabricks 链接服务**
- 设置:
- 笔记本路径**:浏览到“Users/your_user_name”文件夹,然后选择“处理数据”笔记本****
- 基参数**: 添加名为
folder
且值为product_data
的新参数
- 常规:
- 使用管道设计器图面上方的“验证”按钮验证管道。 然后使用“全部发布”按钮发布(保存)。
运行管道
- 在管道设计器图面上方,选择“添加触发器”,然后选择“立即触发” 。
- 在“管道运行”窗格中,选择“确定”运行管道 。
-
在左侧导航窗格中,选择“监视”,并在“管道运行”选项卡上观察“使用 Databricks 处理数据”管道。运行可能需要一段时间,因为它会动态创建 Spark 群集并运行笔记本 。 可以使用“管道运行”页上的“↻刷新”按钮刷新状态 。
注意:如果管道运行失败,则订阅在预配 Azure Databricks 工作区的区域中的配额可能不足,无法创建作业群集。 请参阅 CPU 内核限制阻止创建群集,了解详细信息。 如果发生这种情况,可以尝试删除工作区,并在其他区域创建新工作区。 可以将区域指定为设置脚本的参数,如下所示:
./setup.ps1 eastus
-
运行成功后,选择其名称,查看运行详细信息。 然后,在“使用 Databricks 处理数据”页的“活动运行”部分,选择“处理数据”活动,并使用其“输出”图标查看该活动的输出 JSON,应如下所示 :
{ "runPageUrl": "https://adb-..../run/...", "runOutput": "dbfs:/product_data/products.csv", "effectiveIntegrationRuntime": "AutoResolveIntegrationRuntime (East US)", "executionDuration": 61, "durationInQueue": { "integrationRuntimeQueue": 0 }, "billingReference": { "activityType": "ExternalActivity", "billableDuration": [ { "meterType": "AzureIR", "duration": 0.03333333333333333, "unit": "Hours" } ] } }
- 请注意 runOutput 值,该值是笔记本保存数据的路径变量。
清理
如果已完成对 Azure Databricks 的探索,则现在可以删除已创建的资源,以避免产生不必要的 Azure 成本并释放订阅中的容量。