大數據架構模式
- 2020 年 2 月 24 日
- 筆記
大數據架構模式
大數據架構的目的是處理傳統資料庫系統無法處理的過大或複雜的數據的攝取、處理和分析。

大數據解決方案通常涉及以下一種或多種工作負載類型:
- 靜態大數據源批處理
- 動態大數據的實時處理
- 大數據實時搜索
- 預測分析和機器學習
大多數大數據架構包括以下部分或全部組件:
- 數據源:所有大數據解決方案都是從一個或多個數據源開始的。例子包括:
- 應用程式數據存儲,如關係資料庫。
- 應用程式生成的靜態文件,如web伺服器日誌文件。
- 實時數據源,如物聯網設備。
- 數據存儲:批處理操作的數據通常存儲在分散式文件存儲中,可以存儲各種格式的大量大型文件。這種存儲通常被稱為資料庫。實現這種存儲的選項包括Azure數據湖存儲或Azure存儲中的blob容器
- 批處理:由於數據集非常大,大數據解決方案通常必須使用長時間運行的批處理作業來處理數據文件,以便過濾、聚合和準備用於分析的數據。通常這些工作包括讀取源文件、處理源文件並將輸出寫入新文件。選項包括在Azure Data Lake Analytics中運行U-SQL作業,在HDInsight Hadoop集群中使用Hive、Pig或訂製Map/Reduce作業,或者在HDInsight Spark集群中使用Java、Scala或Python程式。
- 實時消息數據流:如果解決方案包含實時源,則體系結構必須包含捕獲和存儲用於流處理的實時消息的方法。這可能是一個簡單的數據存儲,將傳入的消息放入一個文件夾中進行處理。然而,許多解決方案都需要消息攝取存儲作為消息的緩衝區,並支援擴展處理、可靠的交付和其他消息隊列語義。選項包括Azure事件中心、Azure物聯網中心和Kafka。
- 流處理:捕獲實時消息後,解決方案必須通過過濾、聚合和以其他方式準備用於分析的數據來處理它們。然後將處理後的流數據寫入輸出接收器。Azure Stream Analytics提供了一個託管的流處理服務,該服務基於永久運行的SQL查詢,這些查詢操作於無限制的流。您還可以在HDInsight集群中使用開放源碼Apache流技術,比如Storm和Spark流。
- 數據分析和存儲:許多大數據解決方案為分析準備數據,然後以結構化的格式提供處理後的數據,可以使用分析工具進行查詢。用於服務這些查詢的分析數據存儲可以是金伯爾風格的關係數據倉庫,正如在大多數傳統的商業智慧(BI)解決方案中所看到的那樣。或者,可以通過低延遲的NoSQL技術(如HBase)或互動式Hive資料庫來表示數據,後者為分散式數據存儲中的數據文件提供元數據抽象。Azure SQL數據倉庫為大規模、基於雲的數據倉庫提供託管服務。HDInsight支援互動式Hive、HBase和Spark SQL,它們也可以用來為分析提供數據。
- 數據分析和UI展示:大多數大數據解決方案的目標都是通過分析和報告來洞察數據。為了使用戶能夠分析數據,體系結構可能包括一個數據建模層,例如Azure Analysis Services中的多維OLAP多維數據集或表格數據模型。它還可能支援自助服務BI,使用Microsoft Power BI或Microsoft Excel中的建模和可視化技術。分析和報告還可以採用數據科學家或數據分析師交互數據探索的形式。對於這些場景,許多Azure服務都支援分析筆記型電腦,比如Jupyter,這使得這些用戶能夠利用他們現有的Python或R技能來進行大規模的數據探索。
- 服務編排:大多數大數據解決方案由重複的數據處理操作組成,這些操作封裝在工作流中,轉換源數據,在多個源和匯聚之間移動數據,將處理後的數據載入到分析數據存儲中,或者直接將結果推送到報表或儀錶板。要自動化這些工作流,可以使用編排技術,如Azure Data Factory或Apache Oozie和Sqoop。
Azure包含許多可以在大數據架構中使用的服務。大致可分為兩類:
- 託管服務,包括Azure數據存儲、Azure數據分析、Azure數據倉庫、Azure流分析、Azure事件中心、Azure物聯網中心和Azure數據工廠。
- 基於Apache Hadoop平台的開源技術,包括HDFS、HBase、Hive、Pig、Spark、Storm、Oozie、Sqoop和Kafka。這些技術可以在Azure HDInsight服務的Azure上使用。
這些選項並不相互排斥,許多解決方案都將開源技術與Azure服務結合起來。
使用場景
當你需要考慮這種架構風格時:
- 以傳統資料庫無法存儲和處理的過大卷存儲和處理數據。
- 轉換非結構化數據以進行分析和報告。
- 實時捕獲、處理和分析無邊界的數據流,或以較低的延遲。
- 使用Azure機器學習或微軟的認知服務。
優勢
- 技術選擇。您可以在HDInsight集群中混合併匹配Azure託管服務和Apache技術,以利用現有的技能或技術投資。
- 通過並行性能。大數據解決方案利用並行性,使高性能解決方案能夠擴展到大量數據。
- 彈性的規模。大數據架構中的所有組件都支援向外擴展供應,這樣您就可以調整您的解決方案以適應小型或大型工作負載,並且只需為您使用的資源付費。
- 與現有解決方案的互操作性。大數據架構的組件還用於物聯網處理和企業BI解決方案,使您能夠跨數據工作負載創建集成解決方案。
挑戰
- 複雜性。大數據解決方案可能非常複雜,有許多組件來處理來自多個數據源的數據攝取。大數據流程的構建、測試和故障排除可能具有挑戰性。此外,為了優化性能,必須跨多個系統使用大量配置設置。
- 技巧。許多大數據技術都是高度專門化的,使用的框架和語言並不是更通用的應用程式體系結構的典型。另一方面,大數據技術正在發展基於更成熟語言的新api。例如,Azure Data Lake Analytics中的U-SQL語言基於Transact-SQL和c#的組合。類似地,基於sql的api也可用於Hive、HBase和Spark。
- 技術成熟。許多用於大數據的技術正在發展。雖然核心Hadoop技術(如Hive和Pig)已經穩定下來,但是新興技術(如Spark)在每個新版本中都會引入大量的更改和增強。與其他Azure服務相比,Azure Data Lake Analytics和Azure Data Factory等託管服務相對較年輕,並且可能會隨著時間的推移而發展。
- 安全。大數據解決方案通常依賴於將所有靜態數據存儲在一個集中的資料庫中。保護對這些數據的訪問是很有挑戰性的,尤其是當這些數據必須被多個應用程式和平台攝取和使用時。
最佳實踐
- 利用並行性。大多數大數據處理技術都將工作負載分布在多個處理單元中。這要求創建靜態數據文件並以可拆分格式存儲。諸如HDFS這樣的分散式文件系統可以優化讀寫性能,並且實際的處理是由多個集群節點並行執行的,這減少了總體作業時間。
- 對數據進行分區。批處理通常在一個循環的時間表上發生——例如,每周或每月。根據與處理計劃匹配的時間周期劃分數據文件和數據結構(如表)。這簡化了數據攝取和作業調度,並使故障排除更加容易。此外,Hive、U-SQL或SQL查詢中使用的分區表可以顯著提高查詢性能。
- 應用讀時模式語義。使用數據湖允許您以多種格式(結構化、半結構化或非結構化)組合文件存儲。使用schema-on-read語義,它在數據處理時(而不是存儲時)將模式投射到數據上。這為解決方案構建了靈活性,並防止了數據驗證和類型檢查導致的數據攝入過程中的瓶頸。
- 處理現場數據。傳統的BI解決方案通常使用提取、轉換和載入(ETL)過程將數據移動到數據倉庫。大數據解決方案具有數據量大、格式多的特點,通常使用ETL的各種變體,如轉換、提取和載入(TEL)。使用這種方法,數據在分散式數據存儲中處理,將其轉換為所需的結構,然後將轉換後的數據移動到分析數據存儲中。
- 平衡使用和時間成本。對於批處理作業,重要的是要考慮兩個因素:計算節點的單位成本和使用這些節點完成作業的每分鐘成本。例如,一個批處理作業可能需要8小時,其中包含4個集群節點。然而,結果可能是作業只在頭兩個小時內使用所有四個節點,在此之後,只需要兩個節點。在這種情況下,在兩個節點上運行整個作業會增加總作業時間,但不會使其翻倍,因此總成本會更低。在某些業務場景中,較長的處理時間可能比使用未充分利用的集群資源的較高成本更可取。
- 單獨的集群資源。在部署HDInsight集群時,通常會為每種類型的工作負載提供單獨的集群資源,從而獲得更好的性能。例如,儘管Spark集群包括Hive,但如果需要同時使用Hive和Spark執行大量處理,則應該考慮部署單獨的專用Spark和Hadoop集群。類似地,如果您使用HBase和Storm進行低延遲流處理,使用Hive進行批處理,請考慮使用Storm、HBase和Hadoop的單獨集群。
- 編排數據攝取。在某些情況下,現有的業務應用程式可能會將用於批處理的數據文件直接寫入Azure storage blob容器中,HDInsight或Azure data Lake Analytics可以使用這些文件。然而,您經常需要將來自內部或外部數據源的數據導入數據湖。使用編排工作流或管道(如Azure Data Factory或Oozie支援的工作流或管道)以可預測和集中管理的方式實現這一點。
- 儘早清除敏感數據。數據攝取工作流應該在處理過程的早期清除敏感數據,以避免將其存儲在數據湖中。
IOT架構
物聯網是大數據解決方案的一個特殊子集。下圖顯示了物聯網可能的邏輯架構。該圖強調了體系結構的事件流組件。

雲網關使用可靠的低延遲消息傳遞系統在雲邊界接收設備事件。
設備可以直接將事件發送到雲網關,或者通過欄位網關。field gateway是一種專門的設備或軟體,通常與設備協同使用,接收事件並將其轉發到雲網關。欄位網關還可以預處理原始設備事件,執行過濾、聚合或協議轉換等功能。
提取數據之後,事件經過一個或多個串流處理器,這些處理器可以路由數據(例如,到存儲)或執行分析和其他處理。
下面是一些常見的處理類型。(這份清單當然不是詳盡無遺的。)
- 將事件數據寫入冷存儲器,用於存檔或批處理分析。
- 熱路徑分析,在(近)實時分析事件流,以檢測異常,識別滾動時間窗口上的模式,或在流中發生特定條件時觸發警報。
- 處理來自設備的特殊類型的非遙測資訊,如通知和警報。
- 機器學習。
灰色陰影的方框顯示了物聯網系統的組件,這些組件與事件流沒有直接關係,但是為了完整起見,這裡包含了這些組件。
- 設備註冊表是所供應設備的資料庫,包括設備id和通常的設備元數據,如位置。
- 供應API是一個用於供應和註冊新設備的公共外部介面。
- 一些物聯網解決方案允許將命令和控制消息發送到設備。