[英]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 存储,所以你有更高的延迟/FileStore
位于未加载的专用 blob 存储(所谓的DBFS Root )中。通常,对于 DBFS Root,使用 Azure Blob 存储,而不是 ADLS。 具有分层命名空间的 ADLS 有额外的操作开销,因为它需要检查权限等。这也会影响性能。
但要解决该问题,最好打开支持票,因为它可能需要后端调查。
PS 请注意,DBFS Root 应该只用于临时数据,因为它只能从工作区访问,所以你不能与其他工作区或其他消费者共享数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.