使用Databricks作为分析平台
簡(jiǎn)介:?SPARK+AI SUMMIT 2020中文精華版線上峰會(huì)將會(huì)帶領(lǐng)大家一起回顧2020年的SPARK又產(chǎn)生了怎樣的最佳實(shí)踐,技術(shù)上取得了哪些突破,以及周邊的生態(tài)發(fā)展。本文是阿里巴巴高級(jí)技術(shù)專家章劍鋒做的相關(guān)分享,介紹了YipitData公司基于Databricks平臺(tái)搭建的分析平臺(tái)。
原視頻鏈接:https://developer.aliyun.com/live/43188
活動(dòng)鏈接:SPARK中文峰會(huì)7月4日(二)|Ray On Spark
Spark等引擎都是作為工具被開發(fā)者使用的,而我們使用這些工具的最終目的是搭建合適的平臺(tái)提供給業(yè)務(wù)方。以下是YipitData‘s Platform的相關(guān)介紹。
一、為什么要用到平臺(tái) (Why a platform) ?
YipitData是一家咨詢公司,其客戶主要是投資基金以及財(cái)富五百?gòu)?qiáng)中的一些公司。該公司通過自己的數(shù)據(jù)產(chǎn)品進(jìn)行分析,提供給客戶相應(yīng)的數(shù)據(jù)分析報(bào)告。YipitData的主要產(chǎn)出方式和賺錢方式就是做數(shù)據(jù)分析,其公司內(nèi)部有53個(gè)數(shù)據(jù)分析師,卻只有3個(gè)數(shù)據(jù)工程師。數(shù)據(jù)分析的基礎(chǔ)是數(shù)據(jù),所以對(duì)于該公司來(lái)說大數(shù)據(jù)分析的平臺(tái)是非常重要的。
二、平臺(tái)中有什么 (What is in our platform) ?
YipitData公司希望通過他們自己的數(shù)據(jù)分析平臺(tái)能夠讓數(shù)據(jù)分析師不需要付出太大的成本就完成數(shù)據(jù)分析的任務(wù),也就是Own The Product,而這個(gè)過程主要包括如下圖所示的Data Collection、Data Exploration、ETL Workflows和Report Generation四個(gè)階段。
上面我們提到Y(jié)ipitData公司的人員主要包括數(shù)據(jù)分析師和數(shù)據(jù)工程師,其中數(shù)據(jù)分析師來(lái)分析數(shù)據(jù)并且提供基于數(shù)據(jù)的問題解答和分析報(bào)告,數(shù)據(jù)工程師來(lái)給數(shù)據(jù)分析師提供數(shù)據(jù)和分析數(shù)據(jù)的平臺(tái)。
Databricks中的一個(gè)產(chǎn)品叫做Workspace,簡(jiǎn)單來(lái)說它就是一個(gè)Notebook,你可以在其中寫python、Scala、SQL等語(yǔ)言的代碼,然后交由Databricks平臺(tái)去執(zhí)行并返回結(jié)果。YipitData' Platform是基于Databricks平臺(tái)來(lái)搭建的,簡(jiǎn)而言之就是他們對(duì)Databricks進(jìn)行了更深一層的封裝,創(chuàng)建了一個(gè)Python Library,更加方便分析師來(lái)進(jìn)行使用。
(一)獲取數(shù)據(jù) (Ingesting data)
YipitData公司的數(shù)據(jù)量是非常大的,有壓縮后大小超過1PB的Parquet,60K的Tables和1.7K的Databases。他們的數(shù)據(jù)收集使用的是Readypipe,簡(jiǎn)單理解就是一個(gè)網(wǎng)絡(luò)爬蟲,在有了URL之后,將網(wǎng)頁(yè)內(nèi)存download下來(lái)然后進(jìn)行存儲(chǔ),實(shí)現(xiàn)從URLs到Parquet。首先,使用Readypipe對(duì)網(wǎng)頁(yè)進(jìn)行爬取,然后以流的方式源源不斷的寫入kinesis Firehose,kinesis Firehose會(huì)接著將數(shù)據(jù)寫入AWS的S3上。在這個(gè)階段所存儲(chǔ)的數(shù)據(jù)都是原始JSON數(shù)據(jù),是沒有schema的,這類數(shù)據(jù)對(duì)于數(shù)據(jù)分析師來(lái)說是很難進(jìn)行使用的。因此,第二步我們要對(duì)數(shù)據(jù)進(jìn)行一些格式轉(zhuǎn)換和清理,比較典型的做法是將JSON文件轉(zhuǎn)換成Bucket,這一步也自帶了壓縮效果。轉(zhuǎn)換完成之后會(huì)有兩個(gè)輸出,如下圖所示,一個(gè)是元數(shù)據(jù),會(huì)寫入Glue Metastore,另外一個(gè)是數(shù)據(jù),會(huì)寫入Parquet Bucket中。通過上面的過程,就完成了數(shù)據(jù)的收集和清理過程,整個(gè)過程是非常經(jīng)典,非常有參考價(jià)值的。
另外,因?yàn)閿?shù)據(jù)流是實(shí)時(shí)數(shù)據(jù),每隔一段時(shí)間就會(huì)產(chǎn)生一些JSON文件,屬于小文件,時(shí)間久了S3上面會(huì)存在非常多的小文件,帶來(lái)性能方面的許多問題,于是要對(duì)小文件做相應(yīng)的Merge處理,將小文件匯聚成大文件,這對(duì)后續(xù)的處理非常有幫助。
YipitData公司所使用的的數(shù)據(jù)都是第三方數(shù)據(jù),他們本身不生產(chǎn)任何數(shù)據(jù),而使用第三方數(shù)據(jù)會(huì)面臨一些問題,主要包括如下四類問題:
Various File Formats
Permissions Challenges
Data Lineage
Data Refreshes
上面幾類問題是在實(shí)際業(yè)務(wù)中經(jīng)常遇到的,如果不解決好自然也不能有很好的成果產(chǎn)出。YipitData公司解決上面幾類問題主要是靠Databricks平臺(tái),比如上傳并利用額外的元數(shù)據(jù)將文件轉(zhuǎn)為parquet等,如下圖所示。
(二)表實(shí)用程序 (Table Utilities)
YipitData's Platform提供了一些table utilities來(lái)幫助分析師創(chuàng)建table和管理table。比如下圖所示的create_table函數(shù),可以幫助數(shù)據(jù)分析師更快速地創(chuàng)建table。
上圖所示的是一個(gè)非常典型的Spark Job的場(chǎng)景,通常包括read、processing和write三個(gè)模塊。但是對(duì)于YipitData公司來(lái)說,上面的過程仍然是一個(gè)比較繁瑣的過程,因?yàn)樵摴咀钪匾娜蝿?wù)是進(jìn)行數(shù)據(jù)分析,且大多數(shù)人員也是數(shù)據(jù)分析師,如果讓數(shù)據(jù)分析師使用Spark API去完成上述過程,還是有一定門檻的。對(duì)于YipitData公司來(lái)說,最好是把一些功能進(jìn)行封裝,不要暴露太多的底層功能,所以有了上面的create_table函數(shù),大大降低了數(shù)據(jù)分析師的使用難度。
(三)集群管理 (Cluster Management)
對(duì)于數(shù)據(jù)分析師來(lái)說,最后還是要進(jìn)行計(jì)算,就牽涉計(jì)算資源的管理,那么YipitData是怎么做的呢?
我們知道,搭建一個(gè)Spark集群并不是很難,但是如何搭建一個(gè)能夠最優(yōu)化地解決問題的Spark集群并不是那么容易,因?yàn)镾park集群有非常多的配置,而這項(xiàng)工作如果交給數(shù)據(jù)分析師來(lái)做的話就更不簡(jiǎn)單了。為了解決易用性的問題,YipitData的工程師參照T-Shirt的Size劃分巧妙地將集群劃分成SMALL、MEDIUM、LARGE三類,如下圖所示,數(shù)據(jù)分析師在使用的時(shí)候雖然少了靈活性,但是節(jié)省了很多集群配置的時(shí)間,大大的提高了工作效率。背后的原理也是進(jìn)行更深層次的封裝,將眾多參數(shù)設(shè)置隱藏起來(lái),數(shù)據(jù)分析師只需要像選擇T-Shirt的尺寸一樣做選擇即可,而無(wú)需關(guān)心背后的復(fù)雜配置如何實(shí)現(xiàn)。
在集群管理方面,Databricks還提供了許多其他的API來(lái)對(duì)集群的計(jì)算資源進(jìn)行管理,比如可以通過REST API控制集群,對(duì)集群做各種各樣的配置,還可以對(duì)集群的配置進(jìn)行動(dòng)態(tài)調(diào)整等等,如下圖所示。
(四)ETL Workflow的自動(dòng)化 (ETL Workflow Automation)
YipitData使用Airflow來(lái)實(shí)現(xiàn)ETL Workflow的自動(dòng)化。越來(lái)越多的人使用Airflow來(lái)管理ETL Workflow,已經(jīng)逐漸成為ETL的一個(gè)標(biāo)準(zhǔn)工具。對(duì)于數(shù)據(jù)工程師來(lái)說,Airflow的使用不是很難:首先構(gòu)建一個(gè)DAG,然后去定義其中的TASK,最后定義下這些TASKS的依賴關(guān)系即可。但是,終究是要寫一段代碼來(lái)實(shí)現(xiàn)這個(gè)過程,就需要有人來(lái)維護(hù),對(duì)于大多數(shù)員工是數(shù)據(jù)分析師的YipitData來(lái)說就不是那么合適了。因此,YipitData使用Airflow+databricks的API來(lái)自動(dòng)化構(gòu)建DAGs。具體來(lái)說,每個(gè)文件夾就代表一個(gè)DAG,每個(gè)Notebook就代表一個(gè)Task,Notebook中指定一些屬性(內(nèi)部是python腳本),然后通過API來(lái)自動(dòng)化構(gòu)建DAG文件。通過上面的過程完成整個(gè)ETL的自動(dòng)化,其中用戶只需要指定Notebook中的參數(shù)值即可。YipitData自動(dòng)化創(chuàng)建Workflows的過程如下圖所示,整個(gè)流程都是在Databricks平臺(tái)上擴(kuò)展得到的。
三、Q&A
Q1:Databricks和Dataworks都是一站式的數(shù)據(jù)分析平臺(tái),兩者的區(qū)別是什么?
A1:兩者的側(cè)重點(diǎn)不一樣。Dataworks綁定在阿里云,而Databricks可以在各個(gè)云上使用;Databricks綁定了Spark引擎,而Dataworks可以使用各種引擎;Dataworks在數(shù)據(jù)治理上更強(qiáng)一些,而Databricks的Spark應(yīng)用更強(qiáng)一些。
Q2:目前Zeppelin、Jupyter、Databricks產(chǎn)品的分析功能有些類似,他們有什么特別推薦的使用場(chǎng)景嗎?
A2:這幾個(gè)產(chǎn)品最大的特點(diǎn)是提供了交互式的編程環(huán)境,和傳統(tǒng)的IDE開發(fā)不同,他們有著更好的開發(fā)效率,尤其是在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)方面。另外,這類產(chǎn)品也不是只能做交互式開發(fā),也可以用來(lái)做ETL。
Zeppelin釘釘群
下面是Zeppelin的釘釘群二維碼,大家后續(xù)有任何問題可以加入群來(lái)討論。
關(guān)鍵詞:Databricks、Spark、Analysis Platform、YipitData
獲取更多 Spark+AI SUMMIT 精彩演講視頻回放和ppt,請(qǐng)向本公眾號(hào)后臺(tái)發(fā)送"0704中文峰會(huì)"
對(duì)開源大數(shù)據(jù)和感興趣的同學(xué)可以加小編微信(下圖二維碼,備注“進(jìn)群”)進(jìn)入技術(shù)交流微信群。
Apache Spark技術(shù)交流社區(qū)公眾號(hào),微信掃一掃關(guān)注
總結(jié)
以上是生活随笔為你收集整理的使用Databricks作为分析平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Azure Data Platform
- 下一篇: 代码中的下划线_是什么意思呢?