隨著大數(shù)據(jù)行業(yè)的發(fā)展,大數(shù)據(jù)生態(tài)圈中相關(guān)的技術(shù)也在一直迭代進(jìn)步,作者有幸親身經(jīng)歷了國內(nèi)大數(shù)據(jù)行業(yè)從零到一的發(fā)展歷程,通過本文希望能夠幫助大家快速構(gòu)建大數(shù)據(jù)生態(tài)圈完整知識(shí)體系。
目前大數(shù)據(jù)生態(tài)圈中的核心技術(shù)總結(jié)下來如圖1所示,分為以下9類,下面分別介紹。
數(shù)據(jù)采集也被稱為數(shù)據(jù)同步。隨著互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等技術(shù)的興起,產(chǎn)生了海量數(shù)據(jù)。這些數(shù)據(jù)散落在各個(gè)地方,我們需要將這些數(shù)據(jù)融合到一起,然后從這些海量數(shù)據(jù)中計(jì)算出一些有價(jià)值的內(nèi)容。此時(shí)第一步需要做的是把數(shù)據(jù)采集過來。數(shù)據(jù)采集是大數(shù)據(jù)的基礎(chǔ),沒有數(shù)據(jù)采集,何談大數(shù)據(jù)!
數(shù)據(jù)采集技術(shù)框架包括以下幾種:
● Flume、Logstash和FileBeat常用于日志數(shù)據(jù)實(shí)時(shí)監(jiān)控采集,它們之間的細(xì)節(jié)區(qū)別見表1:
● Sqoop和Datax常用于關(guān)系型數(shù)據(jù)庫離線數(shù)據(jù)采集,它們之間的細(xì)節(jié)區(qū)別見表2:
● Cannal和Maxwell常用于關(guān)系型數(shù)據(jù)庫實(shí)時(shí)數(shù)據(jù)采集,它們之間的細(xì)節(jié)區(qū)別見表3:
Flume、Logstash和FileBeat的技術(shù)選型如圖2所示:
Sqoop和Datax之間的技術(shù)選型如圖3所示:
Cannal和Maxwell之間的技術(shù)選型如圖4所示:
二、數(shù)據(jù)存儲(chǔ)技術(shù)框架
數(shù)據(jù)的快速增長推動(dòng)了技術(shù)的發(fā)展,涌現(xiàn)出了一批優(yōu)秀的、支持分布式的存儲(chǔ)系統(tǒng)。
數(shù)據(jù)存儲(chǔ)技術(shù)框架包括HDFS、HBase、Kudu、Kafka等。
● HDFS它可以解決海量數(shù)據(jù)存儲(chǔ)的問題,但是其最大的缺點(diǎn)是不支持單條數(shù)據(jù)的修改操作,因?yàn)樗吘共皇菙?shù)據(jù)庫。
● HBase是一個(gè)基于HDFS的分布式NoSQL數(shù)據(jù)庫。這意味著,HBase可以利用HDFS的海量數(shù)據(jù)存儲(chǔ)能力,并支持修改操作。但HBase并不是關(guān)系型數(shù)據(jù)庫,所以它無法支持傳統(tǒng)的SQL語法。
● Kudu是介于HDFS和HBase之間的技術(shù)組件,既支持?jǐn)?shù)據(jù)修改,也支持基于SQL的數(shù)據(jù)分析功能;目前Kudu的定位比較尷尬,屬于一個(gè)折中的方案,在實(shí)際工作中應(yīng)用有限。
● Kafka常用于海量數(shù)據(jù)的臨時(shí)緩沖存儲(chǔ),對外提供高吞吐量的讀寫能力。
三、分布式資源管理框架
在傳統(tǒng)的IT領(lǐng)域中,企業(yè)的服務(wù)器資源(內(nèi)存、CPU等)是有限的,也是固定的。但是,服務(wù)器的應(yīng)用場景卻是靈活多變的。例如,今天臨時(shí)上線了一個(gè)系統(tǒng),需要占用幾臺(tái)服務(wù)器;過了幾天,需要把這個(gè)系統(tǒng)下線,把這幾臺(tái)服務(wù)器清理出來。
在大數(shù)據(jù)時(shí)代到來之前,服務(wù)器資源的變更對應(yīng)的是系統(tǒng)的上線和下線,這些變動(dòng)是有限的。隨著大數(shù)據(jù)時(shí)代的到來,臨時(shí)任務(wù)的需求量大增,這些任務(wù)往往需要大量的服務(wù)器資源。如果此時(shí)還依賴運(yùn)維人員人工對接服務(wù)器資源的變更,顯然是不現(xiàn)實(shí)的。因此,分布式資源管理系統(tǒng)應(yīng)運(yùn)而生,常見的包括YARN、Kubernetes和Mesos,它們的典型應(yīng)用領(lǐng)域如圖5所示。
四、數(shù)據(jù)計(jì)算技術(shù)框架
數(shù)據(jù)計(jì)算分為離線數(shù)據(jù)計(jì)算和實(shí)時(shí)數(shù)據(jù)計(jì)算。
大數(shù)據(jù)中的離線數(shù)據(jù)計(jì)算引擎經(jīng)過十幾年的發(fā)展,到目前為止主要發(fā)生了3次大的變更。
● MapReduce可以稱得上是大數(shù)據(jù)行業(yè)的第一代離線數(shù)據(jù)計(jì)算引擎,主要用于解決大規(guī)模數(shù)據(jù)集的分布式并行計(jì)算。MapReduce計(jì)算引擎的核心思想是,將計(jì)算邏輯抽象成Map和Reduce兩個(gè)階段進(jìn)行處理。
● Tez計(jì)算引擎在大數(shù)據(jù)技術(shù)生態(tài)圈中的存在感較弱,實(shí)際工作中很少會(huì)單獨(dú)使用Tez去開發(fā)計(jì)算程序。
● Spark最大的特點(diǎn)就是內(nèi)存計(jì)算:任務(wù)執(zhí)行階段的中間結(jié)果全部被放在內(nèi)存中,不需要讀寫磁盤,極大地提高了數(shù)據(jù)的計(jì)算性能。Spark提供了大量高階函數(shù)(也可以稱之為算子),可以實(shí)現(xiàn)各種復(fù)雜邏輯的迭代計(jì)算,非常適合應(yīng)用在海量數(shù)據(jù)的快速且復(fù)雜計(jì)算需求中。
2. 實(shí)時(shí)數(shù)據(jù)計(jì)算
業(yè)內(nèi)最典型的實(shí)時(shí)數(shù)據(jù)計(jì)算場景是天貓“雙十一”的數(shù)據(jù)大屏。數(shù)據(jù)大屏中展現(xiàn)的成交總金額、訂單總量等數(shù)據(jù)指標(biāo),都是實(shí)時(shí)計(jì)算出來的。用戶購買商品后,商品的金額就會(huì)被實(shí)時(shí)增加到數(shù)據(jù)大屏中的成交總金額中。
● Storm主要用于實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)分布式計(jì)算。
● Flink屬于新一代實(shí)時(shí)數(shù)據(jù)分布式計(jì)算引擎,其計(jì)算性能和生態(tài)圈都優(yōu)于Storm。
● Spark中的SparkStreaming組件也可以提供基于秒級(jí)別的實(shí)時(shí)數(shù)據(jù)分布式計(jì)算功能。
他和Storm、Flink之間的區(qū)別見表4。
Storm、Spark、Flink 之間的技術(shù)選型如圖6所示。
目前企業(yè)中離線計(jì)算主要使用Spark,實(shí)時(shí)計(jì)算主要使用Flink。
五、數(shù)據(jù)分析技術(shù)框架
數(shù)據(jù)分析技術(shù)框架包括Hive、Impala、Kylin、Clickhouse、Druid、Drois等,它們的典型應(yīng)用場景如圖7所示。
Hive、Impala和Kylin屬于典型的離線OLAP數(shù)據(jù)分析引擎,主要應(yīng)用在離線數(shù)據(jù)分析領(lǐng)域,它們之間的區(qū)別見表5。
表5
● Hive的執(zhí)行效率一般,但是穩(wěn)定性極高;
● Impala基于內(nèi)存可以提供優(yōu)秀的執(zhí)行效率,但是穩(wěn)定性一般;
● Kylin通過預(yù)計(jì)算可以提供PB級(jí)別數(shù)據(jù)毫秒級(jí)響應(yīng)。
Clickhouse、Druid和Drois屬于典型的實(shí)時(shí)OLAP數(shù)據(jù)分析引擎,主要應(yīng)用在實(shí)時(shí)數(shù)據(jù)分析領(lǐng)域,它們之間的區(qū)別見表6。
● Druid和Doris是可以支持高并發(fā)的,ClickHouse的并發(fā)能力有限;Druid中的SQL支持是有限的,ClickHouse支持非標(biāo)準(zhǔn)SQL,Doris支持標(biāo)準(zhǔn)SQL,對SQL支持比較好。
● 目前Druid和ClickHouse的成熟程度相對比較高,Doris處于快速發(fā)展階段。
六、任務(wù)調(diào)度技術(shù)框架
包括Azkaban、Ooize、DolphinScheduler等。它們適用于普通定時(shí)執(zhí)行的例行化任務(wù),以及包含復(fù)雜依賴關(guān)系的多級(jí)任務(wù)進(jìn)行調(diào)度,支持分布式,保證調(diào)度系統(tǒng)的性能和穩(wěn)定性,它們之間的區(qū)別見表7。
它們之前的技術(shù)選型如圖8所示。
七、大數(shù)據(jù)底層基礎(chǔ)技術(shù)框架
大數(shù)據(jù)底層基礎(chǔ)技術(shù)框架主要是指Zookeeper。Zookeepe主要提供常用的基礎(chǔ)功能(例如:命名空間、配置服務(wù)等),大數(shù)據(jù)生態(tài)圈中的Hadoop(HA)、HBase、Kafka等技術(shù)組件的運(yùn)行都會(huì)用到Zookeeper。
八、數(shù)據(jù)檢索技術(shù)框架
隨著企業(yè)中數(shù)據(jù)的逐步積累,針對海量數(shù)據(jù)的統(tǒng)計(jì)分析需求會(huì)變得越來越多樣化:不僅要進(jìn)行分析,還要實(shí)現(xiàn)多條件快速復(fù)雜查詢。例如,電商網(wǎng)站中的商品搜索功能,以及各種搜索引擎中的信息檢索功能,這些功能都屬于多條件快速復(fù)雜查詢的范疇。
在選擇全文檢索引擎工具時(shí),可以從易用性、擴(kuò)展性、穩(wěn)定性、集群運(yùn)維難度、項(xiàng)目集成程度、社區(qū)活躍度這幾個(gè)方面進(jìn)行對比。Lucene、Solr和Elasticsearch的對比見表8。
九、大數(shù)據(jù)集群安裝管理框架
企業(yè)如果想從傳統(tǒng)的數(shù)據(jù)處理轉(zhuǎn)型到大數(shù)據(jù)處理,首先要做就是搭建一個(gè)穩(wěn)定可靠的大數(shù)據(jù)平臺(tái)。
一個(gè)完整的大數(shù)據(jù)平臺(tái)需要包含數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)計(jì)算、數(shù)據(jù)分析、集群監(jiān)控等功能,這就意味著其中需要包含F(xiàn)lume、Kafka、Haodop、Hive、HBase、Spark、Flink等組件,這些組件需要部署到上百臺(tái)甚至上千臺(tái)機(jī)器中。
如果依靠運(yùn)維人員單獨(dú)安裝每一個(gè)組件,則工作量比較大,而且需要考慮版本之間的匹配問題及各種沖突問題,并且后期集群維護(hù)工作也會(huì)給運(yùn)維人員造成很大的壓力。
于是,國外一些廠商就對大數(shù)據(jù)中的組件進(jìn)行了封裝,提供了一體化的大數(shù)據(jù)平臺(tái),利用它可以快速安裝大數(shù)據(jù)組件。目前業(yè)內(nèi)最常見的是包括CDH、HDP、CDP等。
● HDP:全稱是 Hortonworks Data Platform。它由 Hortonworks 公司基于 Apache Hadoop 進(jìn)行了封裝,借助于 Ambari 工具提供界面化安裝和管理,并且集成了大數(shù)據(jù)中的常見組件, 可以提供一站式集群管理。HDP 屬于開源版免費(fèi)大數(shù)據(jù)平臺(tái),沒有提供商業(yè)化服務(wù);
● CDH:全稱是 Cloudera Distribution Including Apache Hadoop。它由 Cloudera 公司基于 Apache Hadoop 進(jìn)行了商業(yè)化,借助于 Cloudera Manager 工具提供界面化安裝和管理,并且集成了大數(shù)據(jù)中的常見組件,可以提供一站式集群管理。CDH 屬于商業(yè)化收費(fèi)大 數(shù)據(jù)平臺(tái),默認(rèn)可以試用 30 天。之后,如果想繼續(xù)使用高級(jí)功能及商業(yè)化服務(wù),則需要付費(fèi)購買授權(quán),如果只使用基礎(chǔ)功能,則可以繼續(xù)免費(fèi)使用;
● CDP:Cloudera 公司在 2018 年 10 月份收購了 Hortonworks,之后推出了新一代的大數(shù)據(jù)平臺(tái)產(chǎn)品 CDP(Cloudera Data Center)。CDP 的版本號(hào)延續(xù)了之前 CDH 的版本號(hào)。從 7.0 版本開始, CDP 支持 Private Cloud(私有云)和 Hybrid Cloud(混合云)。CDP 將 HDP 和 CDH 中比較優(yōu)秀的組件進(jìn)行了整合,并且增加了一些新的組件。
三者的關(guān)系如圖9所示。
以上內(nèi)容出自于《大數(shù)據(jù)技術(shù)及架構(gòu)圖解實(shí)戰(zhàn)派》一書。