Spark等引擎都是作為工具被開發者使用的,而我們使用這些工具的最終目的是搭建合適的平臺提供給業務方。以下是YipitData‘s Platform的相關介紹。
一、為什麼要用到平臺 (Why a platform) ?
YipitData是一家諮詢公司,其客戶主要是投資基金以及財富五百強中的一些公司。該公司通過自己的數據產品進行分析,提供給客戶相應的數據分析報告。YipitData的主要產出方式和賺錢方式就是做數據分析,其公司內部有53個數據分析師,卻只有3個數據工程師。數據分析的基礎是數據,所以對於該公司來說大數據分析的平臺是非常重要的。
二、平臺中有什麼 (What is in our platform) ?
YipitData公司希望通過他們自己的數據分析平臺能夠讓數據分析師不需要付出太大的成本就完成數據分析的任務,也就是Own The Product,而這個過程主要包括如下圖所示的Data Collection、Data Exploration、ETL Workflows和Report Generation四個階段。
上面我們提到YipitData公司的人員主要包括數據分析師和數據工程師,其中數據分析師來分析數據並且提供基於數據的問題解答和分析報告,數據工程師來給數據分析師提供數據和分析數據的平臺。
Databricks中的一個產品叫做Workspace,簡單來說它就是一個Notebook,你可以在其中寫python、Scala、SQL等語言的代碼,然後交由Databricks平臺去執行並返回結果。YipitData' Platform是基於Databricks平臺來搭建的,簡而言之就是他們對Databricks進行了更深一層的封裝,創建了一個Python Library,更加方便分析師來進行使用。
(一)獲取數據 (Ingesting data)
YipitData公司的數據量是非常大的,有壓縮後大小超過1PB的Parquet,60K的Tables和1.7K的Databases。他們的數據收集使用的是Readypipe,簡單理解就是一個網絡爬蟲,在有了URL之後,將網頁內存download下來然後進行存儲,實現從URLs到Parquet。首先,使用Readypipe對網頁進行爬取,然後以流的方式源源不斷的寫入kinesis Firehose,kinesis Firehose會接著將數據寫入AWS的S3上。在這個階段所存儲的數據都是原始JSON數據,是沒有schema的,這類數據對於數據分析師來說是很難進行使用的。因此,第二步我們要對數據進行一些格式轉換和清理,比較典型的做法是將JSON文件轉換成Bucket,這一步也自帶了壓縮效果。轉換完成之後會有兩個輸出,如下圖所示,一個是元數據,會寫入Glue Metastore,另外一個是數據,會寫入Parquet Bucket中。通過上面的過程,就完成了數據的收集和清理過程,整個過程是非常經典,非常有參考價值的。
另外,因為數據流是實時數據,每隔一段時間就會產生一些JSON文件,屬於小文件,時間久了S3上面會存在非常多的小文件,帶來性能方面的許多問題,於是要對小文件做相應的Merge處理,將小文件匯聚成大文件,這對後續的處理非常有幫助。
YipitData公司所使用的的數據都是第三方數據,他們本身不生產任何數據,而使用第三方數據會面臨一些問題,主要包括如下四類問題:
- Various File Formats
- Permissions Challenges
- Data Lineage
- Data Refreshes
上面幾類問題是在實際業務中經常遇到的,如果不解決好自然也不能有很好的成果產出。YipitData公司解決上面幾類問題主要是靠Databricks平臺,比如上傳並利用額外的元數據將文件轉為parquet等,如下圖所示。
(二)表實用程序 (Table Utilities)
YipitData's Platform提供了一些table utilities來幫助分析師創建table和管理table。比如下圖所示的create_table函數,可以幫助數據分析師更快速地創建table。
上圖所示的是一個非常典型的Spark Job的場景,通常包括read、processing和write三個模塊。但是對於YipitData公司來說,上面的過程仍然是一個比較繁瑣的過程,因為該公司最重要的任務是進行數據分析,且大多數人員也是數據分析師,如果讓數據分析師使用Spark API去完成上述過程,還是有一定門檻的。對於YipitData公司來說,最好是把一些功能進行封裝,不要暴露太多的底層功能,所以有了上面的create_table函數,大大降低了數據分析師的使用難度。
(三)集群管理 (Cluster Management)
對於數據分析師來說,最後還是要進行計算,就牽涉計算資源的管理,那麼YipitData是怎麼做的呢?
我們知道,搭建一個Spark集群並不是很難,但是如何搭建一個能夠最優化地解決問題的Spark集群並不是那麼容易,因為Spark集群有非常多的配置,而這項工作如果交給數據分析師來做的話就更不簡單了。為了解決易用性的問題,YipitData的工程師參照T-Shirt的Size劃分巧妙地將集群劃分成SMALL、MEDIUM、LARGE三類,如下圖所示,數據分析師在使用的時候雖然少了靈活性,但是節省了很多集群配置的時間,大大的提高了工作效率。背後的原理也是進行更深層次的封裝,將眾多參數設置隱藏起來,數據分析師只需要像選擇T-Shirt的尺寸一樣做選擇即可,而無需關心背後的複雜配置如何實現。
在集群管理方面,Databricks還提供了許多其他的API來對集群的計算資源進行管理,比如可以通過REST API控制集群,對集群做各種各樣的配置,還可以對集群的配置進行動態調整等等,如下圖所示。
(四)ETL Workflow的自動化 (ETL Workflow Automation)
YipitData使用Airflow來實現ETL Workflow的自動化。越來越多的人使用Airflow來管理ETL Workflow,已經逐漸成為ETL的一個標準工具。對於數據工程師來說,Airflow的使用不是很難:首先構建一個DAG,然後去定義其中的TASK,最後定義下這些TASKS的依賴關係即可。但是,終究是要寫一段代碼來實現這個過程,就需要有人來維護,對於大多數員工是數據分析師的YipitData來說就不是那麼合適了。因此,YipitData使用Airflow+databricks的API來自動化構建DAGs。具體來說,每個文件夾就代表一個DAG,每個Notebook就代表一個Task,Notebook中指定一些屬性(內部是python腳本),然後通過API來自動化構建DAG文件。通過上面的過程完成整個ETL的自動化,其中用戶只需要指定Notebook中的參數值即可。YipitData自動化創建Workflows的過程如下圖所示,整個流程都是在Databricks平臺上擴展得到的。
三、Q&A
Q1:Databricks和Dataworks都是一站式的數據分析平臺,兩者的區別是什麼?
A1:兩者的側重點不一樣。Dataworks綁定在阿里雲,而Databricks可以在各個雲上使用;Databricks綁定了Spark引擎,而Dataworks可以使用各種引擎;Dataworks在數據治理上更強一些,而Databricks的Spark應用更強一些。
Q2:目前Zeppelin、Jupyter、Databricks產品的分析功能有些類似,他們有什麼特別推薦的使用場景嗎?
A2:這幾個產品最大的特點是提供了交互式的編程環境,和傳統的IDE開發不同,他們有著更好的開發效率,尤其是在數據分析和機器學習方面。另外,這類產品也不是隻能做交互式開發,也可以用來做ETL。
關鍵詞:Databricks、Spark、Analysis Platform、YipitData