今天這篇文章主要介紹數(shù)據(jù)湖(data lake)的定義,其次介紹各大云廠商的解決方案以及目前的開(kāi)源解決方案。
定義 看下維基百科的定義:數(shù)據(jù)湖是一個(gè)以原始格式(通常是對(duì)象塊或文件)存儲(chǔ)數(shù)據(jù)的系統(tǒng)或存儲(chǔ)庫(kù)。數(shù)據(jù)湖通常是所有企業(yè)數(shù)據(jù)的單一存儲(chǔ)。用于報(bào)告、可視化、高級(jí)分析和機(jī)器學(xué)習(xí)等任務(wù)。數(shù)據(jù)湖可以包括來(lái)自關(guān)系數(shù)據(jù)庫(kù)的結(jié)構(gòu)化數(shù)據(jù)(行和列)、半結(jié)構(gòu)化數(shù)據(jù)(CSV、日志、XML、JSON)、非結(jié)構(gòu)化數(shù)據(jù)(電子郵件、文檔、pdf)和二進(jìn)制數(shù)據(jù)(圖像、音頻、視頻)。定義中的重點(diǎn)內(nèi)容我用紅色字體標(biāo)注出來(lái),簡(jiǎn)單說(shuō)明一下這幾點(diǎn)。
●原始格式:數(shù)據(jù)不做預(yù)處理,保存數(shù)據(jù)的原始狀態(tài)
●單一存儲(chǔ):存儲(chǔ)庫(kù)中會(huì)匯總多種數(shù)據(jù)源,是一個(gè)單一庫(kù)
●用于機(jī)器學(xué)習(xí):除了 BI 、報(bào)表分析,數(shù)據(jù)湖更適用于機(jī)器學(xué)習(xí)
數(shù)據(jù)湖并不是新概念,最早 2015 年就被提出來(lái)了,可以看到數(shù)據(jù)湖經(jīng)常被拿來(lái)跟目前的數(shù)據(jù)倉(cāng)庫(kù)作比較。下面是谷歌搜到的一篇比較早的數(shù)據(jù)湖和數(shù)據(jù)倉(cāng)庫(kù)對(duì)比的文章:
至于為什么數(shù)據(jù)湖慢慢走近大家的視野,并且越來(lái)越多的跟倉(cāng)庫(kù)作比較。我認(rèn)為主要是跟機(jī)器學(xué)習(xí)的廣泛應(yīng)用有很大關(guān)系。
數(shù)據(jù)湖和數(shù)倉(cāng)對(duì)比 大數(shù)據(jù)剛興起的時(shí)候,數(shù)據(jù)主要用途是 BI 、報(bào)表、可視化。因此數(shù)據(jù)需要是結(jié)構(gòu)化的,并且需要 ETL 對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。這個(gè)階段數(shù)據(jù)倉(cāng)庫(kù)更適合完成這樣的需求,所以企業(yè)大部分需要分析的數(shù)據(jù)都集中到數(shù)據(jù)倉(cāng)庫(kù)中。而機(jī)器學(xué)習(xí)的興起對(duì)數(shù)據(jù)的需求更加靈活,如果從數(shù)據(jù)倉(cāng)庫(kù)中提數(shù)會(huì)有一些問(wèn)題。比如:數(shù)據(jù)都是結(jié)構(gòu)化的;數(shù)據(jù)是經(jīng)過(guò)處理的可能并不是算法想要的結(jié)果;算法同學(xué)與數(shù)倉(cāng)開(kāi)發(fā)同學(xué)溝通成本較大等。我在工作中就遇到這種情況,做算法的同學(xué)需要經(jīng)常理解我們的數(shù)倉(cāng)模型,甚至要深入到做了什么業(yè)務(wù)處理,并且我們的處理可能并不是他們的想要的?;谏厦嬗龅降母鞣N問(wèn)題,數(shù)據(jù)湖的概念應(yīng)運(yùn)而生。下面的表格對(duì)比一下數(shù)據(jù)湖和數(shù)據(jù)倉(cāng)庫(kù)的區(qū)別,主要來(lái)自 AWS 。
從以上表格的區(qū)別上我們可以看到數(shù)據(jù)湖的應(yīng)用場(chǎng)景主要在于機(jī)器學(xué)習(xí),并且在用的時(shí)候再建 Schema 更加靈活。雖然數(shù)據(jù)湖能夠解決企業(yè)中機(jī)器學(xué)習(xí)應(yīng)用方面的數(shù)據(jù)訴求,可以與數(shù)據(jù)倉(cāng)庫(kù)團(tuán)隊(duì)解耦。但并不意味著數(shù)據(jù)湖可以取代數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)在高效的報(bào)表和可視化分析中仍有優(yōu)勢(shì)。
云廠商的解決方案 近幾年云計(jì)算的概念也是非?;?,各大云廠商自然不會(huì)錯(cuò)失數(shù)據(jù)湖的解決方案。下面簡(jiǎn)單介紹阿里云、AWS 和 Azure 分別的數(shù)據(jù)產(chǎn)品。
●阿里云:Data Lake Analytics,通過(guò)標(biāo)準(zhǔn)JDBC直接對(duì)阿里云OSS,TableStore,RDS,MongoDB等不同數(shù)據(jù)源中存儲(chǔ)的數(shù)據(jù)進(jìn)行查詢和分析。DLA 無(wú)縫集成各類商業(yè)分析工具,提供便捷的數(shù)據(jù)可視化。阿里云OSS 可以存儲(chǔ)各種結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù),可以當(dāng)做一個(gè)數(shù)據(jù)湖的存儲(chǔ)庫(kù)。DLA 使用前需要?jiǎng)?chuàng)建 Schema 、定義表,再進(jìn)行后續(xù)分析。
●AWS:Lake Formation,可以識(shí)別 S3 或關(guān)系數(shù)據(jù)庫(kù)和 NoSQL 數(shù)據(jù)庫(kù)中存儲(chǔ)的現(xiàn)有數(shù)據(jù),并將數(shù)據(jù)移動(dòng)到 S3 數(shù)據(jù)湖中。使用 EMR for Apache Spark(測(cè)試版)、Redshift 或 Athena 進(jìn)行分析。支持的數(shù)據(jù)源跟阿里云差不多。
●Azure:Azure Data Lake Storage,基于 Azure Blob 存儲(chǔ)構(gòu)建的高度可縮放的安全 Data Lake 功能,通過(guò) Azure Databricks 對(duì)數(shù)據(jù)湖中的數(shù)據(jù)進(jìn)行處理、分析。但文檔中并沒(méi)有看到支持其他數(shù)據(jù)源的說(shuō)明
開(kāi)源解決方案 除了云廠商提供的方案外, 還有一個(gè)開(kāi)源解決方案——kylo 。這個(gè)框架的關(guān)注度并不高,社區(qū)不是很活躍。大概看了下官網(wǎng)的介紹視頻,基本上與云廠商的解決方案一致。支持多種數(shù)據(jù)源,分析時(shí)創(chuàng)建 Schema。另外,Databricks 團(tuán)隊(duì)(開(kāi)源 Spark 框架)年初開(kāi)源了 Delta lake 框架, Delta lake 是存儲(chǔ)層,為數(shù)據(jù)湖帶來(lái)了可靠性。Delta Lake 提供 ACID 事務(wù)、可伸縮的元數(shù)據(jù)處理,并統(tǒng)一流和批數(shù)據(jù)處理。Delta Lake運(yùn)行在現(xiàn)有數(shù)據(jù)湖之上,與Apache Spark api完全兼容。架構(gòu)圖如下:
小結(jié) 今天這篇文章主要介紹了數(shù)據(jù)湖的概念,以及數(shù)據(jù)湖與數(shù)據(jù)倉(cāng)庫(kù)的區(qū)別,然后簡(jiǎn)單了解了目前數(shù)據(jù)湖在云廠商和開(kāi)源軟件中的解決方案。作為數(shù)倉(cāng)建設(shè)和數(shù)據(jù)開(kāi)發(fā)人員要密切關(guān)注這種新的概念,如果我們的工作中遇到這種問(wèn)題我們也可以思考是否可以推動(dòng)數(shù)據(jù)湖的建設(shè)。另外,作為中小企業(yè)上云的方案可能是一個(gè)比較好的選擇,畢竟開(kāi)源解決方案目前不是很成熟,社區(qū)還不是很強(qiáng)大。