開始
用戶指南
管理指南
參考指南
資源
2022年8月16日更新
給我們反饋
Databricks文件係統(DBFS)是掛載到Databricks工作空間中的分布式文件係統,可在Databricks集群上使用。DBFS是可伸縮對象存儲的抽象,提供了以下優點:
允許你山存儲對象,以便您可以無縫地訪問數據,而不需要憑據。
允許您使用目錄和文件語義而不是存儲url與對象存儲進行交互。
將文件持久化到對象存儲中,因此在終止集群後不會丟失數據。
所有用戶都對掛載在DBFS上的對象具有讀寫訪問權限DBFS根.
但是,如果使用實例配置文件創建掛載,用戶隻能訪問IAM角色允許的訪問權限,並且隻能從配置為使用該實例配置文件的集群訪問。這也意味著使用實例概要文件創建的掛載不能通過DBFS CLI訪問。
DBFS中的默認存儲位置稱為DBFS根.幾種類型的數據存儲在以下DBFS根位置:
/ FileStore:導入數據文件、生成圖、上傳庫。看到特殊的DBFS根位置.
/ FileStore
/ databricks-datasets:公共數據集示例。看到特殊的DBFS根位置.
/ databricks-datasets
/ databricks-results:下載後生成的文件完整的結果的查詢。
/ databricks-results
/磚/ init:全局和集群命名(已棄用)init腳本.
/磚/ init
/用戶/蜂巢/倉庫:非外部Hive表的數據和元數據。
/用戶/蜂巢/倉庫
在一個新的工作空間中,DBFS根目錄有以下默認文件夾:
DBFS根目錄還包含不可見且不能直接訪問的數據(包括掛載點元數據、憑據和某些類型的日誌)。
Databricks帳戶admin在創建工作區時設置DBFS根存儲桶賬戶控製台或者是賬戶API 2.0.有關詳細信息,請參見AWS存儲配置.
一些推薦的配置可以在創建桶和工作區之後執行:
Databricks建議您啟用S3對象級日誌記錄您的DBFS根桶,以允許更快的問題調查。請注意,啟用S3對象級日誌記錄會增加AWS的使用成本。
一段時間以來,DBFS在Databricks帳戶中使用S3桶來存儲沒有存儲在DBFS掛載點上的數據。如果您的Databricks工作空間仍然使用這個S3桶,Databricks建議您聯係Databricks支持人員,將數據移動到您自己帳戶中的S3桶中。
Databricks給出以下使用建議:
數據寫入掛載點的路徑(/ mnt)存儲在DBFS根目錄的外部。盡管DBFS根目錄是可寫的,但Databricks建議您將數據存儲在掛載的對象存儲中,而不是DBFS根目錄中。DBFS根不用於生產客戶數據。
/ mnt
您可以使用客戶管理的密鑰作為該特性的一部分來加密DBFS根數據工作空間存儲的客戶管理鍵,該軟件可在公共預覽.
下麵的文章提供了關於特殊DBFS根位置的更多詳細信息:
樣本數據集(databricks-datasets)
可以使用DBFS文件瀏覽器瀏覽和搜索DBFS對象。
請注意
管理員用戶必須先啟用DBFS瀏覽器界麵,才能使用它。看到管理DBFS文件瀏覽器.
點擊數據在側邊欄。
單擊DBFS按鈕。
瀏覽器以垂直泳道的層次結構顯示DBFS對象。選擇一個對象來展開層次結構。使用前綴搜索在任何泳道中查找DBFS對象。
方法列出DBFS對象DBFS CLI,DBFS API 2.0,文件係統實用程序(dbutls .fs),火花api,本地文件的api.看到訪問DBFS.
將對象存儲掛載到DBFS允許您像訪問本地文件係統上的對象一樣訪問對象存儲中的對象。
有關更多信息,請參見通過Databricks掛載雲對象存儲.
重要的
嵌套的安裝不支持。例如,不支持以下結構:
storage1安裝,/ mnt / storage1
storage1
/ mnt / storage1
storage2安裝,/ mnt / storage1 / storage2
storage2
/ mnt / storage1 / storage2
Databricks建議為每個存儲對象創建單獨的掛載項:
storage2安裝,/ mnt / storage2
/ mnt / storage2
所有用戶都對掛載在DBFS上的對象具有讀寫訪問權限DBFS根.有關更多信息,請參見關於DBFS權限的重要信息.
可以將數據上傳到DBFS文件上傳界麵,並可以使用DBFS CLI,DBFS API 2.0,文件係統實用程序(dbutls .fs),火花api,本地文件的api.
在Databricks集群中,使用Databricks文件係統實用程序、Spark api或本地文件api訪問DBFS對象。在本地計算機上,可以使用Databricks CLI或DBFS API訪問DBFS對象。
在本節中:
DBFS和本地驅動程序節點路徑
文件上傳界麵
磚CLI
dbutils
DBFS API
火花api
本地文件的api
您可以在DBFS或集群的本地驅動程序節點上處理文件。您可以使用神奇的命令如% fs或% sh.你也可以使用文件係統實用程序(dbutls .fs).
% fs
% sh
Databricks使用FUSE掛載提供對存儲在雲中的文件的本地訪問。FUSE掛載是一種安全的虛擬文件係統。
默認blob存儲(根)的路徑為dbfs: /.
dbfs: /
的默認位置% fs而且dbutils.fs是根。因此,從根或外部桶中讀寫:
dbutils.fs
% f <命令> / <路徑>
dbutils.fs.<命令>(“/ <路徑> /”)
% sh默認情況下從本地文件係統讀取。訪問根目錄或根目錄中掛載的路徑% sh以…作為道路的開頭/ dbfs /.一個典型的用例是,如果您正在使用像TensorFlow或scikit-learn這樣的單節點庫,並希望向雲存儲讀寫數據。
/ dbfs /
% sh <命令> / dbfs / <路徑> /
你也可以使用單節點文件係統api:
進口操作係統操作係統.<命令>(“dbfs / tmp /”)
%fs的默認位置是root%fs ls /tmp/ %fs mkdirs /tmp/my_cloud_dir %fs cp /tmp/test_dbfs.txt /tmp/file_b.txt . %fs ls /tmp/ %fs mkdirs /tmp/my_cloud_dir
# dbutils的默認位置。fs是根dbutils.fs.ls(“/ tmp /”)dbutils.fs.把(“/ tmp / my_new_file”,“這是雲存儲中的一個文件。”)
%sh的默認位置是本地文件係統% sh ls / dbfs / tmp /
操作係統命令的默認位置是本地文件係統進口操作係統操作係統.listdir(“dbfs / tmp /”)
% fs而且dbutils.fs默認從根目錄讀取dbfs: /).要從本地文件係統讀取,必須使用文件:/.
文件:/
%fs <命令>文件:/<路徑> dbutls .fs.<命令> . file:/<路徑>(“文件:/ <路徑> /”)
% sh默認情況下從本地文件係統讀取,因此不要使用文件:/:
% sh <命令> / <路徑>
#使用%fs和dbutils。fs,you must use file:/ to read from local filesystem%fs ls文件:/tmp %fs mkdirs文件:/tmp/my_local_dir dbutils.fs.ls(“文件:/ tmp /”)dbutils.fs.put(“文件:/ tmp / my_new_file”,"這是本地驅動節點上的文件。")
默認情況下,# %sh從本地文件係統讀取% sh ls / tmp
dbutils.fs.ls(“/ mnt / mymount”)df=火花.讀.格式(“文本”).負載(“dbfs: / mymount / my_file.txt”)
該表和圖表總結並說明了本節中描述的命令以及何時使用每種語法。
命令
默認位置
從根目錄讀取
從本地文件係統讀取
根
添加文件:/到路徑
當地司機節點
添加/ dbfs到路徑
/ dbfs
命令操作係統。< >
如果您的本地計算機上有小的數據文件,您想要用Databricks進行分析,您可以輕鬆地將它們導入數據庫文件係統(DBFS)使用兩個文件上傳接口之一:從DBFS文件瀏覽器或從筆記本電腦。
文件上傳到FileStore目錄中。
該特性默認是禁用的。管理員必須先啟用DBFS瀏覽器界麵,才能使用它。看到管理DBFS文件瀏覽器.
單擊上傳按鈕。
在上傳數據到DBFS對話框,選擇目標目錄或輸入一個新目錄。
在文件框、拖放或使用文件瀏覽器選擇要上傳的本地文件。
上載的文件可由訪問工作區的每個人訪問。
該特性默認是啟用的。如果管理員有禁用這個特性,您將無法選擇上傳文件。
創建一個表格使用UI,見在Databricks SQL中上傳數據並創建表.
要上傳數據以便在筆記本中使用,請遵循以下步驟。
創建一個新的筆記本或打開一個現有的筆記本,然後單擊>上傳數據
在DBFS中選擇目標目錄存放上傳的文件。目標目錄默認為/ shared_uploads / <您的電子郵件地址> /.
/ shared_uploads / <您的電子郵件地址> /
將文件拖放到拖放目標上或單擊瀏覽在本地文件係統中定位文件。
上傳完成後,單擊下一個.
如果您上傳了CSV、TSV或JSON文件,Databricks將生成代碼,顯示如何將數據加載到DataFrame中。
若要將文本保存到剪貼板,請單擊複製.
點擊完成回到筆記本上。
DBFS命令行界麵(CLI)使用DBFS API 2.0向DBFS公開一個易於使用的命令行界麵。使用這個客戶機,您可以使用與Unix命令行中使用的命令類似的命令與DBFS交互。例如:
列出DBFS中的文件dbfs ls將本地文件./apple.txt放到dbfs:/apple.txt目錄下DBFS cp ./apple.txt DBFS:/apple.txt#獲取dbfs:/apple.txt並保存到本地文件./apple.txtDBFS cp DBFS:/apple.txt ./apple.txt . conf遞歸地將本地dir ./banana放到dbfs:/banana目錄下DBFS cp -r ./banana DBFS:/香蕉
有關DBFS命令行界麵的更多信息,請參見磚CLI.
dbutils.fs提供類似文件係統的命令來訪問DBFS中的文件。本節提供幾個示例,介紹如何使用DBFS向DBFS寫入文件和從DBFS讀取文件dbutils.fs命令。
提示
要訪問DBFS的幫助菜單,請使用dbutils.fs.help ()命令。
dbutils.fs.help ()
dbutils.fs.mkdir(“foobar /”)
dbutils.fs.把(“foobar / baz.txt”,“你好,世界!”)
dbutils.fs.頭(“foobar / baz.txt”)
dbutils.fs.rm(“foobar / baz.txt”)
顯示(dbutils.fs.ls(“dbfs: / foobar”))
筆記本支持速記-% fs神奇的命令——訪問dbutils文件係統模塊。大多數dbutils.fs命令可以通過以下命令獲得% fs神奇的命令。
列出DBFS根目錄% fs ls#遞歸地刪除foobar下的文件%fs rm -r foobar#用字符串"Hello world!"覆蓋文件"/mnt/my-file"% fs把- f“/ mnt /我的文件”“Hello world !”
看到DBFS API 2.0而且上傳一個大文件到DBFS.
當你使用Spark api時,你引用文件“/ mnt /培訓/ file.csv”或“dbfs: / mnt /培訓/ file.csv”.下麵的示例寫入文件foo.text到DBFS/ tmp目錄中。
“/ mnt /培訓/ file.csv”
“dbfs: / mnt /培訓/ file.csv”
foo.text
/ tmp
df.寫.格式(“文本”).保存(“/ tmp / foo.txt”)
當您使用Spark api訪問DBFS時(例如,通過調用spark.read),您必須指定到目標DBFS位置的完整絕對路徑。該路徑必須從DBFS根目錄開始,用/或dbfs: /,它們是等價的。例如,讀取一個名為people.json在DBFS位置/ FileStore,你可以指定以下任何一個:
spark.read
/
people.json
df=火花.讀.格式(“json”).負載(“dbfs: / FileStore / people.json”)df.顯示()
或者:
df=火花.讀.格式(“json”).負載(“/ FileStore / people.json”)df.顯示()
以下操作無效:
#這行不通。路徑必須是絕對的。它#必須以'/'或'dbfs:/'開頭。df=火花.讀.格式(“json”).負載(“FileStore / people.json”)df.顯示()
可以使用本地文件api對DBFS路徑進行讀寫。Databricks為每個集群節點配置一個FUSE掛載/ dbfs它允許運行在集群節點上的進程通過本地文件api對底層分布式存儲層進行讀寫。使用本地文件api時,必須提供下麵的路徑/ dbfs.例如:
#使用Python文件係統api將文件寫入DBFS與開放(“/ dbfs / tmp / test_dbfs.txt”,' w ')作為f:f.寫(“Apache Spark太棒了!\ n")f.寫(“年底的例子!”)#讀取文件與開放(“/ dbfs / tmp / test_dbfs.txt”,“r”)作為f_read:為行在f_read:打印(行)
進口scala.io.源瓦爾文件名=“/ dbfs / tmp / test_dbfs.txt”為(行<-源.fromFile(文件名).getline()){println(行)}
下麵列出了適用於每個FUSE和各自Databricks Runtime版本的本地文件API使用的限製。
所有:不支持啟用客戶端加密的Amazon S3掛載。
保險絲V2(默認為Databricks Runtime 6。和7. x)
不支持隨機寫。對於需要隨機寫操作的工作負載,請先在本地磁盤上執行操作,然後將結果複製到/ dbfs.例如:
# python進口xlsxwriter從shutil進口拷貝文件工作簿=xlsxwriter.工作簿(' / local_disk0 / tmp / excel.xlsx ')工作表=工作簿.add_worksheet()工作表.寫(0,0,“關鍵”)工作表.寫(0,1,“價值”)工作簿.關閉()拷貝文件(' / local_disk0 / tmp / excel.xlsx ',' / dbfs / tmp / excel.xlsx ')
不支持稀疏文件。要複製稀疏文件,請使用cp——稀疏=沒有:
cp——稀疏=沒有
美元cp稀疏。file /dbfs/sparse.file error writing“/ dbfs / sparse.file”:操作不支持$ cp——稀疏=從不稀疏。file /dbfs/sparse.file
保險絲V1(默認為Databricks Runtime 5.5 LTS)
如果您在使用FUSE V1時遇到問題< DBR >5.5 LTS, Databricks建議您使用FUSE V2代替。中可以覆蓋默認的FUSE版本< DBR >5.5 LTS通過設置環境變量DBFS_FUSE_VERSION = 2.
< DBR >
DBFS_FUSE_VERSION = 2
隻支持文件小於2 gb大小。如果使用本地文件係統api讀取或寫入大於2GB的文件,可能會看到文件損壞。方法訪問大於2GB的文件DBFS CLI,dbutils.fs、Spark api或使用/ dbfs /毫升文件夾中描述用於深度學習的本地文件api.
/ dbfs /毫升
如果使用本地文件係統api編寫文件,然後立即嚐試使用DBFS CLI,dbutils.fs,或者Spark api,您可能會遇到FileNotFoundException,大小為0的文件,或過時的文件內容。這是意料之中的,因為操作係統默認緩存寫操作。要強製將這些寫操作刷新到持久存儲(在我們的例子中是DBFS),可以使用標準的Unix係統調用同步))。例如:
FileNotFoundException
/ / scala進口scala.sys.過程._//使用本地文件API(通過FUSE掛載)寫一個文件。dbutils.fs.把(“文件:/ dbfs / tmp /測試”,“測試內容”)//刷新到持久存儲。“同步/ dbfs / tmp /測試”!//讀取文件使用"dbfs:/"而不是FUSE掛載。dbutils.fs.頭(“dbfs: / tmp /測試”)
為分布式深度學習應用,需要DBFS訪問來加載、檢查點和記錄數據,Databricks Runtime 6.0及以上版本提供了高性能/ dbfs為深度學習工作負載優化的Mount。
在Databricks Runtime 5.5 LTS中,僅/ dbfs /毫升進行了優化。在這個版本中,Databricks建議將數據保存在/ dbfs /毫升,映射到dbfs: /毫升.
dbfs: /毫升