Spark 将检索到的数据保存在 Azure Databricks 的什么位置?

Where does Spark saves retrieved data on Azure Databricks?

我想了解 Azure databricks 中 RAMstorage 之间的区别。

假设我正在从 Azure 数据湖 (ADLS Gen 2) 读取 csv 数据,如下所示:

df = spark.read.csv("path to the csv file").collect()
  1. 我知道 spark 中的 read 方法是 spark 中的 Transformation 方法。这不会立即成为 运行。但是,现在如果我使用 collect() 方法执行 Action,我会假设数据现在实际上已由 Spark 从数据湖中读取并加载到 RAMDisk.首先,我想知道,数据存储在哪里。是在 RAM 还是在 Disk。而且,如果数据存储在RAM中,那么cache有什么用?如果数据被检索并存储在 disk 上,那么 persist 有什么作用?我知道 cache 将数据存储在内存中供以后使用,如果我有大量数据,我可以使用 persist 将数据存储到 disk.

  2. 我想知道,如果我们有 peta 字节的数据,databricks 可以扩展多少?

  3. RAMDisk 尺寸有多少不同?
  4. 我怎样才能知道数据在任何时间点的存储位置?
  5. 什么是底层操作系统 运行ning Azure Databricks?

请注意,我是 Azure Databricks 和 Spark 的新手。

我想获得一些关于使用 Spark 的最佳实践的建议。

非常感谢您的帮助!!

First, I would like to know, where is the data stored.

当你运行任何动作(即收集或其他)时,数据从执行节点收集到驱动节点并存储在ram(内存)中

And, if the data is stored in RAM, then what is cache used for

Spark 有 lazy evaluation 这意味着在您调用一个操作之前它什么都不做,一旦您调用它,它就会创建一个 DAG 然后执行该 DAF。

举个例子来理解吧。假设您有三个 tables Table ATable BTable C。您已加入此 table 并应用了一些业务逻辑(地图和过滤器),我们称此数据框为 filtered_data。现在你正在使用这个 DataFrame 比方说 5 个不同的地方(另一个数据帧)用于查找或加入和其他业务原因。

如果您不保留(缓存)您的 filterd_data 数据框,每次引用它时,它都会再次通过连接和其他业务逻辑。因此,如果您要在多个地方使用它,建议持久化(缓存)数据框。

默认 Cache 将数据存储在内存 (RAM) 中,但您可以将存储级别设置为 disk

would like to know, how much can databricks scale if we have petabytes of data?

这是一个分布式环境,所以你需要做的就是添加更多的执行器。并且可能需要增加内存和 CPU 配置,

how can I know where the data is stored at any point in time?

如果您尚未创建 table 或视图,它会存储在内存中。

What is the underlying operating system running Azure Databricks?

它使用linux操作系统。 特别是 Linux-4.15.0-1050-azure-x86_64-with-Ubuntu-16.04-xenial

你可以运行下面的命令就知道了

import platform
println(platform.platform())