Databricks 筆記本需要 2 小時才能寫入 /dbfs/mnt(blob 存盤)。同樣的作業需要 8 分鐘才能寫入 /dbfs/FileStore。
我想了解為什么兩種情況下的寫入性能不同。我還想知道 /dbfs/FileStor 使用哪個后端存盤?
我知道 DBFS 是可擴展物件存盤之上的抽象。在這種情況下,/dbfs/mnt/blobstorage 和 /dbfs/FileStore/ 應該花費相同的時間。
問題陳述:
源檔案格式:.tar.gz
平均大小:10 mb
tar.gz 檔案數:1000
每個 tar.gz 檔案包含大約 20000 個 csv 檔案。
要求: 解壓 tar.gz 檔案并將 CSV 檔案寫入 blob 存盤/中間存盤層進行進一步處理。
解壓縮并寫入安裝位置(附加螢屏截圖):
在這里,我使用 hadoop FileUtil 庫和 unTar 函式解壓縮并將 CSV 檔案寫入目標存盤(/dbfs/mnt/ - blob 存盤)。使用 2 個作業節點(每個 4 個核心)集群完成作業需要 1.50 小時。

解壓縮并寫入 DBFS 根檔案存盤:這里我使用 hadoop FileUtil 庫和 unTar 函式解壓縮并將 CSV 檔案寫入目標存盤(/dbfs/FileStore/),只需 8 分鐘即可完成具有 2 個作業節點(4 個核心)的作業每個)集群。

問題: 為什么寫入 DBFS/FileStore 或 DBFS/databricks/driver 比寫入 DBFS/mnt 存盤快 15 倍?
DBFS 根(/FileStore、/databricks-datasets、/databricks/driver)在后端使用什么存盤和檔案系統?每個子檔案夾的大小限制是多少?
uj5u.com熱心網友回復:
可能有多種因素會影響這一點,但需要更多資訊來調查:
- 您的
/mnt掛載點可能指向另一個區域中的 blob 存盤,因此您有更高的延遲 - 您的 Blob 存盤受到限制,例如,如果有很多來自其他集群的讀/寫或串列操作 - 這可能會導致 Spark 任務重試(如果您有任何任務,請檢查 Spark UI有錯誤)。另一方面,
/FileStore它位于未加載的專用 blob 存盤(所謂的DBFS Root)中。
通常,對于 DBFS 根,使用 Azure Blob 存盤,而不是 ADLS。具有分層命名空間的 ADLS 有額外的操作開銷,因為它需要檢查權限等。這也可能影響性能。
但要解決這個問題,最好開一張支持票,因為它可能需要后端調查。
PS 請注意,DBFS Root 只能用于臨時資料,因為它只能從作業區訪問,因此您不能與其他作業區或其他消費者共享其上的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465310.html
上一篇:如何在Swift包中使用依賴項
