Databricks 中的高并发集群

High Concurrency Clusters in Databricks

这来自 Databricks 文档:

High Concurrency clusters

A High Concurrency cluster is a managed cloud resource. The key benefits of High Concurrency clusters are that they provide Apache Spark-native fine-grained sharing for maximum resource utilization and minimum query latencies.

High Concurrency clusters work only for SQL, Python, and R. The performance and security of High Concurrency clusters is provided by running user code in separate processes, which is not possible in Scala.

高并发集群旨在供多个用户使用,共享集群资源,隔离每个笔记本等。对于所有提到的语言,创建单独的进程并执行仅限于 API 由 Spark 向该语言公开。但是 Scala 代码将在所有用户共享的 Spark JVM(每台机器)中执行,因此您可以访问 JVM 中的所有内容。

通常,在使用高并发集群时,Table ACLs 也会启用(仅适用于 SQL 或 SQL+Python),因此您可以控制谁可以访问哪些数据,实施 row/column 级别的访问控制等

“高并发”集群是 Databricks 尝试重现普通开源 Spark (OSS) 性能的尝试。在普通的 OSS 中,一个集群上的多个应用程序 运行 相互独立 。参见 https://spark.apache.org/docs/latest/cluster-overview.html

在 OSS 中,Spark 驱动程序逻辑托管在 separate/independent 个进程中。 Spark 应用程序是共享集群硬件的同类应用程序。这种环境类型适合希望最大限度地利用可用硬件并发 运行ning 应用程序的数据工程师。

但 Databricks 的目标是为希望共享集群和相关笔记本的“数据科学家”开发 statefulcollaboration 体验.为了实现这些目标,Databricks 通过他们的“驱动程序守护进程”开发了一种有状态的集群技术。它是驱动程序节点上的单个进程 运行ning,它协调集群上需要 运行 的任何驱动程序逻辑。

当您考虑标准 Databricks 集群(即“通用”集群)时,您应该将其视为具有“相反 特性的集群”高并发”集群。 (参见 https://docs.microsoft.com/en-us/azure/databricks/clusters/configure

  • 高并发集群有“细粒度共享”。而默认集群在“驱动程序守护进程”的上下文中进行了大量有意的资源同步(导致临时冲突)。这在同时提交大量作业时最为明显。
  • 高并发集群具有“最大资源利用率”。而默认集群通常会在该 JVM 进程(“驱动程序守护程序”)内的内部资源上遇到瓶颈,并且集群很少会在驱动程序上使用超过 one CPU 个内核节点(暗示集群中执行的所有驱动程序逻辑的序列化)。
  • 高并发集群具有“最小查询延迟”,而默认集群上的延迟变得非常高 - 即使只有 5 或 10 个独立作业 运行ning。
  • 高并发集群“运行 单独进程中的用户代码”,而 Databricks 集群将在单个大型 JVM 进程(也称为“驱动程序守护进程”)中托管所有驱动程序逻辑。由于各种技术原因,该过程成为一个重大瓶颈。

总而言之,Databricks 架构是围绕单个“驱动程序守护进程”进程(主要使用 Scala 开发的 JVM 代码)构建的。这可能成为某些 Spark 工作负载的瓶颈。但是 SQL、Python 和 R 的语言绑定已经设计为在 JVM 外部执行它们(进入单独的“运行time”/“sidecar”)。所以我猜对架构进行调整会更容易,当这些语言已经在自己的 sidecar 中执行时,可以最大限度地减少并发冲突。

与那些语言(SQL、Python 和 R)相比,基于 Scala 的逻辑被同化到“驱动程序守护进程”本身,并且没有单独的 运行时间。可以实现 Scala 的高并发模式,但可能无法避免“驱动程序守护进程”。这将是他们架构的一个巨大逆转。它基本上会让平台再次看起来像 OSS。他们可能认为这会削弱他们的竞争优势,或者会导致他们的集群模式之间出现一些令人困惑的不兼容性。