笔记本隔离

笔记本隔离是指变量和类在笔记本之间的可见性。 Azure Databricks 支持两种类型的隔离:

  • 变量和类隔离
  • Spark 会话隔离

注意

Azure Databricks 使用在群集上配置的访问模式管理用户隔离。

  • 无隔离共享:多名用户可以使用同一个群集。 用户共用在群集级别设置的凭据。 不会强制实施任何数据访问控制。
  • 单一用户:只有指定用户才能使用群集。 所有命令都使用该用户的权限运行。 不会强制实施 Hive 元存储中的表 ACL。 此访问模式支持 Unity Catalog。
  • 共享:多名用户可以使用同一个群集。 用户彼此完全隔离,每名用户都使用自己的权限运行命令。 强制实施 Hive 元存储中的表 ACL。 此访问模式支持 Unity Catalog。

变量和类隔离

变量和类仅在当前笔记本中可用。 例如,附加到同一群集的两个笔记本可以定义具有同一名称的变量和类,但这些对象是不同的。

若要定义一个对附加到同一群集的所有笔记本均可见的类,请在包单元格中定义该类。 然后,可以使用完全限定的名称来访问该类,这与访问附加的 Scala 或 Java 库中的类是相同的。

Spark 会话隔离

附加到群集的每个笔记本都有一个称为 spark 的预定义变量,该变量表示 SparkSessionSparkSession 是使用 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 来运行笔记本,这意味着在此类笔记本中定义的临时视图在其他笔记本中不可见。