簡體   English   中英

數據塊中的存儲選項

[英]Storage options in databricks

我對 databricks 環境比較陌生。 我的公司為我設置了一個 databricks 帳戶,我在其中從 s3 存儲桶中提取數據。 我有傳統關系數據庫的背景,所以理解數據塊對我來說有點困難。

我有以下問題:

- mount 只是一個連接(鏈接到 s3/外部存儲),沒有在 DBFS 上存儲任何東西,還是它實際上將數據存儲在 DBFS 上?

-我在某處讀到 DBFS 也已掛載? 我的理解是 DBFS 是 databricks 存儲,我如何才能看到 DBFS 可用的總存儲量是多少?

-我們為公司中的不同團隊提供不同的集群,我無法訪問所有集群,從 s3 導出數據時,我是否必須在我的代碼中設置一些內容,以確保我的數據框和表不屬於我正在使用的集群的其他用戶無法訪問我在 databricks 中創建的內容。

- 數據庫表存儲在哪里? 是在 DBFS 上嗎? 在存儲選項方面,除了數據庫、DBFS、外部(s3、azure、jdbc/odbc 等)之外,還有其他存儲嗎?

- 當我們加載表/數據框時,它們是否總是存儲在內存中? 有沒有辦法查看內存中文件大小的限制?

謝謝!

好問題! 我會盡力為您解答這些問題。

mount 只是一個連接(鏈接到 s3/外部存儲),在 DBFS 上沒有存儲任何東西,還是它實際上將數據存儲在 DBFS 上? 我在某處讀到 DBFS 也已掛載? 我的理解是 DBFS 是 databricks 存儲,我怎樣才能看到 DBFS 可用的總存儲量是多少?

DBFS 是 S3 之上的一個抽象層,讓您可以像訪問本地文件系統一樣訪問數據。 默認情況下,當您部署 Databricks 時,您會創建一個用於存儲並可通過 DBFS 訪問的存儲桶。 掛載到 DBFS 時,實際上是將 S3 存儲桶掛載到 DBFS 上的路徑。 更多細節在這里

我們為公司中的不同團隊提供不同的集群,我無法訪問所有集群,從 s3 導出數據時,我是否必須在我的代碼中設置一些內容,以確保我所使用的數據框和表不屬於我正在使用的集群的其他用戶無法訪問在 databricks 中創建。

將 S3 存儲桶掛載到 DBFS 上的路徑將使您的 Databricks 工作區中的其他人可以使用該數據。 如果您想確保沒有其他人可以訪問數據,則必須采取兩個步驟。 首先,使用 IAM 角色而不是掛載,並將授予 S3 存儲桶訪問權限的 IAM 角色附加到您計划使用的集群。 其次,限制對集群的訪問僅限於可以訪問數據的人。 通過這種方式,您可以鎖定哪些集群可以訪問數據,哪些用戶可以訪問這些集群。

數據庫表存儲在哪里? 是在 DBFS 上嗎? 在存儲選項方面,除了數據庫、DBFS、外部(s3、azure、jdbc/odbc 等)之外,還有其他存儲嗎?

數據庫表存儲在 DBFS 上,通常位於/FileStore/tables路徑下。 在這里閱讀更多。

當我們加載表/數據幀時,它們是否總是存儲在內存中? 有沒有辦法查看內存中文件大小的限制?

這取決於您的查詢。 如果您的查詢是SELECT count(*) FROM table那么是的,整個表都會加載到內存中。 如果您正在過濾,那么 Spark 將嘗試提高效率,只讀取執行查詢所需的表部分。 文件大小的限制與集群的大小成正比。 Spark 將在整個集群的內存中對數據進行分區。 如果您的內存仍然不足,那么通常是時候增加集群的大小或優化您的查詢了。 Databricks 上的自動縮放有助於前者。

謝謝!

別客氣!

編輯:內存中是指 RAM,DBFS 不做任何處理。 要查看可用空間,您必須登錄 AWS/Azure 帳戶並檢查與 Databricks 關聯的 S3/ADLS 存儲。

如果您通過 Spark API 保存表,它們也將位於FileStore/tables路徑上。 UI 利用相同的路徑。

集群由驅動節點和工作節點組成。 如果需要,您可以為驅動程序使用不同的 EC2 實例。 這都是一個系統,該系統就是集群。

Spark 支持對與表關聯的鑲木地板文件進行分區。 事實上,這是提高查詢性能的關鍵策略。 按查詢中常用的謂詞進行分區。 這與內存中的分區是分開的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM