Azure Databricks大數據構建營 掐指一算,azure 大數據Azure Databricks大數據構建營 掐指一算數據分析,這恐怕是任何大數據系統最核心的功能和目標,畢竟只有經過妥善的分析并得出結論,才能從所積累的海量數據中獲得業務價值。那么,我們基于Azure Databricks構建的大數據系統,......
數據分析,這恐怕是任何大數據系統最核心的功能和目標,畢竟只有經過妥善的分析并得出結論,才能從所積累的海量數據中獲得業務價值。那么,我們基于Azure Databricks構建的大數據系統,除了像之前介紹過的那樣處理實時數據流之外,在海量離線數據的分析和計算方面,又具備哪些優勢?本篇將帶領你見分曉。
本次《Azure Databricks大數據構建營》系列文章,將主要圍繞Azure Databricks以及其它配套服務,通過一系列實戰教程告訴大家如何基于Azure云打造完全運行在云端的閉環大數據平臺。
內容涵蓋:Azure Databricks的基礎知識,以及如何借助Azure Databricks實現流計算(Structure Streaming)、批處理(Spark SQL)、安全訪問控制以及機器學習能力等。
本系列的第一篇文章概括介紹了有關Azure Databricks的基礎知識,錯過的童鞋可以點擊這里回看;第二篇文章介紹了如何基于Azure Databricks開發實時告警系統,可以點擊這里回看。而本篇,主要將介紹如何對離線數據進行分析和計算,進而獲得業務所需的各類見解。
背景介紹
一般來說,離線數據的分析都會運行OLAP SQL查詢,因而下文將主要圍繞SparkSQL,一個可以通過Spark來進行SQL分析的可實時、可離線計算框架展開介紹。下文場景基于集成Azure Datalake Gen2并啟用Databricks Delta Lake作為外部存儲實現計算存儲分離,通過SparkSQL分析新冠肺炎實時統計數據。而相關資源依然會沿用之前兩篇文章的Demo所創建的資源組。
Delta Lake是一種可以提高數據湖可靠性的開源存儲層,由Databricks開發并開源。Delta Lake提供了ACID事務和可縮放的元數據處理,并可統一流處理和批數據處理。Delta Lake在現有Data Lake的頂層運行,并可與Apache Spark API完全兼容。
具體而言,Delta Lake提供了:
Spark上的ACID事務:可序列化的隔離級別可避免讀者看到不一致的數據。
可縮放的元數據處理:利用Spark的分布式處理能力,輕松處理包含數十億文件的PB級表的所有元數據。
流式處理和批處理統一:Delta Lake中的表是批處理表,也是流式處理源和接收器。流式處理數據引入、批處理歷史回填、交互式查詢功能都是現成的。
架構強制:自動處理架構變體,以防在引入過程中插入錯誤的記錄。
按時間順序查看:數據版本控制支持回滾、完整的歷史審核線索和可重現的機器學習試驗。
更新插入和刪除:支持合并、更新和刪除操作,以啟用復雜用例,如更改數據捕獲、漸變維度(SCD)操作、流式處理更新插入等。
總的來說,Delta Lake不僅能在需要事務符合ACID特性的場景提供支持,還針對性能也做了相當大的代碼優化,本文的實現也是基于Delta Lake,需要注意數據格式需要轉換成delta。
正常情況下,Azure Datalake Gen2與Delta Lake的集成需要在Spark中增加配置項spark.delta.logStore.class=org.apache.spark.sql.delta.storage.AzureLogStore,并且集群需要在lib庫中支持hadoopazuredatalake/hadoopazure/wildflyopenssl JAR,具體過程可以見這里。所以這時PaaS的優勢就顯示出來了:Azure Databricks在集群創建好的同時就已經在集群上啟用了該庫,直接調用即可。Azure Datalake Gen2的創建過程本文不再贅述,具體見官方文檔。
本文將介紹兩種常見的集成方式,如下圖所示,并做幾點說明:
cmd2:非掛載方式
cmd2中通過Scala代碼演示Azure Databricks集成Azure Datalake Gen2的認證配置項,通過創建擁有IAM角色「Storage Blob Data Contributor」的服務主體來做認證,驗證通過后就可直接調用Datalake里的文件了,注意相關變量需要替換。
cmd3:掛載方式
cmd3中通過Python代碼演示Azure Databricks如何掛載Azure Datalake Gen2,身份驗證過程和cmd2的方式一樣。這種方式的好處是直接可以把遠端的Azure Datalake掛載到Azure Databricks上,就好像在使用本地磁盤一樣使用Datalake,本文更推薦并且采用該模式,同時注意相關變量需要替換。
另外,本文的環境位于Azure中國區,所以相關域名都是https://login.partner.microsoftonline.cn,如果位于全球Azure中,那么相關域名將會是https://login.microsoftonline.com。
其實從最佳實踐角度來說,本文并不是實現的最好方式,因為在Notebook里的認證信息全部都是明文出現。最好的方式應該集成Azure密鑰保管庫來隱藏密碼,該方式不再本文贅述,有興趣的同學自行研究吧,附上鏈接供參考。
引入數據源并運行SparkSQL
前面提到,本文所采用的示例數據是和新冠肺炎實時統計數據相關,講到這里有必要介紹一個微軟提供的開放數據集Repo,其中包含各種場景下的csv/json/parquet格式的原始和脫敏數據,本文所用的新冠肺炎數據也是在這里獲取的。
選擇CSV格式數據作為數據源,下載好之后上傳到Azure DataLake,在Container data下面再創建一個Source文件夾作為存放原始數據的目錄徑。
原始數據確定好之后,就可以通過Notebook來做SparkSQL分析了。本文用到的示例Notebook已經上傳到了這里,幾個重要配置簡單說明下:
COVIDDF:COVIDDF為定義的DataFrame,通過spark.read.format(“csv”)格式并指定掛載路徑引入數據;
COVIDDF.write.mode(“append”).format(“delta”):通過Append追加方式寫入目標表中,注意這里的格式delta,也就是前面提到的需要做格式轉換,寫入的表也需要指定路徑,并會在Azure Dalalake中生成相應的文件;
ChinaCOVID及ChinaCOVID1:經過上面的建表過程后就可以運行SparkSQL來做SQL查詢了。
總結
一個通過集成Azure Datalake Gen2作為外部存儲并采用Delta Lake格式進行SparkSQL分析的示例就完成了,本文基本上使用了PySpark來實現,其實除此之外通過SQL或者Scala也是一樣可以實現的,有興趣的同學可以自己再深入研究下吧。
有關如何通過SparkSQL實現數據的離線分析和計算,就是這樣了。隨后的內容中,我們還將繼續介紹如何實現安全訪問控制和機器學習能力。通過這些真實場景中的最佳實踐分享,也能幫助大家更清楚地認識到Azure Databricks的價值。敬請期待!
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部