天天看點

Java微服務-大資料(三)大資料技術棧發展史

作者:架構淺水灣

閱讀目錄

  • 一、總覽
  • 二、技術棧
    • 2.1 資料集采
      • 2.1.1 離線同步
      • 2.1.2 實時同步
      • 2.1.3 總結
    • 2.2 資料清洗
      • 2.2.1 計算-離線計算(批計算)
      • 2.2.2 計算-實時計算(流計算)
      • 2.2.3 分布式存儲
    • 2.3 資料應用
      • 2.3.1 ROLAP
      • 2.3.2 MOLAP

-系列目錄-

大資料(一)背景和概念

大資料(二)大資料架構發展史

大資料(三)大資料技術棧發展史

前兩章,我們分析了大資料相關的概念和發展史,本節我們就講一講具體的大資料領域的常見技術棧發展史。對主流技術棧有一個初步的認知。

回到頂部(go to top)

一、總覽

大資料技術棧非常多估計大大小小多達上百種。但發展史、技術體系仍有迹可循。我們從資料采集、清洗、應用3大步驟來看,在每個步驟内部按照時序辨別主流技術棧時間點。以此期望能給大家一個初步的映像。三大步驟如下:

  • 資料采集:從資料源進行資料同步,大緻分為:主動查詢DB資料批量(離線)同步、基于DB log資料變更(實時)同步2大類。
  • 資料清洗:标準的ETL資料清洗,大緻分為:離線計算(批處理)、實時計算(流處理)2大類。
  • 資料應用:OLAP線上資料分析、報表、資料大屏、大資料查詢服務API。

分步驟整體技術棧如下圖所示:

Java微服務-大資料(三)大資料技術棧發展史

回到頂部(go to top)

二、技術棧

2.1 資料集采

如上圖,資料采集可以歸納為兩大類:離線查詢同步、實時變更同步。如下圖所示:

Java微服務-大資料(三)大資料技術棧發展史

2.1.1 離線同步

離線同步常見技術棧有:Sqoop、Flume、DataX。

2.1.1.1 Sqoop-2009

1)介紹

Sqoop是一款開源的工具,主要用于在Hadoop(Hive)與傳統的資料庫(mysql、postgresql...)間進行資料的傳遞。可以将關系型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以将HDFS的資料導進到關系型資料庫中。項目開始于2009年,最早是作為Hadoop的一個第三方子產品存在,2012年Sqoop成為Apache頂級項目。2021年由于三年未更新,已被挪入apache attic(被淘汰的項目)。

2)原理

JDBC直連,會影響源庫性能。項目已過時,除非是之前一直在用可以繼續用,否則不建議使用。

2.1.1.2 Flume-2009

1)介紹

Apache Flume 是一個分布式、高可靠、高可用的用來收集、聚合、轉移不同來源的大量日志資料到中央資料倉庫的工具。也是Apache頂級項目。

2)同步原理

flume采集流模式進行資料實時采集。适用于日志檔案實時采集,特定檔案傳輸場景使用。

2.1.1.3 DataX-2019

1)介紹

DataX是阿裡開源的,異構資料源離線同步工具,緻力于實作包括關系型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構資料源之間穩定高效的資料同步功能。

2)同步原理

為了解決異構資料源同步問題,DataX将複雜的網狀的同步鍊路變成了星型資料鍊路,DataX作為中間傳輸載體負責連接配接各種資料源。當需要接入一個新的資料源的時候,隻需要将此資料源對接到DataX,便能跟已有的資料源做到無縫資料同步。

資料庫日志同步。适用于在異構資料庫/檔案系統之間高速交換資料,是主流的離線同步工具,推薦使用。

2.1.2 實時同步

2.1.2.1 Canal-2014

1)介紹

canal [kə'næl],譯意為水道/管道/溝渠,主要用途是基于 MySQL 資料庫增量日志解析,提供增量資料訂閱和消費。2014年,由Alibaba開源。

github:https://github.com/alibaba/canal,阿裡巴巴 MySQL binlog 增量訂閱&消費元件。

2)同步原理

資料庫增量日志解析。僅适用于Mysql資料同步,适用場景局限性過大,無法作為通用技術棧。

2.1.2.2 Debezium-2015

1)介紹

RedHat(紅帽公司) 開源的Debezium是一個将多種資料源實時變更資料捕獲,形成資料流輸出的開源工具。 它是一種CDC(Change Data Capture)工具,工作原理類似大家所熟知的 Canal, DataBus, Maxwell 等,是通過抽取資料庫日志來擷取變更的。

2)同步原理

Java微服務-大資料(三)大資料技術棧發展史

Debezium的工作原理是利用資料庫日志來捕獲資料庫更改事件,深度結合Kafka實作。

2.1.2.3 FlinkCDC-2020

1)介紹

FlinkCDC是Apache Flink的一組源連接配接器,使用更改資料捕獲(CDC)從不同的資料庫攝取更改。項目誕生于2020年,底層也是封裝的Debezium。

github: https://github.com/ververica/flink-cdc-connectors

2)同步原理

同Debezium。

2.1.3 總結

常見開源CDC方案比較如下:

Java微服務-大資料(三)大資料技術棧發展史

如上圖,如果需要做全量+增量同步,FlinkCDC是一個不錯的選擇。(支援的下遊生态更豐富、操作更簡單Flink SQL)

2.2 資料清洗

資料清洗階段是大資料的核心能力階段,主要包含計算(離線計算、實時計算)+存儲(分布式存儲),下面我們就從這兩個方面來看有哪些主流技術棧。

Java微服務-大資料(三)大資料技術棧發展史

如上圖所示,Google在2003-2006之間釋出了3篇始祖級論文:2003分布式檔案系統GFS、2004分布式計算架構MapReduce、2006NoSQL資料庫系統BigTable。之後在2006年釋出了大資料平台Hadoop,自此這隻黃色的可愛小象,馳騁在大資料領域,所向披靡。

2.2.1 計算-離線計算(批計算)

Java微服務-大資料(三)大資料技術棧發展史

離線計算領域Hadoop的MapReduce是始祖,有2個衍生技術棧:Pig和Hive。最後一個Spark相對Hadoop MapReduce性能上有極大提升。

2.2.1.1 Hadoop MapReduce-2006

1)介紹

Hadoop MapReduce是一個軟體架構,可以輕松地編寫應用程式,以可靠,容錯的方式并行處理大型硬體叢集(數千個節點)上的大量資料(多TB資料集)。

2)原理

MapReduce 作業通常将輸入資料集拆分為獨立的塊,這些任務由地圖任務以完全并行的方式進行處理。架構對地圖的輸出進行排序,然後将其輸入到reduce任務。

2.2.1.2 Pig-2007

1)介紹

為了簡化MapReduce開發的流程,Yahoo工程師發明了Pig,後捐給了Apache。隻需編寫Pig Latin腳本語言,系統自動轉化成mapreduce執行。pig不是主流技術棧,不建議使用。

2)原理

Apache PIG提供一套進階語言平台,用于對結構化與非結構化資料集進行操作與分析。這種語言被稱為Pig Latin,其屬于一種腳本形式,可直接立足于PIG shell執行或者通過Pig Server進行觸發。使用者所建立的腳本會在初始階段由Pig Latin處理引擎進行語義有效性解析,而後被轉換為包含整體執行初始邏輯的定向非循環圖(簡稱DAG)。

2.2.1.3 Hive-2007

1)介紹

Hive起源于FaceBook,是基于Hadoop的一個資料倉庫工具,用來進行資料提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模資料的機制。Hive資料倉庫工具能将結構化的資料檔案映射為一張資料庫表,并提供SQL查詢功能,能将SQL語句轉變成MapReduce任務來執行。

2)原理

如上圖所示,Hive基本原理就是轉換HQL語言為MapReduce任務來執行。hive 并非為聯機事務處理而設計,hive 并不提供實時的查詢和基于行級的資料更新操作。hive的最佳使用場合是大資料集的批處理作業,例如,網絡日志分析。

2.2.1.4 Spark-2010

1)介紹

Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行架構,Spark,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是——Job中間輸出結果可以儲存在記憶體中,進而不再需要讀寫HDFS,是以Spark能更好地适用于資料挖掘與機器學習等需要疊代的MapReduce的算法。簡單來說,Spark是一個快速,通用,可擴充的分布式計算引擎。這裡把Spark劃歸離線計算,是把Spark Streaming排除在外的。Spark是離線計算(批處理)領域的主流技術棧。

2)原理

如上圖所示,Spark有三個主要特性:RDD的程式設計模型更簡單,DAG切分的多階段計算過程更快速,使用記憶體存儲中間計算結果更高效。這三個特性使得Spark相對Hadoop MapReduce可以有更快的執行速度,以及更簡單的程式設計實作。這裡具體的細節原理就不展開細講。

2.2.2 計算-實時計算(流計算)

Java微服務-大資料(三)大資料技術棧發展史

流式計算領域,有3個典型技術棧:Storm、Spark Streaming、Flink,其中Spark Streaming是“微批拟流”,不能算是真流。兩種流式處理說明如下:

1)Native Streaming原生流:指每個傳入的記錄一到達就會被處理,而不必等待其他記錄。

Java微服務-大資料(三)大資料技術棧發展史

2)Micro-batching微批拟流: 這意味着每隔幾秒就會将傳入記錄一起批處理,然後在一個小批量中處理,延遲幾秒鐘。

Java微服務-大資料(三)大資料技術棧發展史

2.2.2.1 Storm-2011

1)介紹

Storm是一個免費開源、分布式、高容錯的實時計算系統。Storm最早于2011年誕生于Twitter,2013年進入Apache社群進行孵化, 2014年9月,晉級成為Apache頂級項目。早期Storm用于實時計算,Hadoop用于離線計算。現階段已不推薦使用。

2)原理

在Storm中,先要設計一個用于實時計算的圖狀結構,我們稱之為拓撲(topology),它的結構和Mapreduce任務類似,通過自定定義Spout(資料輸入處理子產品)和Bolt(輸出處理子產品)邏輯,以及自定義Bolt之間的拓撲依賴關系,完成整個實時事件流的處理邏輯搭建。Topology(拓撲)是一個是由 Spouts 和 Bolts 通過 Stream 連接配接起來的有向無環圖。Topology将會被送出給叢集,由叢集中的主要節點(master node)分發代碼,将任務配置設定給工作節點(worker node)執行。Topology拓撲結構如下圖所示:

Java微服務-大資料(三)大資料技術棧發展史

Storm采用主從架構。nimbus是叢集的Master,負責叢集管理、任務配置設定等。supervisor是Slave,是真正完成計算的地方,每個supervisor啟動多個worker程序,每個worker上運作多個task,而task就是spout或者bolt。supervisor和nimbus通過ZooKeeper完成任務配置設定、心跳檢測等操作。如下圖所示:

2.2.2.2 Spark Streaming-2013

1)介紹

Spark是Hadoop的批處理(MapReduce)實際繼承者。為了應對流式處理場景,2013年Spark 2.0推出了Spark Streaming。但由于不是原生流處理技術棧,存在時延,加之進階功能不如Flink,已不是主流技術棧。

2)原理

Spark Streaming是在 Spark Core API基礎上擴充出來的,以微批模式實作的近實時計算架構,它認為流是批的特例,将輸入資料切分成一個個小的切片,利用Spark引擎作為一個個小的batch資料來處理,最終輸出切片流,以此實作近似實時計算。如下圖所示:

Java微服務-大資料(三)大資料技術棧發展史

2.2.2.3 Flink-2014

1)介紹

Apache Flink是一個架構和分布式處理引擎,用于無界和有界資料流的有狀态計算。Flink創造性地統一了流處理和批處理,作為流處理看待時輸入資料流是無界的,而批處理被作為一種特殊的流處理,隻是它的輸入資料流被定義為有界的。2015年釋出了第一個版本,目前Flink已成為流處理領域的實際标準,且大有一統某些場景的批流一體方案的計算引擎。

同時支援有界、無界:

Java微服務-大資料(三)大資料技術棧發展史

2)原理

Flink 架構也遵循Master-Slave架構設計原則,JobManager為Master節點,TaskManager為Slave節點。架構圖如下:

2.2.3 分布式存儲

相比于計算領域的百花齊放,分布式存儲技術棧就顯得獨樹一幟了。最早的Hadoop HDFS分布式檔案系統,以及基于HDFS衍生出來的Hbase。

Java微服務-大資料(三)大資料技術棧發展史

1)介紹

HBase是一個分布式的、面向列的開源資料庫。建立在 HDFS 之上。Hbase的名字的來源是 Hadoop database。HBase 的計算和存儲能力取決于 Hadoop 叢集。它介于NoSql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務(可通過Hive支援來實作多表join等複雜操作)。

HBase中表的特點:

  • 大:一個表可以有上十億行,上百萬列。
  • 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。
  • 稀疏:對于為空(null)的列,并不占用存儲空間,是以,表可以設計的非常稀疏。

2)原理

hbase的系統架構如下:

Java微服務-大資料(三)大資料技術棧發展史

HBase由三種類型的伺服器以主從模式構成:

  • Region Server:負責資料的讀寫服務,使用者通過與Region server互動來實作對資料的通路。
  • HBase HMaster:負責Region的配置設定及資料庫的建立和删除等操作。
  • ZooKeeper:負責維護叢集的狀态(某台伺服器是否線上,伺服器之間資料的同步操作及master的選舉等)。

HBase 表資料模型如下:

Java微服務-大資料(三)大資料技術棧發展史

與nosql資料庫一樣,row key是用來檢索記錄的主鍵。通路hbase table中的行,隻有三種方式:

  1. 通過單個row key通路
  2. 通過row key的range
  3. 全表掃描

2.3 資料應用

本節聚焦大資料OLAP,講解主流技術棧。OLAP技術發展至今,已經是”百花齊放“之勢,可簡單分三類:

  • ROLAP(Relational OLAP,關系型OLAP):使用關系資料庫存儲管理資料倉庫,以關系表存儲多元資料,有較強的可伸縮性。其中維資料存儲在維表中,而事實資料和維 ID 則 存儲在事實表中,維表和事實表通過主外鍵關聯。
  • MOLAP(Multidimensional OLAP,多元型OLAP):MOLAP 支援資料的多元視圖,采用多元資料組存儲資料,它把維映射到多元數組的下标或下标的範圍,而事實資料存儲在數組單元中, 進而實作了多元視圖到數組的映射,形成了立方體的結構。
  • HOLAP(Hybrid OLAO,混合型OLAP): 混合存儲,如低層是關系型的,高層是多元矩陣型的,靈活性強。将明細資料保留在關系型資料庫的事實表中,聚合後資料儲存在Cube中,查詢效率比 ROLAP 高,但性能低于 MOLAP。
Java微服務-大資料(三)大資料技術棧發展史

2.3.1 ROLAP

Rolap(Relational OLAP),即關系型OLAP。Rolap基于關系型資料庫,它的OLAP引擎就是将使用者的OLAP操作,如上鑽下鑽過濾合并等,轉換成SQL語句送出到資料庫中執行,并且提供聚集導航功能,根據使用者操作的次元和度量将SQL查詢定位到最粗粒度的事實表上去。分為兩大類:1、MPP資料庫 2、SQL on Hadoop。

Java微服務-大資料(三)大資料技術棧發展史

2.3.1.1 MPP資料庫

MPPDB即基于MPP架構(Massive Parallel Processing,海量并行處理)的資料庫。典型技術棧有:Doris/StarRocks、ClickHouse、GreenPlum。

Doris-2018

Apache Doris是由百度開源的一款MPP資料庫,支援标準的SQL語言,相容MYSQL協定,可直接對接主流BI系統。2018年捐給apache,後在2022年成為Apache 頂級項目。使用簡單、生态完善、運維友善、穩定可靠、國産之光----一站式開箱即用,無腦推薦使用。Doris定位如下圖:

Java微服務-大資料(三)大資料技術棧發展史

ClickHouse-2016

ClickHouse是俄羅斯的Yandex于2016年開源的一個用于聯機分析(OLAP)的列式資料庫管理系統。性能極高,運維難度較大,全球風靡---推薦使用。看官網介紹的定位支援任何資料源的快速查詢,如下圖:

Java微服務-大資料(三)大資料技術棧發展史

GreenPlum

GP(GreenPlum)是2015年開源的老牌的關系型分布式資料庫,它在開源的PG(PostgreSql)的基礎上采用MPP架構,具有強大的大規模資料分析任務處理能力。----已過時,不推薦。

2.3.1.2 SQL on Hadoop

SQL on Hadoop就是利用HDFS實作高度可擴充的資料存儲,使得使用者可以使用SQL語言,對存儲在HDFS上的資料進行分析。這實際上是一套計算和存儲分離的方案。

2.3.1.2.1 基于MPP架構

為了提高SQL on Hadoop的性能,第一個重要技術流派的就是MPP(Massively Parallel Processing),即大規模并行處理。簡單來說,MPP是将任務并行的分散到多個伺服器和節點上,在每個節點上計算完成後,将各自部分的結果彙總在一起得到最終的結果(與Hadoop相似)。 其中的代表就是 Presto & Impala。

  1)Presto

Presto是 Facebook 推出分布式SQL互動式查詢引擎,完全基于記憶體的并行計算,這也是為啥Presto比Hive快的原因。Presto架構圖如下:

Java微服務-大資料(三)大資料技術棧發展史

  2)Impala

Impala是 Cloudera 在受到 Google 的 Dremel 啟發下開發的實時互動SQL大資料查詢工具,其也是基于記憶體的并行計算架構,缺點是僅适用于 HDFS/Hive 系統的查詢。

Java微服務-大資料(三)大資料技術棧發展史

  3)其它

  • Drill: Drill 是2012年,MapR 公司開源的一個低延遲的大資料集的分布式SQL查詢引擎,是谷歌Dremel的開源實作。它支援對本地檔案、HDFS、HBASE等資料進行資料查詢。它與同是源自 Dremel 的 Impala 比較類似。
  • HAWQ:HAWQ(Hadoop With Query) 是 Pivotal 公司開源的一個 Hadoop 原生大規模并行SQL分析引擎,基于 GreenPlum 實作,采用主從改進MPP架構,将MPP與批處理系統有效的結合。

2.3.1.2.2 通用型

  1)Hive SQL-2007

Hive由 Facebook 開源,用于解決海量日志資料的分析,是一個建構于Hadoop頂層的資料倉庫工具。底層實作就是Hadoop原生MapReduce.

  2)Spark SQL-2010

Spark是UC Berkeley AMP lab開源的類MapReduce的通用的并行計算架構。Spark SQL 使用記憶體計算模型,比 MapReduce 磁盤通路的方式在性能上有極大提升。

  2)Flink SQL-2019

Blink誕生于2015年,在Alibaba内部使用,2019年開源并于Flink1.9.0版本。Flink SQL 可以做到 API 層的流與批統一,這是一個極大的進步,讓使用者關注核心API即可而不用關注底層細節。

2.3.2 MOLAP

MOLAP多元型OLAP,即事先将彙總資料計算好,以多元數組的形式儲存資料。其核心思想是借助預先聚合結果,用空間換時間。典型架構就是Kylin和Druid。

2.3.2.1 Kylin

Kylin 是2014年由eBay中國研發中心開源的OLAP引擎,提供 Hadoop/Spark 之上的 SQL 查詢接口及多元分析能力以支援超大規模資料,它能在亞秒内查詢巨大的Hive表。其核心技術點在于預計算和Cube(立方體模型)的設定:首先, 對需要分析的資料進行模組化,框定需要分析的次元字段;然後通過預處理的形式,對各種次元進行組合并事先聚合,将聚合結果以某種索引或者緩存的形式儲存起來;最後查詢時直接利用結果傳回資料。

Java微服務-大資料(三)大資料技術棧發展史
  • 優點:快。
  • 缺點:隻讀分析引擎,不支援insert,update,delete等SQL操作;cube模組化有成本。

2.3.2.2 Druid

Druid是由廣告公司 MetaMarkets 于2012年開源的實時大資料分析引擎。Druid 作為MOLAP引擎,也是對資料進行預聚合。隻不過預聚合的方式與Kylin不同,Kylin是Cube化,Druid的預聚合方式隻是全次元進行Group-by,相當于是Kylin Cube 的 base cuboid。

Java微服務-大資料(三)大資料技術棧發展史
  • 優點:快、不需要專業模組化能力。
  • 缺點:隻适合聚合查詢和報告查詢,且速度沒有Kylin快;

繼續閱讀