【问题标题】:Storage options in databricks数据块中的存储选项
【发布时间】:2019-12-26 09:08:50
【问题描述】:

我对 databricks 环境比较陌生。我的公司为我设置了一个数据块帐户,我从 s3 存储桶中提取数据。我有传统关系数据库的背景,所以对我来说理解数据块有点困难。

我有以下问题:

- mount 只是一个连接(链接到 s3/外部存储),没有任何内容存储在 DBFS 上,还是实际上将数据存储在 DBFS 上?

-我在某处读到 DBFS 也已挂载?我的理解是 DBFS 是数据块存储,我怎样才能看到 DBFS 可用的总存储空间是多少?

-我们为公司的不同团队提供不同的集群,我无法访问所有集群,在从 s3 导出数据时,我是否必须在我的代码中设置一些东西,以确保数据框和不属于我正在使用的集群的其他用户无法访问我在数据块中创建的表。

-数据库表存储在哪里?它在 DBFS 上吗?在存储选项方面,除了数据库、DBFS、外部(s3、azure、jdbc/odbc 等)还有其他存储吗?

-当我们加载它们时,表/数据帧是否总是存储在内存中?有没有办法查看内存中文件大小的限制?

谢谢!

【问题讨论】:

    标签: apache-spark amazon-s3 pyspark apache-spark-sql databricks


    【解决方案1】:

    好问题!我会尽力为您解答这些问题。

    挂载只是一个连接(链接到 s3/外部存储),没有任何内容存储在 DBFS 上,还是实际上将数据存储在 DBFS 上?我在某处读到 DBFS 也已挂载?我的理解是 DBFS 是数据块存储,我怎样才能看到 DBFS 可用的总存储空间是多少?

    DBFS 是 S3 之上的一个抽象层,让您可以像访问本地文件系统一样访问数据。默认情况下,当您部署 Databricks 时,您会创建一个用于存储并可通过 DBFS 访问的存储桶。当您挂载到 DBFS 时,您实际上是将 S3 存储桶挂载到 DBFS 上的路径。更多详情here.

    我们为公司的不同团队提供不同的集群,我无法访问所有集群,在从 s3 导出数据时,我是否必须在我的代码中设置一些东西,以确保不属于我正在使用的集群的其他用户无法访问我在数据块中创建的数据框和表。

    将 S3 存储桶挂载到 DBFS 上的路径将使您的 Databricks 工作区中的其他人可以使用该数据。如果要确保没有其他人可以访问数据,则必须采取两个步骤。首先,使用 IAM 角色而不是挂载,并将授予对 S3 存储桶的访问权限的 IAM 角色附加到您计划使用的集群。其次,将对集群的访问限制为只有那些可以访问数据的人。这样您就可以锁定哪些集群可以访问数据,以及哪些用户可以访问这些集群。

    数据库表存储在哪里?它在 DBFS 上吗?在存储选项方面,除了数据库、DBFS、外部(s3、azure、jdbc/odbc 等)还有其他存储吗?

    数据库表存储在 DBFS 上,通常在 /FileStore/tables 路径下。阅读更多here

    当我们加载表/数据框时,它们是否总是存储在内存中?有没有办法查看内存中文件大小的限制?

    这取决于您的查询。如果您的查询是SELECT count(*) FROM table,那么是的,整个表被加载到内存中。如果您正在过滤,那么 Spark 将尝试提高效率,并且只读取执行查询所需的表的那些部分。文件大小的限制与集群的大小成正比。 Spark 将跨集群对内存中的数据进行分区。如果您的内存仍然不足,那么通常是时候增加集群的大小或优化您的查询了。 Databricks 上的自动缩放有助于前者。

    谢谢!

    不客气!

    编辑: 在内存中指的是 RAM,DBFS 不做任何处理。要查看可用空间,您必须登录 AWS/Azure 帐户并检查与 Databricks 关联的 S3/ADLS 存储。

    如果您通过 Spark API 保存表,它们也将位于 FileStore/tables 路径上。 UI 利用相同的路径。

    集群由驱动节点和工作节点组成。如果需要,您可以为驱动程序使用不同的 EC2 实例。这是一个系统,该系统就是集群。

    Spark 支持对与表关联的 parquet 文件进行分区。事实上,这是提高查询性能的关键策略。按您在查询中常用的谓词进行分区。这与内存中的分区是分开的。

    【讨论】:

    • 感谢拉斐尔的详细解释!非常感谢您的帮助。几个后续问题:- Q1。 In-memory 是指集群的 RAM 吗?我使用的集群有 r5.4xlarge ,128.0 GB 内存,16 核,3.6 DBU 配置。那么在这种情况下,我的内存可以处理高达 128GB 的​​数据吗?如果假设数据是 200GB,那么剩余的 72GB 将在具有 128GB 内存的 DBFS 上处理? Q2。有没有办法查看可用 DBFS 的大小与已用空间的大小?
    • 第三季度。 /FileStore/tables - 来自链接 - 存储您通过 Create table UI 上传的文件。我正在使用脚本创建表,但在该路径下看不到表名?这些表名是否在该文件夹中加密,因为我可以有很多加密名称? Q4。我使用的集群具有 r5.4xlarge ,128.0 GB 内存,16 个内核,3.6 个 DBU 配置,适用于 1 个驱动程序和 20 个工作人员。这是否意味着从技术上讲驱动程序和工作人员在同一系统上运行?
    • Q5。是为内存创建分区,还是也可以在 dbfs 文件上创建分区?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多