Hadoop,Spark、Flink是目前重要的三大分布式計算系統(tǒng)
· Hadoop用于離線復(fù)雜大數(shù)據(jù)處理
·Spark? ?用于離線快速的大數(shù)據(jù)處理
·Flink? ? ?用于在線實時的大數(shù)據(jù)處理。
一、為什么需要分布式計算系統(tǒng)?
當(dāng)前大數(shù)據(jù)的數(shù)據(jù)量已達PB級別(1PB=1024TB),可以說是龐大無比。同時數(shù)據(jù)還有結(jié)構(gòu)化(如數(shù)字、符號等)、非結(jié)構(gòu)化(如文本、圖像、聲音、視頻等)之分,兼具大量、復(fù)雜的特點,使得如何又快又好又便宜得進行大數(shù)據(jù)的存儲,管理和處理變成一個亟待解決的問題。
于是分布式計算作為一種低成本的方案被提出來了。原理就是把一組計算機通過網(wǎng)絡(luò)相互連接組成分散系統(tǒng),盡管分散系統(tǒng)內(nèi)的單個計算機的計算能力不強,但是每個計算機只計算一部分數(shù)據(jù),多臺計算機同時計算,最后將這些計算結(jié)果合并得到最終的結(jié)果。就整個分散系統(tǒng)而言,處理數(shù)據(jù)的速度遠高于單個計算機,且比集中式計算的大型機要劃算的多。
二、為什么是Hadoop,Spark、Flink?
為什么是他們,這要從谷歌的三篇論文說起...
2003年到2004年間,Google發(fā)表了三篇技術(shù)論文,提出了一套分布式計算理論,分別是:
·?分布式計算框架? ?MapReduce
·?分布式文件系統(tǒng)? ?GFS(Google File System)
·?數(shù)據(jù)存儲系統(tǒng)? ? ? ?BigTable
但由于Google沒有開源,所以其他互聯(lián)網(wǎng)公司根據(jù)Google三篇論文中提到的原理,對照MapReduce搭建了Hadoop ,對照GFS搭建了HDFS ,對照BigTable搭建了HBase.
即:
·?分布式計算框架? ?MapReduce? ? ? ? ? ? ? ? ? ? ? ? ? ? ?→? Hadoop?
·?分布式文件系統(tǒng)? ?GFS(Google File System)? ?→? HDFS?
·?數(shù)據(jù)存儲系統(tǒng)? ? ? ?BigTable? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? →? HBase
而Spark分布式計算是在Hadoop分布式計算的基礎(chǔ)上進行的一些架構(gòu)上的改良。目前也是Hadoop生態(tài)圈的成員之一。
Spark與Hadoop最大的不同點在于,Hadoop用硬盤存儲數(shù)據(jù),而Spark用內(nèi)存存儲數(shù)據(jù),所以Spark能提供超過Hadoop100倍的運算速度。但因為內(nèi)存斷電后會丟失數(shù)據(jù),所以Spark不能用于處理需要長期保存的數(shù)據(jù)。
Flink是目前唯一同時支持高吞吐、低延遲、高性能的分布式流式數(shù)據(jù)處理框架。一般需要實時處理的場景都有他的身影,比如:實時智能推薦、實時復(fù)雜事件處理、實時欺詐檢測、實時數(shù)倉與ETL、實時報表分析等
三、Hadoop生態(tài)圈
廣義的Hadoop不再是單指一個分布式計算系統(tǒng),而是一套生態(tài)系統(tǒng)。
那么,這套生態(tài)圈是如何產(chǎn)生的呢?
在有了Hadoop之類計算系統(tǒng)的基礎(chǔ)上,人們希望用更友好的語言來做計算,于是產(chǎn)生了Hive、Pig、SparkSQL等。計算問題解決了,還能在什么地方進一步優(yōu)化呢?于是人們想到給不同的任務(wù)分配資源,于是就有了Yarn、Oozie等。漸漸地,隨著各種各樣的工具出現(xiàn),就慢慢演變成一個包含了文件系統(tǒng)、計算框架、調(diào)度系統(tǒng)的Hadoop大數(shù)據(jù)生態(tài)圈。


附:一些其他的組件示意
Kafka:是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理各大網(wǎng)站或者App中用戶的動作流數(shù)據(jù)。用戶行為數(shù)據(jù)是后續(xù)進行業(yè)務(wù)分析和優(yōu)化的重要數(shù)據(jù)資產(chǎn),這些數(shù)據(jù)通常以處理日志和日志聚合的方式解決。
Kafka集群上的消息是有時效性的,可以對發(fā)布上來的消息設(shè)置一個過期時間,不管有沒有被消費,超過過期時間的消息都會被清空。例如,如果過期時間設(shè)置為一周,那么消息發(fā)布上來一周內(nèi),它們都是可以被消費的,如果過了過期時間,這條消息就會被丟棄以釋放更多空間。
Oozie:是一個工作流調(diào)度系統(tǒng),統(tǒng)一管理工作流的調(diào)度順序、安排任務(wù)的執(zhí)行時間等,用來管理Hadoop的任務(wù)。Oozie集成了Hadoop的MapReduce、Pig、Hive等協(xié)議以及Java、Shell腳本等任務(wù),底層仍然是一個MapReduce程序。
ZooKeeper:是Hadoop和HBase的重要組件,是一個分布式開放的應(yīng)用程序協(xié)調(diào)服務(wù),主要為應(yīng)用提供配置維護、域名服務(wù)、分布式同步、組服務(wù)等一致性服務(wù)。
YARN:Hadoop生態(tài)有很多工具,為了保證這些工具有序地運行在同一個集群上,需要有一個調(diào)度系統(tǒng)進行協(xié)調(diào)指揮,YARN就是基于此背景誕生的資源統(tǒng)一管理平臺。