天天看點

資料中台建設方法論實踐之技術選型

資料中台解決方案包含:資料中台建設方法論、相關技術體系和工具、資料體系等幾大部分構成,前文介紹了資料建設方法論中的資料倉庫建設部分,本文将介紹具體建構數倉的相關技術。

大資料技術肇始于Google,涉及到的相關技術包含資料采集交換技術,面向ETL的計算技術,面向資料查詢分析的計算技術。本文主要介紹面向ETL的資料存儲和計算技術,面向資料查詢分析的計算技術。

一、面向ETL加工的計算技術

離線計算/批處理

離線(offline)計算也叫批處理(batch),與其相對應的是線上(online)計算或實時(realtime)處理

批處理,就是利用大資料的技術(主要是Hadoop),在計算開始前準備好所有資料,計算期間資料不産生變化,得到計算結果後輸出結果再進行下一步計算的方式。

離線計算有如下特點:

1).待處理存量資料大,資料儲存時間長

2).計算前資料可以定義為不發生變化

3).一個計算任務下達計算完成後能得到定量計算結果

随着網際網路等業務的發展,待計算的資料量不斷增加,傳統資料存儲已經無法滿足TB、PB等規模的資料計算需求,在Google等公司的探索下,提供成本低廉且可水準擴容的分布式計算方案逐漸成熟,Google的三篇論文掀起了大資料技術的篇章,關聯的核心技術主要包含如下幾部分:

1)HDFS,是Hadoop上的分布式檔案系統。

HDFS采用主從模式,其架構主要包含NameNode,DataNode,Client三個部分:

  NameNode節點,用于管理和存儲檔案系統的中繼資料。負責管理Hadoop的執行個體,需要解決系統的單點故障問題。

  DataNode節點,管理和存儲實際的資料,并将自己管理的中繼資料資訊上報給NameNode,運作多個執行個體。一般一份資料預設存儲3個副本,分布在3個不同的DataNode上保證資料的可靠性。

  Client,支援使用者讀寫HDFS,從NameNode、DataNode擷取中繼資料或實際資料傳回給使用者。

1)MapReduce

MapReduce 是一種分布式程式設計模型,采用“分而治之”的思想,将一個大規模資料集分解為多個小規模資料,然後分發給叢集中多個節點共同完成計算。這樣可以有效降低每一部分的運算複雜度,達到提高運算效率的目的。

MapReduce模型将計算分為兩個階段:Map階段和Reduce階段,

  Map:映射,對一些獨立元素組成的清單的每一個元素進行指定的操作。每個元素都是被獨立操作的,而原始清單沒有被更改。Map操作是可以高度并行的,這對高性能應用以及并行計算領域的需求非常有用。

  Reduce:化簡,對一個清單的元素進行适當的合并,雖然它不如Map那麼并行,但是因為化簡總是有一個簡單的答案,大規模的運算相對獨立,是以化簡函數在高度并行環境下也很有用。

  

MapReduce由于設計上的一些限制,導緻處理性能較慢,它适合大規模資料集的離線批處理計算。不适合實時的互動式計算,要求快速響應和低延遲,比如BI分析、流式計算、實時分析等。

針對這個問題,業界也有很多優化方案及替代産品,但真正發展起來的,目前主要有Spark。Spark也是一個批量計算架構,它将資料抽象成RDD、DataFrame,這是一種分布式的記憶體抽象,允許在大型叢集上執行基于記憶體的計算,大大減少了疊代計算所需的開銷。

Spark相比MapReduce在以下幾方面具有優勢:

計算模型:Spark将執行模型抽象為通用的有向無環圖(DAG)執行計劃,将多個Stage串聯或者并行執行,無須将中間結果輸出到HDFS中,可加快速度。

存儲形式:Spark RDD支援粗粒度寫操作,對于讀操作,RDD可以精确到每條記錄,這使得RDD可以用來作為分布式索引。

執行政策:MapReduce在資料Shuffle之前花費了大量的時間來排序,Spark支援基于Hash的分布式聚合,排程中采用更為通用的任務執行DAG,每一輪的輸出結果都可以在記憶體緩存。

3)Hive,Hive是基于Hadoop的一個資料倉庫工具,用于建構資料倉庫,可以将結構化的資料檔案映射為一張資料庫表,提供類SQL的查詢功能。其基本原理是将HQL語句轉換成MapReduce任務,

  1. 實時計算/流處理

    批量計算已經能滿足多數大資料計算的場景,然而面對更快速高效地擷取資料中的價值,批計算已經無法滿足需求。

從待計算的資料角度,資料可以分為有界資料集,不會改變的資料集合;無窮資料集,無窮的持續內建的資料集合。批處理面向的就是有界資料集。流處理面向的就是無窮資料集,隻要資料一直在産生,計算就持續地進行。

目前市面上實時處理架構已經逐漸成熟,如Storm/JStorm、Spark Streaming/、淘寶Galaxy、Flink等。

1)Storm/JStorm:是一個免費并開源的分布式實時計算系統。利用Storm可以很容易做到可靠地處理無限的資料流,建構複雜處理的圖結構,同時可以幫助維護消息隊列和消費者,消費者程序從隊列裡取消息,處理完成後,去更新資料庫,或者給其他隊列發新消息。JStorm是阿裡巴巴基于Storm的改進版本産品,相比Storm,JStorm具有更好的性能,更多的功能,也更加穩定,用法基本一緻,可以很好地遷移。

2)Spark Streaming/Structured Streaming,與Storm、Flink等流處理架構相比,Spark Streaming 最大的不同點在于它處理資料的粗粒度是一次處理一小批資料,而其他架構往往采用細粒度的處理模式,一次處理一條資料。Structured Streaming 是Spark重新設計的全新流式引擎,解決了Spark存在的批處理和流處理代碼不統一等問題。

3)Flink,目前比較主流的流式計算引擎,也能支援流處理和批處理兩種應用類型,在Flink的設計中有界資料集是無界資料流的一種特例,是以說有界資料集也是一種資料流,事件流也是一種資料流。Flink在國内得到了廣泛應用,它具有高性能、易于擴充性、容錯,作為純記憶體計算引擎,做了記憶體管理方面的大量優化,另外也支援eventime的處理、支援超大Job、支援exactly-once的處理。在國内阿裡巴巴的大型計算任務中得到了考驗。

流計算的常見應用場景如下:

實時數倉建構:內建流計算現有的諸多資料通道和SQL靈活的加工能力,對流式資料進行實時清洗、歸并、結構化處理。同時,為離線數倉進行有效補充和優化,為資料的實時傳輸提供可計算通道。
實時報表:實時采集、加工流式資料存儲,實時監控和展現業務、客戶各類名額,讓資料化營運實時化。
實時監控:對系統和使用者行為進行實時檢測和分析,實時監測和發現危險行為。
線上系統:實時計算各類資料名額,并利用實時結果及時調整線上系統相關政策,在各類内容投放、無線智能推送領域有大量的應用。
           

二、面向資料分析、查詢和應用的計算技術

1.資料分析

資料分析是指面對大規模的資料集,如何快速進行資料的多元交叉分析,其大部分是聚合型操作,如group by、sum、avg、count等。批計算有足夠的靈活性,但耗時比較久,一些傳統的關系型資料庫以及數倉架構,在一定次元的場景下可以滿足響應要求但資料量受限。在資料應用中,分析類的占比一直不低,是以一些優秀的處理架構,如Impala、Presto、Kylin和AnalyticDB等計算架構逐漸發展起來。針對即席分析的複雜場景,通過對時間、空間的權衡,常見的實作方式有兩種:

ROLAP:以關系資料庫為核心,以關系型結構進行多元資料的表示和存儲,結合星型模式和雪花模式實作,例如Impala、Presto就是此類産品,Oracle用做資料倉庫的時候也屬于此類。

MOLAP:基于多元資料組織的實作,以多元資料組織為核心,形成“立方塊”的結構,通過對“立方塊”進行各類處理産生多元資料報表,典型的産品是kyligence公司的Kylin。

即席分析的常見應用場景如下:

互動式資料分析:企業營運人員在日常工作中經常需要通過SQL從各個次元對目前業務進行分析,提供分析結果以便開展後續動作。離線計算的場景等待時間較久,使用者體驗不好,即席分析可以比較好地規避這個問題。

2.資料查詢

資料查詢滿足處理大規模的資料結果集,同時又需要提供一些快速計算的能力,如條件過濾篩選、線上檢索等能力,快速從大規模結果中得到篩選、檢索結果資訊,并且支援高并發、低延遲的快速響應。這種能力批計算、流計算都無法滿足,是以需要提供線上查詢的能力,常見的線上計算架構如HBase、MongoDB、ElasticSearch等,其主要場景是OLTP類的簡單增删改查、全文檢索等相關操作。

1)HBase,是一種基于列存儲的資料庫,提供供類似OLTP資料庫的即席查詢能力,結合Phoenix來提供SQL形式的查詢能力。其在離線計算中也可以作為資料存儲使用,但鑒于其設計理念并非用于批量的資料分析場景。

2) MongoDB,是一個基于分布式檔案存儲的資料庫,适合于需要可擴充的高性能資料存儲的應用場景,比如在遊戲中存儲使用者的裝備、積分等資訊,在電商物流中存儲訂單資訊,在社交場景中存儲使用者的朋友圈等資訊

3)ElasticSearch,是一個基于Lucene庫的搜尋引擎。它提供了一個分布式、支援多租戶的全文搜尋引擎,支援結構化檢索和資料分析,能對對海量資料進行近實時的處理,它适用于給類似維基百科這樣的知識網站提供全文檢索和搜尋推薦,給電商網站提供搜尋商品資訊的能力,對使用者行為日志如點選、浏覽、收藏、評論的記錄和分析。

線上查詢的常見應用場景如下:

1) 畫像服務:根據對象辨別提供具體的查詢服務,如通過Redis可以提供低延遲,高并發的查詢服務能力;通過HBase可以提供大規模資料的查詢服務能力,征信查詢就是類似的服務。

2)搜尋的應用場景:提供搜尋引擎的能力,為使用者提供模糊比對、行為識别檢索等能力,快速檢索需要的内容,如常見的知識搜尋、商品搜尋等。

3) 營銷圈人:通過一些特定條件,篩選業務所需要的人群,為後續的營銷等工作的開展提供資料。