天天看點

大資料的計算模式

大資料的計算模式主要分為:

  • 批量計算(batch computing)
  • 流式計算(stream computing)

資料集類型

現實世界中,所有的資料都是以流式的形态産生的,不管是哪裡産生的資料,在産生的過程中都是一條條地生成,最後經過了存儲和轉換處理,形成了各種類型的資料集。如下圖所示,根據現實的資料産生方式和資料産生是否含有邊界(具有起始點和終止點)角度,将資料分為兩種類型的資料集,一種是有界資料集,另外一種是無界資料集。

大資料的計算模式
  • 有界資料集

有界資料集具有時間邊界,在處理過程中資料一定會在某個時間範圍内起始和結束,有可能是一分鐘,也有可能是一天内的交易資料。對有界資料集的資料處理方式被稱為批計算(Batch Processing),例如将資料從RDBMS或檔案系統等系統中讀取出來,然後在分布式系統内處理,最後再将處理結果寫入存儲媒體中,整個過程就被稱為批處理過程。而針對批資料處理,目前業界比較流行的分布式批處理架構有Apache Hadoop和Apache Spark等。

  • 無界資料集

對于無界資料集,資料從開始生成就一直持續不斷地産生新的資料,是以資料是沒有邊界的,例如伺服器的日志、傳感器信号資料等。和批量資料處理方式對應,對無界資料集的資料處理方式被稱為流式資料處理,簡稱為流處理(Streaming Process)。可以看出,流式資料處理過程實作複雜度會更高,因為需要考慮處理過程中資料的順序錯亂,以及系統容錯等方面的問題,是以流處理需要借助專門的流資料處理技術。目前業界的Apache Storm、Spark Streaming、Apache Flink等分布式計算引擎都能不同程度地支援處理流式資料。

  • 統一資料處理

有界資料集和無界資料集隻是一個相對的概念,主要根據時間的範圍而定,可以認為一段時間内的無界資料集其實就是有界資料集,同時有界資料也可以通過一些方法轉換為無界資料。例如系統一年的訂單交易資料,其本質上應該是有界的資料集,可是當我們把它一條一條按照産生的順序發送到流式系統,通過流式系統對資料進行處理,在這種情況下可以認為資料是相對無界的。對于無界資料也可以拆分成有界資料進行處理,例如将系統産生的資料接入到存儲系統,按照年或月進行切割,切分成不同時間長度的有界資料集,然後就可以通過批處理方式對資料進行處理。從以上分析我們可以得出結論:有界資料和無界資料其實是可以互相轉換的。有了這樣的理論基礎,對于不同的資料類型,業界也提出了不同的能夠統一資料處理的計算架構。

目前在業界比較熟知的開源大資料處理架構中,能夠同時支援流式計算和批量計算,比較典型的代表分别為Apache Spark和Apache Flink兩套架構。其中Spark通過批處理模式來統一處理不同類型的資料集,對于流資料是将資料按照批次切分成微批(有界資料集)來進行處理。Flink則從另外一個角度出發,通過流處理模式來統一處理不同類型的資料集。Flink用比較符合資料産生的規律方式處理流式資料,對于有界資料可以轉換成無界資料統一進行流式,最終将批處理和流處理統一在一套流式引擎中,這樣使用者就可以使用一套引擎進行批計算和流計算的任務。

流資料與流式計算

流資料是指在時間分布和數量上無限的一系列動态資料集合體,資料的價值随着時間的流逝而降低,是以必須實時計算給出秒級響應。

流式計算,顧名思義,就是對資料流進行處理,是實時計算。批量計算則統一收集資料,存儲到資料庫中,然後對資料進行批量處理的資料計算方式。

流式處理可以用于兩種不同場景: 事件流和持續計算。

1、事件流

事件流具能夠持續産生大量的資料,這類資料最早出現與傳統的銀行和股票交易領域,也在網際網路監控、無線通信網等領域出現、需要以近實時的方式對更新資料流進行複雜分析如趨勢分析、預測、監控等。簡單來說,事件流采用的是查詢保持靜态,語句是固定的,資料不斷變化的方式。

2、持續計算

比如對于大型網站的流式資料:網站的通路PV/UV、使用者通路了什麼内容、搜尋了什麼内容等,實時的資料計算和分析可以動态實時地重新整理使用者通路資料,展示網站實時流量的變化情況,分析每天各小時的流量和使用者分布情況;

比如金融行業,毫秒級延遲的需求至關重要。一些需要實時處理資料的場景也可以應用Storm,比如根據使用者行為産生的日志檔案進行實時分析,對使用者進行商品的實時推薦等。

流式計算和批量計算差別

主要展現在以下幾個方面:

  • 資料時效性不同
    • 流式計算實時、低延遲
    • 批量計算非實時、高延遲。
  • 資料特征不同
    • 流式計算的資料一般是動态的、沒有邊界的
    • 批處理的資料一般則是靜态資料。
  • 應用場景不同
    • 流式計算應用在實時場景,時效性要求比較高的場景,如實時推薦、業務監控等
    • 批量計算一般說批處理,應用在實時性要求不高、離線計算的場景下,資料分析、離線報表等。
  • 運作方式不同
    • 流式計算的任務持續進行的
    • 批量計算的任務則一次性完成。

流式計算架構和平台

共有以下幾類:

  • 第一類,商業級流式計算平台(IBM InfoSphere Streams、中興飛流Yita等)。
  • 第二類,開源流式計算架構(Twitter Storm、S4等)。
  • 第三類,公司為支援自身業務開發的流式計算架構。

相關産品:

  • Strom:Twitter 開發的第一代流處理系統。
  • Heron:Twitter 開發的第二代流處理系統。
  • Spark streaming:是 Spark 核心 API 的一個擴充,可以實作高吞吐量的、具備容錯機制的實時流資料的處理。
  • Flink:是一個針對流資料和批資料的分布式處理引擎。
  • Apache Kafka:由 Scala 寫成。該項目的目标是為處理實時資料提供一個統一、高通量、低等待的平台。
  • Yita:中興飛流自研的高性能分布式異步計算引擎,具有批流混合、海量吞吐、極低延遲時間和智能計算的特性。

目前市面上主流的 OLAP 資料庫的選型:

  • Hive、Hawq、Impala:基于 SQL on Hadoop
  • Presto 和 Spark SQL 類似:基于記憶體解析 SQL 生成執行計劃
  • Kylin:用空間換時間、預計算
  • Druid:資料實時攝入加實時計算
  • ClickHouse:OLAP 領域的 HBase,單表查詢性能優勢巨大
  • Greenpulm:OLAP 領域的 PostgreSQL。