構建企業級數據湖?Azure Data Lake Storage Gen2實戰體驗(上)


背景

相較傳統的重量級OLAP數據倉庫,“數據湖”以其數據體量大、綜合成本低、支持非結構化數據、查詢靈活多變等特點,受到越來越多企業的青睞,逐漸成為了現代數據平台的核心和架構范式。

數據湖的核心功能,簡單地可以分為數據存儲與數據查詢計算兩個部分,在雲端可以有多種的實現選擇。在之前的文章中,我們曾介紹Azure上Azure Data Lake Storage (ADLS Gen1)和Azure Data Lake Analytics (ADLA)這一對可配合使用的服務。這對黃金搭檔正是為數據湖而生,分別對應着大數據存儲和查詢計算的能力。

在數據湖存儲服務方面Azure繼續着快速發展的腳步,在重新梳理了產品思路之后,將ADLS與同為存儲服務的Azure Storage進行了大力整合。的確,在底層存儲基礎設施方面,ADLS完全可以復用Azure Storage久經考驗的存儲機制和成熟實現,並在此基礎上支持企業級大數據分析的特性並進行針對性優化。在這一新體系下的成果,則是微軟於18年開放預覽、於19年2月正式對外發布的Azure Data Lake Storage Gen2 (下稱ADLS Gen2)。第二代ADLS的口號是“不妥協的數據湖平台,它結合了豐富的高級數據湖解決方案功能集以及 Azure Blob 存儲的經濟性、全球規模和企業級安全性”。

那么,全新一代的ADLS Gen2實際體驗如何?在架構及特性上是否堪任大型數據湖應用的主存儲呢?這正是本文希望探討的話題。

 

ADLS Gen2初體驗

百聞不如一見,我們首先來嘗試創建一個ADLS Gen2的實例。需要注意的是,與第一代ADLS是獨立服務不同,ADLS Gen2已經集成於大家熟悉的存儲賬號(Storage Account)的功能體系之中。在建立存儲賬號時,請注意勾選"Advanced"選項卡下"Hierarchical namespace"(中文譯作“層次結構命名空間”)這個看似不起眼的選項:

當這個選項被勾選時,創建出的存儲賬號中的原Blob存儲部分就自然被耳目一新的ADLS Gen2文件系統所替代了:

從這里的產品措辭可以看出,“層次結構”和“文件系統”是反復被強調的ADLS Gen2的最大特點,也是它有別於傳統Blob對象存儲的最大不同。傳統對象存儲雖然從路徑上看起來也具有“目錄”的虛擬概念,但其實目錄通常並不實際存在,可認為僅是Blob對象路徑字符串中的一部分,因為對象存儲本質上是key-value形式的存儲。而ADLS這樣的“文件系統”級別的存儲能力上,目錄則是一等公民可以設置訪問權限等元數據(並且能夠被子節點繼承),也可以使目錄重命名等操作變得十分便捷迅速。這樣的特性無疑使ADLS更適合作為企業數據湖這樣應用的存儲介質。

讓我們繼續操作。點擊"Data Lake Gen2 file systems"來到文件系統的管理界面,可看到支持創建多個File System。我們先新建一個File System,這個步驟非常類似Blob存儲中建立Container:

 

 再嘗試點擊進入剛建立的cloudpickerfs這個文件系統,會發現界面上幾乎空空如也,提示我們需要使用客戶端工具Azure Storage Explorer才可進行操作:

不必對於這個簡單的界面過於失望,ADLS Gen2畢竟還是一個初生的產品,相信之后會得到不斷豐富。事實上在國際版Azure上已經有集成在Portal中的Storage Explorer,目前還在預覽狀態,相信之后也會在中國區發布。

我們打開最新版本的Azure Storage Explorer(該工具成熟度很高,非常推薦),可以看到輕松地識別出了剛才建立的文件系統:

嘗試建立目錄及上傳一些文件,毫無問題:

 

ADLS Gen2特性測試:權限控制

如果說剛才我們走通了最基本的流程,接下來我們則需要對ADLS Gen2的特性進行深度的測試,尤其是針對其“文件系統”的設計目標和大數據應用的典型場景來進行實操體驗。在本文中,我們先聚焦ADLS Gen2的權限控制

我們知道傳統的存儲賬戶主要依靠Access Key和SAS token等方式來進行身份認證,並且在權限控制的粒度上比較粗放,只能設置到整個存儲賬戶或是Blob容器的粒度。而在ADLS Gen2中,一般推薦使用集成度更佳的Azure AD進行訪問身份認證(Access Key和SAS token也同樣支持),而權限方面的控制則可以非常精細:不僅支持文件系統粒度的RBAC權限指定,而且引入了類似POSIX的ACL體系,使得用戶可以將權限設置下沉到目錄乃至文件的級別。這樣一來,ADLS這個大數據存儲服務相當於提供了類似Linux文件系統的權限管理能力,極大地滿足了企業級數據平台在資源管控和權限治理方面的需要。

接下來我們對於權限進行一個基本嘗試。我們在cloudpickerfs文件系統中新建zone-a和zone-b兩個目錄來模擬企業不同業務領域的數據。

然后我們在Azure AD中新建一個用戶Karl:

現在我們希望Karl擁有整個文件系統的讀權限,但還能夠對zone-a進行修改和寫入。該需求應該如何實現呢?在ADLS Gen2上可以輕松地結合使用RBAC和目錄ACL來達到目的。我們先為Karl添加文件系統粒度的Storage Blob Data Reader角色,這使得Karl可以基於RBAC權限機制讀取cloudpickerfs這個文件系統中的所有數據:

然后再在Azure Storage Explorer中定位到zone-a,對該目錄賦予Karl讀寫及執行權限,這樣Karl就能夠實現對於zone-a這個目錄的完全控制。可以看到,這里的操作體驗與Linux/Unix中的ACL權限機制非常接近:

(圖中Default一欄對應的是目錄中子項將繼承的權限)

權限設置完成后,我們接下來使用一台Linux VM通過AzCopy這個工具來進行相關權限的實操驗證。AzCopy作為微軟官方的文件復制工具,已經全面地添加了對於ADLS Gen2的支持。

首先我們使用Karl的身份進行AzCopy的登錄,注意需指定tenant-id參數為用戶Karl所屬AD的id:

./azcopy login --tenant-id xxxxxxxx-yyyy-zzzz-zzzz-xxxxxxxxxxxx 
To sign in, use a web browser to open the page https://microsoft.com/devicelogin 
and enter the code ******** to authenticate

 

這里按照AzCopy要求打開瀏覽器進行身份認證

成功后AzCopy現在就擁有Karl這個用戶的權限了。我們先驗證其全局讀的能力,嘗試下載一個cloudpickerfs文件系統下根目錄的文件:

./azcopy cp https://cloudpickerdlg2.dfs.core.windows.net/cloudpickerfs/credit_card_loans.csv .
INFO: Scanning...
INFO: Using OAuth token for authentication.

Job e3ed4551-713a-2e40-5e47-72b5ee3e3280 has started
0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total,

Job e3ed4551-713a-2e40-5e47-72b5ee3e3280 summary
Elapsed Time (Minutes): 0.0333
Total Number Of Transfers: 1
Number of Transfers Completed: 1
Number of Transfers Failed: 0
Number of Transfers Skipped: 0
TotalBytesTransferred: 60991
Final Job Status: Completed

 可以看到這個讀取並下載的任務順利完成。我們再測試向zone-a寫入的權限是否被正確地開啟了,把剛才下載的本地文件上傳到zone-a文件夾:

./azcopy cp ./credit_card_loans.csv https://cloudpickerdlg2.dfs.core.windows.net/cloudpickerfs/zone-a/
INFO: Scanning...
INFO: Using OAuth token for authentication.

Job a9dc4d08-c279-974e-707d-cceb3fad3720 has started
0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total,

Job a9dc4d08-c279-974e-707d-cceb3fad3720 summary
Elapsed Time (Minutes): 0.0333
Total Number Of Transfers: 1
Number of Transfers Completed: 1
Number of Transfers Failed: 0
Number of Transfers Skipped: 0
TotalBytesTransferred: 60991
Final Job Status: Completed

 再次獲得了成功!最后,為了驗證Karl僅擁有zone-a的寫入權限,我們嘗試向另一個目錄zone-b寫入看看效果:

./azcopy cp ./credit_card_loans.csv https://cloudpickerdlg2.dfs.core.windows.net/cloudpickerfs/zone-b/
INFO: Scanning...
INFO: Using OAuth token for authentication.

Job 484e24c1-366b-e94b-79b9-8f6351a4d503 has started
0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total,

Authentication failed, it is either not correct, or expired, or does not have the correct permission -> github.com/Azure/azure-storage-azcopy/azbfs.newStorageError, /home/vsts/work/1/s/azbfs/zc_storage_error.go:41
===== RESPONSE ERROR (ServiceCode=AuthorizationPermissionMismatch) =====
Description=403 This request is not authorized to perform this operation using this permission., Details: (none)
   PUT https://cloudpickerdlg2.dfs.core.windows.net/cloudpickerfs/zone-b/credit_card_loans.csv?resource=file&timeout=901
   Authorization: REDACTED
   User-Agent: [AzCopy/10.2.1 Azure-Storage/0.1 (go1.12; linux)]
   X-Ms-Cache-Control: []
   X-Ms-Client-Request-Id: [d8504958-5666-42c1-6041-6db6602713a9]
   X-Ms-Content-Disposition: []
   X-Ms-Content-Encoding: []
   X-Ms-Content-Language: []
   X-Ms-Content-Type: [text/csv; charset=utf-8]
   X-Ms-Version: [2018-11-09]
   --------------------------------------------------------------------------------
   RESPONSE Status: 403 This request is not authorized to perform this operation using this permission.
   Content-Length: [227]
   Content-Type: [application/json;charset=utf-8]
   Date: [Sat, 10 Aug 2019 16:33:21 GMT]
   Server: [Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0]
   X-Ms-Error-Code: [AuthorizationPermissionMismatch]
   X-Ms-Request-Id: [206085ca-601f-0035-2699-4f617e000000]
   X-Ms-Version: [2018-11-09]

也如我們所期望的那樣,向zone-b這個未授權目錄的寫入失敗了。本次實驗充分證明,ADLS Gen2大數據文件系統在ACL方式的加持下,可以輕松實現對目錄層級的細粒度權限控制。

 

總結

Azure Data Lake Storage Gen2是微軟Azure全新一代的大數據存儲產品,專為企業級數據湖類應用所構建。它被稱為“不妥協的存儲基礎設施”,是因為它繼承了Azure Blob Storage易於使用、成本低廉的特點,同時又加入了目錄層次結構、細粒度權限控制等企業級特性。值得一提的是,這個新近發布的PaaS服務也已經在Azure中國區正式上線。如果您近期有基於Azure構建數據平台的需求,ADLS Gen2非常值得考慮。

在雲間拾遺的本次實踐中,我們從無到有地創建了ADLS Gen2實例並進行了上傳下載等基本操作;我們還基於一個相對復雜的需求場景深度體驗了其權限控制特性。整個的測試體驗是相當流暢的。在本文的下篇,我們還將進一步關注ADLS Gen2的目錄原子操作能力,以及大數據集群掛載場景的表現。敬請期待。

“雲間拾遺”專注於從用戶視角介紹雲計算產品與技術,堅持以實操體驗為核心輸出內容,同時結合產品邏輯對應用場景進行深度解讀。歡迎掃描下方二維碼關注“雲間拾遺”微信公眾號,或訂閱本博客。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM