繁体   English   中英

为什么从 databricks spark 笔记本(hadoop fileUtils)写入 DBFS 装载位置比写入 DBFS 根位置慢 13 倍?

[英]Why write from databricks spark notebook ( hadoop fileUtils) to DBFS mount location is 13 times slower than write to DBFS Root location?

Databricks notebook 需要 2 个小时才能写入 /dbfs/mnt(blob 存储)。 同样的作业需要 8 分钟才能写入 /dbfs/FileStore。

我想了解为什么两种情况下的写入性能不同。 我也想知道 /dbfs/FileStor 使用哪个后端存储?

我知道 DBFS 是可扩展 object 存储之上的抽象。 在这种情况下,/dbfs/mnt/blobstorage 和 /dbfs/FileStore/ 应该花费相同的时间。

问题陈述:

源文件格式:.tar.gz

平均大小:10 mb

tar.gz 文件数量:1000

每个 tar.gz 文件包含大约 20000 个 csv 个文件。

需求:解压tar.gz文件,写入CSV个文件到blob存储/中间存储层做进一步处理。

解压并写入安装位置(附截图):

在这里,我使用 hadoop FileUtil 库和 unTar function 来解压缩并将 CSV 文件写入目标存储(/dbfs/mnt/ - blob 存储)。 使用 2 个工作节点(每个 4 个核心)集群完成作业需要 1.50 小时。 在此处输入图像描述

解压并写入 DBFS Root FileStore:这里我使用 hadoop FileUtil 库和 unTar function 解压并写入 CSV 文件到目标存储(/dbfs/FileStore/),只需 8 分钟即可完成 2 个工作节点(4 核)的作业每个)集群。 在此处输入图像描述

问题:为什么写入 DBFS/FileStore 或 DBFS/databricks/driver 比写入 DBFS/mnt 存储快 15 倍?

DBFS 根目录(/FileStore、/databricks-datasets、/databricks/driver)在后端使用什么存储和文件系统? 每个子文件夹的大小限制是多少?

可能有多种因素影响,但需要更多信息来调查:

  • 你的/mnt挂载点可能指向另一个区域的 blob 存储,所以你有更高的延迟
  • 您正在为您的 blob 存储设置节流,例如,如果其他集群对它进行大量读/写或列表操作 - 这可能会导致重试 Spark 任务(如果您有任何任务,请检查 Spark UI有错误)。 另一方面, /FileStore位于未加载的专用 blob 存储(所谓的DBFS Root )中。

通常,对于 DBFS Root,使用 Azure Blob 存储,而不是 ADLS。 具有分层命名空间的 ADLS 有额外的操作开销,因为它需要检查权限等。这也会影响性能。

但要解决该问题,最好打开支持票,因为它可能需要后端调查。

PS 请注意,DBFS Root 应该只用于临时数据,因为它只能从工作区访问,所以你不能与其他工作区或其他消费者共享数据。

暂无
暂无

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

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