Databricks最近推出了一系列令人印象深刻且创新的功能,这让我想到自问:_Databricks能创建多少种类型的集群?_这是一个很好的问题,在这篇文章中,我决定通过回顾我在工作中觉得最有用的集群类型来回答这个问题。
让我们说起在 Databricks 中什么是集群。在 Databricks 工作区中,我们可以创建笔记本、Python 脚本、工作流等资源。但是,我们需要计算资源来执行它们并获取结果。这些计算资源由可以在 Databricks 工作区中创建和管理的集群提供。
作者供图
传统上,使用全用途计算,用户可以通过设定Spark版本、节点类型和节点数量等来创建自定义的集群,以满足特定需求。此外,还可以根据具体工作负载安装所需的库。这种方法已经成为了使用Databricks集群的标准一段时间了。
然而,我们现在有了新的可能性,比如无服务器计算这样的新技术。
我们可以将通用计算定义为用于在笔记本中分析和处理数据的按需计算。如图所示,有许多选项可供您自定义集群。这些选项包括指定Spark版本和配置集群大小及节点类型、启用Photon加速提升性能,以及设置自动停止时间。
尽管每个设置都提供了强大的自定义功能,但创建一个完美匹配您工作负载需求的集群可能会有点棘手。在这种类型的集群中,你可以完全掌控计算环境,可以通过UI、CLI或REST API轻松创建、停止或重启集群。
单用户集群只能由一个用户使用,而共享集群则供多个用户同时访问。共享集群会隔离每个用户的会话和数据。
两种访问模式都支持 Unity Catalog,但单用户集群存在一些限制,例如对带有列掩码的表以及其他功能的访问受到限制。要查询这些表,需要共享计算集群。尽管共享集群完全支持 Unity Catalog,但由于用户之间的会话隔离,仍存在一些限制,包括:
你可以在这里找到详细信息。
光子
Photon 是一个下一代引擎,可以显著减少作业执行时间,从而整体成本更低,特别是在数据修改操作中。它与 Apache Spark DataFrame 和 SQL API 兼容设计,并且在典型的数据仓库工作负载如 UPDATE、DELETE、MERGE、INSERT 和 CREATE TABLE AS 中特别有帮助。
Photon利用预测性输入输出,通过加快读取和更新的速度来优化数据交互。这可以减少数据扫描所需的时间,并减少了需要重新写入的数据量。
从成本的角度来看,您将被计费整个集群处于活动状态的时间,包括启动所需的时间。成本按每小时的 Databricks 单位(DBU/小时)来衡量,您可以在创建集群时查看屏幕上的 概要 部分。
Job Compute 专门用于运行自动化作业。Databricks 作业调度器会在执行任务时自动提供所需的计算资源。在任务详情中,你可以自定义集群属性,比如节点配置和大小。任务完成后,计算资源会自动停止,这样只在需要时运行,确保成本效益。
当我开始使用无服务器SQL仓库服务时,我被其速度和效率所惊艳。不同于传统的集群需要几分钟才能启动,无服务器SQL仓库服务只需3秒即可准备就绪,可以几乎立即执行查询。这大大改善了使用SQL时的体验,使其感觉像在查询传统的关系型数据库,如SQL Server、Oracle等。
这种简洁性真的很棒。要运行查询,只需打开 SQL 编辑器,选择合适的 仓库 实例,然后执行您的 SQL 命令即可。Databricks 的 SQL 编辑器界面类似于经典的 SQL 数据库环境,其中 目录浏览器 让您可以访问表、视图和函数。在 SQL 编辑器 窗口中,您可以编写并执行查询,而计算资源会在后台无缝地处理查询执行。
Databricks SQL 编辑器
或者,如果你更喜欢使用笔记本,你可以在笔记本环境中运行SQL命令。通过使用SQL魔法指令(%sql
),你可以运行SQL查询、转换数据或探索数据,就像在SQL编辑器里一样。
笔记本中的 SQL 查询
正如你可能预料到的,这种类型的集群仅支持Databricks SQL。这种类型的集群不支持Python代码;如果你在一个笔记本中执行Python代码,它将会失败执行。我们可以用SQL命令创建类似于我们在SQL Server或Oracle中所做的SQL转换。我们可以创建表、视图或临时视图来进行复杂的数据转换。
与通用计算相比,配置 SQL 仓库要简单得多。只需要定义一个 SQL 仓库,并从预设的选项中选择集群大小即可。此外,还可以设置集群的自动停止和扩展。如果你熟悉 Snowflake 仓库的概念,那么这对你来说应该很容易理解。
SQL 仓库设置
以下是 Databricks 中提供的预定义仓库列表。你可以看到,这可能是创建集群最简单的方法。
配置的集群大小适用于Pro和标准SQL仓库,包括适用于Pro和标准SQL仓库的集群配置。
仓库自动扩展
无服务器SQL仓库具有一组名为智能工作负载管理(IWM)的功能,这增强了其动态扩展和缩减的能力。IWM利用机器学习模型来预测传入查询所需的资源,同时实时监控仓库的可用计算容量。这些功能支持预测查询的成本、实时监控计算容量和根据集群容量进行查询排队。
IWM 大约每 10 秒会检查一次队列。如果队列减少的速度不够快,自动扩展就会自动启动来增加更多的计算资源。一旦有更多可用的容量时,排队的查询会被分配到这些新资源上。在无服务器的 SQL 仓库里,计算资源可以快速增加。所有 SQL 仓库类型的队列限制都是 1,000 个查询。
这是最新类型的无服务器计算服务,于2024年7月宣布正式可用(GA)。这种计算服务专为笔记本、作业和Delta实时表(DLT)设计,允许您在Apache Spark上编写代码。它提供快速代码运行、自动扩展基础设施以及Databricks Runtime的无缝版本升级服务。这种计算类型经过优化,以实现快速启动、扩展和高性能,从而可能降低成本,因为计算资源可以快速获取,并且您只需为使用的计算时间付费。
如果你觉得 Serverless 仓库的配置很简单,你会在这里大吃一惊:只需要在你的 Databricks 账户中启用 Serverless 计算功能即可。启用之后,你应该会发现在你的笔记本中多了一种新的计算类型。
用于笔记本的无服务器计算
有了这种类型的集群,我们可以迅速运行SQL、PySpark或DLT代码。它还可以配合作业使用,以加快数据处理速度。
你可以通过查询系统表(例如,system.billing.usage)来监控无服务器计算资源的使用情况,这些表包含与无服务器计算资源成本相关的用户和工作负载属性。或者,你可以将包含计费信息的仪表板导入到账户控制台。借助这些工具,你能够追踪成本及无服务器资源的使用情况。报告能够提供关于SQL、DLT任务、作业或模型费用的详细信息。
SELECT t1.workspace_id, SUM(t1.usage_quantity * list_prices.pricing.默认价格) AS list_cost FROM system.billing.usage t1 INNER JOIN system.billing.list_prices ON t1.cloud = list_prices.cloud 并且 t1.sku_name = list_prices.sku_name 并且 t1.usage_start_time >= list_prices.price_start_time 并且 (t1.usage_end_time <= list_prices.price_end_time 或者 list_prices.price_end_time 为NULL) WHERE t1.sku_name LIKE '%SERVERLESS%' GROUP BY t1.workspace_id
简单总结如下,以下是 Databricks 提供的计算资源类型列表:
新的无服务器计算功能提升了在Databricks笔记本和SQL代码上的操作体验。SQL仓库由于其计算资源的可用性,在BI方面特别有用。此外,它简化了计算配置。无服务器计算是扩展Databricks环境功能的重要一步。它提供多种计算定制和无服务器使用的选项。我特别喜欢利用Unity Catalog与无服务器计算配合使用,因为它方便我探索存储在表中的数据。