如今,大多數業務價值來自對資料和由資料提供動力的產品的分析,而不是軟體本身。由多個應用程式孤島生成的資料被合併並大大增強,以提供更好的客戶體驗。從資料中獲取價值包括建立統一的資料架構以及資料工程和資料科學團隊的共同努力。資料工程涉及構建和維護資料基礎設施和資料管道,而資料科學涉及將原始資料轉換為有用的資料,並透過分析和ML工作負載得出見解。
現代統一資料架構包括可建立,管理和支援資料收集,處理,分析和ML工作負載的基礎架構,工具和技術。在組織中建立和執行資料架構需要部署到雲和託管,使用多種技術(開源和專有)和語言(python,sql,java),並涉及不同的熟練資源(工程師,科學家,分析師,管理員)。具有集中式資料基礎結構可避免重複資料和工作,並在組織中維護單一真相來源以有效利用,這具有成本效益。
> Figure 1: Conceptual flow of data through different stages
許多組織定期生成,處理和儲存大量資料,以進行業務分析和運營。大資料分析和處理應用程式面臨的挑戰概括為3V,5V,7V甚至更高。在本文中,我考慮了現代資料體系結構的七個主要挑戰:
· 多樣性:資料從不同的資料來源以各種格式,結構,協議和大小到達。該體系結構應管理資料多樣化,同時提供一致的資料訪問。它應該提供靈活性以及對架構變化實施限制。
· 速度:架構應管理快速移動的資料以在較短的時間範圍內產生結果,而慢速移動的資料以定期或按需產生結果。該解決方案應隨著資料速度的變化而有效地擴大或縮小。
· 數量:架構應處理傳入的資料量-小,大或突發。它應該有效地管理傳入資料以及歷史資料,併為事務和分析用例提供正確的選項。
· 可見性:系統中存在但不可見的資料與根本不存在的資料一樣好(或壞)。該體系結構應管理資料可見性和可訪問性及其關係和沿襲詳細資訊。它應啟用資料版本控制,以檢視資料集如何隨時間變化並回滾到特定版本或時間。
· 價值:資料體系結構的最終結果是能夠進行資料驅動的分析以進行業務決策,或者構建資料驅動的產品來增強客戶體驗。
如圖1所示,這些挑戰在資料流經現代大資料架構時處於不同的階段。為了應對這些挑戰,將資料攝取,處理,儲存,機器學習建模和使用者分離到單獨的隔離元件中,可以在這些階段中獨立修復,擴充套件或替換資源,而不會影響其他階段。
資料生產者
資料生產者以各種方式生成結構化,非結構化或半結構化格式的資料。資料生產者可以是生成關係資料的事務性應用程式和作業系統,也可以是生成非關係資料的社交媒體移動應用程式,IoT裝置,點選流或日誌檔案。資料來源可以具有不同的資料突變率-來自OLTP事務應用程式的資料經歷繁重的寫入操作,而來自其他OLAP系統的資料則經歷繁重的讀取操作卻具有較低的寫入操作。從關係資料庫產生的資料通常具有靜態模式,而分散式非關係資料儲存具有動態模式。不同系統產生的資料以json,csv,parquet,avro等不同格式到達。
資料擷取
供應商生成的大量資料透過各種技術(例如批處理攝取,微批處理,更改資料捕獲,釋出-訂閱,同步-非同步和流攝取)被攝取到大資料系統中。資料提取的推拉機制均與諸如訂購,訊息傳遞保證,傳遞確認,訊息保留,訊息老化和加水印之類的功能一起使用。資料架構應有效地處理效能,吞吐量,故障率要求,並避免系統受到限制。透過批次處理獲取資料用於複雜處理和深度分析;實時流用於快速反饋和異常檢測。通常,按計劃的時間間隔進行批處理攝入具有可預測的工作量,而即時進行的批處理攝入具有不可預測的工作量。對於流攝取,資料在進入系統後應立即可查詢,並提供可立即採取行動的見解。
資料處理
資料處理涉及各種方法,例如清理,分析,驗證,豐富和聚合資料集。它涉及資料建模和對映源-目標架構。資料體系結構應同時支援模式實施,以避免意外更改(寫模式),同時應隨需求的發展靈活地修改模式(讀模式)。對於緩慢移動的資料集,採用批處理技術來攪動大型資料集,執行復雜的轉換併產生深刻的見解。以前,批處理曾經是長期執行的工作,但是透過使用分散式大型並行處理引擎(例如Spark),可以降低延遲。對於快速移動的資料集,採用實時流技術,例如在滾動時間視窗上進行聚合和過濾,以透過使用Spark流或Flink生成即時見解。諸如python,java,scala和sql之類的語言主要用於資料處理。
以前,Lambda / Kappa體系結構提供統一的分析,但是用於批處理和實時處理的單獨路徑導致重複的資源和工作量。但是,透過使用諸如資料塊之類的框架的現代體系結構,可以將批處理和實時處理組合到一條路徑中。隨著資料處理工作的數量和複雜性的增加,可以使用工作流工具(如Airflow,Nifi,Luigi等)以及虛擬化容器服務(如Docker或Kubernetes)來構建複雜的DAG(有向無環圖)和高效的管道。隨著資料速度的變化,由於使用或需求的突然激增,處理作業應進行彈性擴充套件以處理資料突發和資料加速。
資料儲存
資料體系結構應透過分散式儲存,物件儲存和專用儲存選項(nosql db,column db,timeseries db等)有效地管理系統中處理和儲存的大量資料。以前,多叢集分散式Hadoop系統在每個節點上都結合了儲存和計算功能。但是,現代解決方案使儲存與計算脫鉤,因此可以使用各種計算引擎來分析相同的資料。解耦儲存採用高效的列式資料索引和壓縮技術。集中儲存可避免重複分佈在多個系統中的資料副本,併為使用者提供更好的訪問控制。雲資料湖是任何現代資料解決方案中必不可少的組成部分,並存儲無限量的資料。資料湖的根本挑戰是它們通常只能新增,並且很難更新記錄。三角洲湖泊和HUDI解決方案透過將ACID屬性引入資料湖泊解決了這一挑戰。透過正確配置諸如分割槽,清理,壓縮,改組等設定,可以改善資料處理的效能。
機器學習建模
在由資料工程師建立的管道準備好資料集之後,資料科學家將進行進一步的整理,驗證和標記資料,以進行特徵工程和模型構建。向外擴充套件資料準備與向外擴充套件ML模型不同。擴充套件ML很難,並且訓練模型通常不是多執行緒的。一旦訓練了ML模型,便將模型大規模部署在多個節點上,並生成推斷端點以提供預測。
MLOps和DevOps將幫助資料工程師和資料科學家管理和自動化端到端ML工作流。現代資料體系結構支援MLOps實踐,以實現模型訓練,測試,超引數更新和實驗的自動化和可追溯性,從而可以在生產中大規模部署ML模型。為了跟蹤實驗和部署ML模型,使用了諸如MLflow或Kubeflow之類的開源工具。將模型部署到生產中並不是終點。持續監控模型的資料和模型準確性是否有任何漂移。當檢測到模型質量下降時,將捕獲模型接收的資料並將其與訓練資料集進行比較。重新訓練模型,將其重新部署到生產中,並再次更新推斷端點,並且此過程在ML生命週期中繼續進行。使用影子部署,金絲雀部署和A / B測試,可以提高模型部署到生產的效率。
> Figure 2: Various Open source and proprietary solutions at different data stages
資料消費者
在資料和ML管道的末尾,資料和資料體系結構的價值是由資料使用者透過分析服務,資料科學和運營產品來利用資料而獲得的。
在完成所有資料的處理,整理和挖掘之後,目標是透過互動式探索性分析,報告,視覺化,資料科學和統計建模提供可操作的價值見解,以便企業可以制定基於證據的資料驅動型決策。根據用例的分析成熟度,執行描述性,預測性和規範性分析。對語言,查詢引擎和庫的豐富支援可用於分析。用於分析的典型語言是sql,python和R。使用大資料查詢引擎(例如hive,spark sql,cassandra cql,impala等)和搜尋引擎(例如Solr,Lucene,Elastic Search等)。資料科學家使用熊貓,matplotlib,numpy,scipy,scikitlearn,張量流,pytorch等庫。
資料驅動的應用程式透過資料平臺中的API和微服務支援業務的實時運營。資料產品可以使用建立在資料儲存上的API提供豐富的資訊,或者它們可以是提供預測和建議的參考ML端點。
圖2顯示了在構建現代資料體系結構的每個階段可用的各種開源產品和專有產品。
元資料管理
元資料管理包括資料分類,資料關係和資料沿襲技術。資料編目提供了更智慧的資料掃描方法,可以自動推導資料結構和對映。它描述了資料特徵,例如資料集的質量,沿襲和配置檔案統計。資料體系結構應允許使用者附加標籤和關鍵字,以輕鬆搜尋資料資產。資料體系結構可以提供增強的功能,例如自動公開資料中的相關性,資料損壞,聯接,關係和預測。隨著資料集種類和數量的增加,大資料應用程式的元資料本身可能變得如此之大,以至於資料體系結構應包括用於資料發現的搜尋工具並用作資料清單。民主資料訪問和自助服務管理需要可伸縮的元資料管理。
資料質量與完整性
資料質量是為了確保透過不同管道階段及其生命週期在整個資料流中保持準確,完整和一致的資料記錄。這確保了資料對於計劃,決策和運營是可靠且值得信賴的。為了確保資料的完整性,我們需要在資料進入系統時以及在所有階段直到資料到達消費者端點之前都具有完整的可追溯性和沿襲資訊。在每個處理步驟中,可以採用幾種基本技術來驗證源資料集和目標資料集之間的資料完整性,例如比較rowCounts,nullCounts,uniqueCounts和md5 checkSums。透過確保定義和滿足引用完整性,實體關係和資料集約束,可以檢測和糾正資料損壞。透過僅為授權使用者和服務提供選擇性更新訪問許可權,建立資料治理策略並僱用資料管理員來維護資料完整性。
資料安全
資料體系結構應為所有不同層中的資料提供嚴格的安全性,合規性,隱私性和保護機制。只有經過身份驗證和授權的使用者或服務才能訪問資料。PII資訊應遮蔽並雜湊。當檢測到諸如電子郵件,ssn和信用卡之類的模式時,現代資料體系結構可提供自動匿名功能。資料加密方法適用於靜態資料和傳輸中的資料。可觀察性和站點可靠性工程方法用於稽核和警報機制。
現代資料解決方案利用CI / CD和DevOps來管理和自動化系統的部署和更改,包括Jenkins之類的構建系統,Puppet或Chef之類的配置管理系統以及Dockers或Kubernetes之類的容器。
主要的雲提供商(AWS,Azure和Google)提供端到端解決方案來構建統一的整合資料架構。在圖3中,每個階段都對映到主要雲提供商所提供的服務。
> Figure 3: Data services offered by major cloud providers (AWS, Azure and GCP)
大資料統一架構具有當今可用的大量工具和技術,並且這是一個快速變化的領域。這些工具和技術均具有一定的優勢,使其成為特定場景的正確選擇,但是,對於不同的用例,它們可能是一個糟糕的選擇。因此,對於工具的選擇,首先要了解組織的用例和要求很重要。然後,在選擇合適的工具之前,對具有明確目標和有時限目標的工具進行評估和試驗。在這種情況下,通常首選大型雲提供商(AWS,Azure,GCP)提供的開源技術和服務,而不是將其鎖定在專有的供應商解決方案上。它不斷髮展的空間,因此確定合適的技術並靈活地進行更改和迭代對於滿足您的業務需求和建立競爭優勢非常重要。
參考文獻:
· 現代資料基礎架構的新興架構
· AWS Data Analytics數字培訓