笔记本隔离
笔记本隔离是指变量和类在笔记本之间的可见性。 Azure Databricks 支持两种类型的隔离:
- 变量和类隔离
- Spark 会话隔离
注意
Azure Databricks 使用在群集上配置的访问模式管理用户隔离。
- 无隔离共享:多名用户可以使用同一个群集。 用户共用在群集级别设置的凭据。 不会强制实施任何数据访问控制。
- 单一用户:只有指定用户才能使用群集。 所有命令都使用该用户的权限运行。 不会强制实施 Hive 元存储中的表 ACL。 此访问模式支持 Unity Catalog。
- 共享:多名用户可以使用同一个群集。 用户彼此完全隔离,每名用户都使用自己的权限运行命令。 强制实施 Hive 元存储中的表 ACL。 此访问模式支持 Unity Catalog。
变量和类隔离
变量和类仅在当前笔记本中可用。 例如,附加到同一群集的两个笔记本可以定义具有同一名称的变量和类,但这些对象是不同的。
若要定义一个对附加到同一群集的所有笔记本均可见的类,请在包单元格中定义该类。 然后,可以使用完全限定的名称来访问该类,这与访问附加的 Scala 或 Java 库中的类是相同的。
Spark 会话隔离
附加到群集的每个笔记本都有一个称为 spark
的预定义变量,该变量表示 SparkSession
。 SparkSession
是使用 Spark API 以及设置运行时配置的入口点。
默认情况下已启用 Spark 会话隔离。 你还可以使用全局临时视图跨笔记本共享临时视图。 请参阅 CREATE VIEW。 若要禁用 Spark 会话隔离,请在 spark.databricks.session.share
中将 spark.databricks.session.share
设置为 true
。
重要
将 spark.databricks.session.share
设置为 true 会中断流式处理笔记本单元格和流式处理作业所使用的监视。 具体而言:
- 不会显示流式处理单元格中的图。
- 只要流在运行,就不会阻止作业(它们在“成功地”完成后就会停止流)。
- 系统不会监视作业中的流是否已终止, 而必须由你来手动调用
awaitTermination()
。 - 对流式处理数据帧调用创建新的可视化效果不起作用。
使用其他语言来触发命令的单元格(即,使用 %scala
、%python
、%r
和 %sql
的单元格)以及包含其他笔记本的单元格(即使用 %run
的单元格)都是当前笔记本的一部分。 因此,这些单元格与其他笔记本单元格位于相同的会话中。 相比之下,笔记本工作流使用独立的 SparkSession
来运行笔记本,这意味着在此类笔记本中定义的临时视图在其他笔记本中不可见。