繁体   English   中英

增量表、增量日志、分区等的 Databricks / Spark 存储机制

[英]Databricks / Spark storage mechanism for Delta Tables, Delta Logs, Partitions etc

我试图了解如何在 DataBricks 环境中存储和管理数据。 我对幕后发生的事情有相当不错的了解,但在网上看到了一些相互矛盾的信息,因此希望得到详细的解释以巩固我的理解。 要问我的问题,我想总结一下我在 Apache Spark 开发人员课程中的练习之一中所做的工作。

作为练习的一部分,我在 Databricks 平台上执行了以下步骤:

  1. 启动了我的集群
  2. 将 parquet 文件读取为 DataFrame
  3. 将 DataFrame 作为 Delta 表存储在我的 DBFS 用户目录中
  4. 对上一步中创建的 Delta Table 进行了一些更改
  5. 基于特定列(例如 State)对相同的 Delta 表进行分区,并使用覆盖模式保存在 DBFS 的相同用户目录中

完成上述步骤后,我的 DBFS 目录如下所示:

DBFS 增量日志目录

在我用来存储增量表(上图)的根文件夹中,我有以下类型的文件夹/文件

  1. 增量日志文件夹
  2. 具有“状态”名称的文件夹(步骤 5。上一节),每个状态文件夹还包含 4 个镶木地板文件,我怀疑它们是数据集的分区
  3. 我怀疑四个单独的镶木地板文件是我创建此增量表时的文件(在上一节的第 3 步中)

基于上述练习,以下是我的问题:

  1. 是我在上述目录中看到的数据 - 包含分布在我的节点上的分区、镶木地板文件、增量日志等的状态命名文件夹(我认为答案是肯定的)。
  2. 根文件夹中的四个 parquet 文件(从我创建 delta 表时开始,在分区之前)——假设它们分布在我的节点上——它们是否存储在我节点的 RAM 中? delta_log 文件夹中的数据存储在哪里? 如果它跨我的节点 - 它是存储在 RAM 还是磁盘内存中?
  3. 数据(每个州名称文件夹下的镶木地板文件/分区 - 来自上面的屏幕截图)存储在哪里? 如果这也分布在我的节点上,它是在内存 (RAM) 中还是在磁盘上?

我在网上看到的一些答案说所有分区都存储在内存(RAM)中。 按照这种逻辑,一旦我关闭集群 - 它们应该从内存中删除,对吗?

但是,即使我关闭集群,我也能够查看 DBFS 中的所有数据(与我上面包含的图片完全相同)。 我怀疑一旦关闭集群,RAM 就会被清除,因此我应该看不到 RAM 中的任何数据。 我的理解不正确吗?

如果您能尽可能详细地按顺序回答我的问题,将不胜感激。

当您将数据写入DBFS时,它会存储在与集群分开的某种形式的永久对象存储中。 这就是集群关闭后它仍然存在的原因。 这是什么存储取决于您运行 Databricks 工作区的云。

这是分离计算和存储的主要思想,您的集群是其他地方的计算和存储。 只有当您读入并处理数据时,它才会分布在您的节点上进行处理。 一旦您的集群关闭节点上的所有数据,RAM 或磁盘就会消失,除非您已将其写入某种形式的永久存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM