分享方式:


Azure Databricks 在何處寫入數據?

本文詳述 Azure Databricks 使用日常作業和設定來寫入數據的位置。 由於 Azure Databricks 有一套工具,可跨越許多技術,並在共用責任模型中與雲端資源互動,因此用來儲存數據的預設位置會根據執行環境、組態和連結庫而有所不同。

本文中的資訊旨在協助您瞭解各種作業的預設路徑,以及組態如何改變這些預設值。 數據管理員和系統管理員正在尋找設定及控制數據存取權的指引,請參閱 使用 Unity 目錄進行數據控管。

若要瞭解如何設定物件記憶體和其他數據源,請參閱 連線到數據源

什麼是物件記憶體?

在雲端運算中,物件記憶體或 Blob 記憶體是指將數據維護為對象的記憶體容器,每個物件都包含數據、元數據,以及全域唯一的資源識別碼(URI)。 物件記憶體資料操作作業通常僅限於透過 REST API 介面建立、讀取、更新和刪除 (CRUD)。 某些物件記憶體供應專案包含版本設定和生命週期管理等功能。 物件記憶體具有下列優點:

  • 高可用性、持久性和可靠性。
  • 相較於大多數其他記憶體選項,記憶體成本較低。
  • 可無限擴充(受限於指定雲端區域中可用的記憶體總量)。

大部分雲端式數據湖都是以雲端物件記憶體中 開放原始碼 數據格式為基礎所建置。

Azure Databricks 如何使用物件記憶體?

物件記憶體是 Azure Databricks 用於大部分作業的主要記憶體形式。 您可以使用 Unity 目錄記憶體認證和外部位置來設定雲端物件記憶體的存取權。 這些位置接著會用來儲存備份數據表和磁碟區的數據檔。 請參閱 使用 Unity 目錄連線到雲端物件記憶體。

除非您特別針對外部數據系統設定數據表,否則在 Azure Databricks 中建立的所有數據表都會將資料儲存在雲端物件記憶體中。

儲存在雲端物件記憶體中的 Delta Lake 檔案為 Databricks Lakehouse 提供數據基礎。

什麼是區塊記憶體?

在雲端運算中,區塊記憶體或磁碟記憶體是指對應至傳統硬碟(HDD)或固態硬碟(SSD)的存儲設備磁碟區,也稱為「硬碟」。 在雲端運算環境中部署區塊記憶體時,通常會部署一或多個實體磁碟驅動器的邏輯分割區。 實作在產品供應專案與雲端廠商之間稍有不同,但通常可在實作中找到下列特性:

  • 所有虛擬機 (VM) 都需要連結的區塊記憶體磁碟區。
  • 只要區塊記憶體磁碟區持續存在,安裝到區塊記憶體磁碟區的檔案和程式會保存。
  • 區塊記憶體磁碟區通常用於暫存數據記憶體。
  • 連結至 VM 的區塊記憶體磁碟區通常會與 VM 一起刪除。

Azure Databricks 如何使用區塊記憶體?

當您開啟計算資源時,Azure Databricks 會設定及部署 VM,並連結區塊記憶體磁碟區。 此區塊記憶體可用來儲存計算資源存留期的暫時數據檔。 這些檔案包括操作系統、已安裝的連結庫,以及磁碟快取所使用的數據。 雖然 Apache Spark 在背景中使用區塊記憶體來有效率地平行處理和數據載入,但大部分在 Azure Databricks 上執行的程式代碼不會直接儲存或載入數據以封鎖記憶體。

您可以執行任意程式代碼,例如使用連結至驅動程式節點的區塊記憶體的 Python 或 Bash 命令。 請參閱 在附加至驅動程序節點的暫時記憶體中使用檔案。

Unity 目錄會將數據檔儲存在何處?

Unity 目錄依賴系統管理員來設定雲端記憶體與關係對象之間的關聯性。 數據的確切位置取決於系統管理員設定關聯的方式。

寫入或上傳至 Unity 目錄所控管之物件的數據會儲存在下列其中一個位置:

  • 與中繼存放區、目錄或架構相關聯的受控記憶體位置。 寫入或上傳至受控數據表和受控磁碟區的數據會使用受控記憶體。 請參閱 在 Unity 目錄中指定受控儲存位置。
  • 使用記憶體認證設定的外部位置。 寫入或上傳至外部數據表和外部磁碟區的數據會使用外部記憶體。 請參閱 使用 Unity 目錄連線到雲端物件記憶體。

Databricks SQL 儲存數據備份數據表的位置?

當您以 CREATE TABLE Unity 目錄設定的 Databricks SQL 執行語句時,預設行為是將資料檔案儲存在以 Unity 目錄設定的受控記憶體位置。 請參閱 Unity 目錄儲存資料檔的位置?

舊版 hive_metastore 目錄遵循不同的規則。 請參閱 使用 Unity 目錄和舊版 Hive 中繼存放區

Delta Live Tables 會儲存數據檔的位置?

Databricks 建議在建立 DLT 管線時使用 Unity 目錄。 數據會儲存在與目標架構相關聯的受控儲存位置目錄中。

您可以選擇性地使用Hive中繼存放區來設定 DLT 管線。 使用Hive中繼存放區設定時,您可以在 DBFS 或雲端物件記憶體上指定儲存位置。 如果您未指定位置,則會將 DBFS 根目錄上的位置指派給管線。

Apache Spark 會在何處寫入數據檔?

Databricks 建議搭配 Unity 目錄使用物件名稱來讀取和寫入數據。 您也可以使用下列模式將檔案寫入 Unity 目錄磁碟區: /Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>。 您必須擁有足夠的許可權,才能將數據上傳、建立、更新或插入 Unity 目錄控管的物件。

您可以選擇性地使用通用資源指標 (URI) 來指定資料檔案的路徑。 URI 會根據雲端提供者而有所不同。 您也必須針對目前的計算資源設定寫入許可權,才能寫入雲端物件記憶體。

Azure Databricks 會使用 Databricks 檔案系統,將 Apache Spark 讀取和寫入命令對應回雲端物件記憶體。 每個 Azure Databricks 工作區都有設定在為工作區配置的雲端帳戶中設定的 DBFS 根記憶體位置,所有使用者都可以存取該位置來讀取和寫入數據。 Databricks 不建議使用 DBFS 根目錄來儲存任何生產數據。 請參閱 什麼是 DBFS?使用 DBFS 根目錄的建議。

pandas 會在 Azure Databricks 上寫入數據檔的位置?

在 Databricks Runtime 14.0 和更新版本中,所有本機 Python 讀取和寫入作業的預設目前工作目錄 (CWD) 是包含筆記本的目錄。 如果您在儲存數據檔時只提供檔名,pandas 會將該數據檔儲存為與目前執行中筆記本平行的工作區檔案。

並非所有 Databricks 執行時間版本都支援工作區檔案,有些 Databricks 運行時間版本會根據您使用筆記本或 Git 資料夾而有不同的行為。 請參閱 什麼是預設目前的工作目錄?

我應該在 Azure Databricks 上寫入暫存盤的位置?

如果您必須寫入在叢集關閉之後不要保留的暫存盤,如果 CWD 位於工作區文件系統中,寫入暫存盤 $TEMPDIR 會產生比寫入目前工作目錄 (CWD) 更好的效能。 如果程式代碼在存放庫中執行,您也可以避免超過分支大小限制。 如需詳細資訊,請參閱 檔案和存放庫大小限制

如果要寫入的數據量很大,而且您想要讓記憶體自動調整,請寫入 。/local_disk0