譯者 | 陳峻
審校 | 孫淑娟
一、云數據倉庫、數據湖和湖倉一體之間的區別
1.數據倉庫
作為一種分析類中央存儲庫,數據倉庫可用于存儲已結構化、且已過濾的數據。而作為數據倉庫典型用戶的數據分析師,他們通常擁有著豐富的SQL知識、以及數據處理能力。他們通過對倉庫里的數據進行優化和轉換,可實現快速地訪問、查詢和分析,并在此基礎上獲取洞見,并構建出儀表板和數據報告,進而推動業務成果的轉換。
2.數據湖
2000年初,最初被Yahoo和Google等大型互聯網公司采用的數據湖,雖然與數據倉庫的數據收集與存儲功能類似,但是,它旨在處理大量原始的、非結構化的、以及半結構化的大數據。因此,與倉庫相比,數據湖通常可以容納更多的數據,并能夠處理更多的用例。
在大多數情況下,各種未經處理的原始數據,會被直接加載到數據湖中,因此它需要具有專業知識的數據科學家,對數據進行后續操作和轉換。正是由于數據湖非常擅長處理各種實時攝取的數據流,因此它的一個典型用例是:以批處理的方式,啟用自助服務式(self-service)的ELT,并對數據進行自動化的處理、調度、構建、以及維護各個數據管道的復雜性。
3.湖倉一體(Data Lakehouse)
不同于簡單的數據倉庫和數據湖架構,湖倉一體通常被認為是一種高度重視開放式的數據管理新架構。它的目標是通過將上述兩者組合到一個平臺上,直接對數據湖本身運行分析,以消除多個查詢引擎的繁瑣。
二、什么是Snowflake?
作為一種基于云端的數據倉庫,Snowflake專為在AWS、Microsoft Azure和Google Cloud Platform(GCP)等主流云服務提供商上運行的數據業務所構建。它是一種軟件即服務(SaaS)的解決方案,能夠使企業將收集到數據整合到集中位置,以便進行分析。
Snowflake被認為是云數據倉庫行業中最大的公司之一。它提供了為支持商業智能用例而構建的自助式服務平臺,并且允許用戶利用SQL來查詢數據,并創建可以推動業務決策的儀表板和報告。
三、什么是Databricks?
與Snowflake類似,Databricks也是一個基于云端的數據平臺。但是它屬于數據湖類型,而非數據倉庫。當然,Databricks如今已擴展到了湖倉一體化的范疇。如果說Snowflake專注于分析和報告的話,那么Databricks更多重視的是機器學習、數據科學、以及數據流使用案例。由于能夠支持多種開發語言,因此Databricks更適合于數據工程師和數據科學家。
作為一個基于Apache Spark的大數據平臺,Databricks主要被用于存儲大量未經處理的原始數據。簡單而言,它圍繞著Apache Spark的分布式計算框架,構建了數據管理層,并消除了人員管理和維護基礎設施的負擔。
四、架構
1.Snowflake
Snowflake是一種基于ANSI SQL的無服務器解決方案,并具有完全分離的存儲和計算處理層。Snowflake利用大規模的并行處理(Massively Parallel Processing,MPP)來處理查詢,每個單獨的虛擬倉庫(即計算集群)都在本地存儲著整個數據集的一部分。Snowflake使用微分區(Micro Partitions)的方式,在內部將數據組織并優化為已壓縮的列格式,以便它們被保存到云端存儲處。
Snowflake能夠以自動化的方式,管理文件大小、壓縮、結構、元數據、統計信息、以及其他用戶不可見、且只能通過SQL查詢和訪問到的數據對象。Snowflake中的所有處理,都使用被稱為虛擬倉庫的計算集群來完成。這些集群往往由多個MPP節點所組成。
作為一種SaaS解決方案,Snowflake在后端管理著大量來自用戶請求、基礎設施、元數據、身份驗證、查詢解析、訪問控制、以及優化等方面的內容。由于能夠跑在AWS、GCP和Azure三大云平臺上,因此Snowflake的倉庫技術能夠方便用戶非常便捷地使用SQL進行快速查詢。
2.Databricks
同屬于SaaS方案且能夠跑在AWS、GCP和Azure的Databricks,卻在架構上完全不同。它源于Spark,是一種圍繞著單個節點或集群所構建的、可以被部署在云端的多語言引擎。Databricks可以運行在控制層面和數據層面之外。其中,數據層面包括了待處理的所有數據,而控制層面包括了由Databricks管理的所有后端服務。與Snowflake類似,Databricks也是無服務器的,因此能夠支持近乎無限的并發請求。
總的說來,Databricks架構包含了如下核心組件:
(1)Databricks的Delta Lake
Delta Lake是Databricks的數據倉庫版本。它作為一個額外的存儲系統,運行在傳統的數據湖之上。Delta Lake的核心是將現有數據湖上的流式和批處理統一起來,充當Spark計算和云存儲之間的中間地帶。Delta Lake架構包含如下三種類型的數據表:
- 青銅表:原始數據
- 白銀表:稍做“提純”的數據,但尚未準備好被使用
- 黃金表:已提純且可以使用的數據
Delta在各張表中所保存的所有數據,都會以parquet文件形式,被保存在云存儲中。
(2)Databricks的Delta Engine
Delta Engine是一個與Apache Spark相兼容的高性能查詢引擎,可協助處理Delta Lake中的數據。它通過其改進的查詢優化器,針對SQL和DataFrame的工作負載,提高了Delta Lake的整體性能。由C++編寫的該優化器,被策略性地放置在了執行層和云對象存儲之間,充當著緩存層和執行引擎的作用。
(3)Notebooks
Notebooks包含著可運行的代碼、可視化且可描述的文本。它們可以通過基于Web的界面被訪問到。借助各種Notebooks,開發者可以使用Scala、R、SQL、以及Python語言,以協作的方式構建不同的模型。
(4)MLFlow
MLflow是由Databricks創建的另一個開源平臺,可用于配置機器學習的環境,并從Spark、TensorFlow、ONNX等現有庫中運行測試,以實現大規模、可靠地管理機器學習和數據科學等生命周期。MLFlow具有三個核心組件,分別是:實驗跟蹤、模型管理和模型開發。
五、可擴展性
1.Snowflake
Snowflake具有自動擴展和自動掛起兩種功能,可以在空閑和忙碌期間啟停集群。雖然在Snowflake中,開發者無法任意調整節點的大小,但是可以通過單擊,來自動擴展出多達10個倉庫。當然,在單個表中每個隊列的DML被限制為20個。
2.Databricks
Databricks也具有自動擴展的功能。也就是說,集群會根據單個查詢和用戶并發的實際使用情況,自動擴縮容。不過,由于Databricks主要是為數據科學家設計的,其UI較為復雜,因此用戶調整起來會略顯費勁。
六、安全與合規
無論是在Snowflake中,還是在Databricks中,所有靜態存儲的數據都會被自動加密。它們都提供了RBAC(role-based access control,基于角色的訪問控制),都能夠符合諸如:SOC 2 Type II、ISO 27001、HIPAA、以及GDPR等各種法規和認證。
不過,不同于Snowflake,Databricks并沒有存儲層,開發者需要使用的是諸如AWS S3、Azure Blob Storage、Google Cloud Storage等對象級存儲。
七、數據支持
Snowflake和Databricks都支持半結構化(如:Parquet、Avro、Orc、CSV、以及JSON)和結構化的數據。Snowflake于2021年9月宣布支持非結構化的數據。而在湖倉一體方面,Databricks還可以處理任何時間類型或格式的數據,其中就包含了非結構化的數據。由于Databricks支持多種開發語言,因此它在該領域占有優勢。它的Spark引擎更適合于處理數據流、ML、AI、以及與數據科學工作相關的負載。而由于Snowflake最初是作為一種數據分析工具被設計的,因此其核心能力源于SQL。顯然,SQL以處理數據轉換見長。當然,Snowflake最近也宣布了通過引入Snowpark來支持Python、Java和Scala等語言。
八、管理
Databricks已經消除了大量與管理、操作Spark相關的基礎設施工作,但是用戶仍然需要通過大量的手動輸入,來調整集群大小、更新配置、以及切換計算選項。可見,Databricks的門檻較高,學習曲線較為陡峭。
而基于SQL的Snowflake更為簡單,用戶只需單擊幾下鼠標,即可開始使用。同時,Snowflake還提供了針對對象、角色、用戶、權限、以及訪問等方面的精細控制。而Databricks除了執行常規作業之外,也允許用戶實施保護日志、控制作業屬性、以及所有權。
九、數據保護
1.Snowflake
Snowflake有兩個獨特的功能--時間旅行(Time Travel)和故障安全(Fail-safe)。其中,時間旅行功能是在數據更新之前,保留數據的狀態。一般而言,時間旅行僅限于1天之內,但是企業客戶則可以指定最多90天的時間跨度。該功能可被應用到數據表、模式和數據庫上。而故障安全是指,在時間旅行保留期結束后的7天期限內,可保護和恢復歷史數據。
2.Databricks
Databricks的Delta Lake也具有時間旅行的功能。其工作方式與Snowflake非常相似。在Delta Lake中存儲的數據會被自動實施版本控制,以便用戶按需訪問或使用該數據的歷史版本。Databricks的主要優勢之一在于,由于它運行在基于對象級存儲的Spark上,因此其本身無需存儲任何數據,也就省去了各種本地用例。
十、售價
1.Snowflake
Snowflake采取的是基于個人倉庫使用情況的計費模式。由于各種倉庫有著X-Small、Small、Medium、Large、X-Large等多種尺寸,因此它們在規模成本和服務器集群數量上有著很大的差異。X-small類型的Snowflake倉庫的基本定價,從大約每秒0.0003積分或每小時1積分開始。而Snowflake標準版上的X-Small倉庫的按需使用模式,則是從每積分2美元起售。
隨著倉庫規模的使用量遞增,成本和積分的消耗也會增加。對此,Snowflake提供了幾個版本,來根據使用情況讓用戶預購積分。通常情況下,預購容量的模式會比按需模式的費率更低。按需存儲的售價為每月40美元,前端客戶則為每TB 23美元。當然,積分的成本也會因業務層級的不同,而有所差別。
2.Databricks
與Snowflake相比,Databricks提供的存儲要便宜得多。畢竟所有內容都被存儲在客戶自己的對象級存儲環境中。由于其中的部分數據可能不需要被頻繁訪問,因此我們可以對它們進行高度優化。例如,S3中的存儲起售價為每TB 23美元。而且根據數據規模和訪問頻率的需求,此類費用可能會大幅降低。
Databricks是基于DBU(Databricks處理單元)定價的,其中包括經典、高級和企業三種商業價格等級。價格區間會從每個DBU 0.07美元到0.65美元不等,具體取決于DBU的大小。
十一、云基礎設施
作為托管式SaaS服務,Snowflake和Databricks無論在啟動,還是在運行后端基礎架構等方面都處理得不錯。而且,這兩種解決方案都可以在多個不同的云環境中運行。當然,基于Spark的Databricks,需要更多的手動輸入和微調,才能充分發揮其潛能。
十二、性能
由于Snowflake和Databricks支持的用例各不相同,因此,我們很難簡單斷言哪個性能更好。值得注意的是,Snowflake在數據訪問時,優化了所有的存儲,更適合交互式查詢。
十三、Databricks和Snowflake的主要區別
Snowflake在處理生產級商業智能負載方面非常強大,這些負載往往需要以一致性的方法,運行或生成報告和儀表板。因此,Snowflake可以取代傳統的數據倉庫,并提供更快的性能。
不過,基于SQL的Snowflake并沒有針對處理大量數據(特別是流式用例)進行優化。它以簡單的方式,協助數據分析師將數據民主化(democratize),進而擴展并處理更多的負載。當然,其核心用例仍然是數據倉庫。
作為基于Spark的解決方案,Databricks的湖倉一體平臺支持更廣泛的功能需求,特別是:ELT、數據科學、以及機器學習等方面。Databricks允許開發者將數據保存在自己的托管對象存儲中,并提供了托管式Delta Lake(數據處理引擎)和Delta Engine(SQL查詢引擎)良好使用體驗。
通過Databricks的Delta Lake和Delta Engine平臺,開發者雖然基本可以實現由Snowflake提供的所有功能,但是鑒于它是一個復雜的工具,開發者仍然需要花時間去優化和構建功能齊全的湖倉一體化。同時,Databricks也會比Snowflake更需要用戶投入維護時間和經歷。
總而言之,Databricks和Snowflake數據平臺都可以支持高性能的SQL查詢與數據處理。其中,Databricks提供了所有部件和說明手冊,來設置一整套功能齊全的湖倉一體化,因此更善于處理數據工程、ETL/ELT、數據科學和數據流負載;而Snowflake則通過各種預構建的工具,處理生產環境中的數據,以供后期分析使用。
原文鏈接:https://dzone.com/articles/databricks-vs-snowflake-the-definitive-guide
譯者介紹
陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。