后Hadoop時(shí)代的大數(shù)據(jù)架構(gòu)-系統(tǒng)運(yùn)維|Linux.中國(guó)-開(kāi)源社區(qū) https://linux.cn/article-5324-1.html
提到大數(shù)據(jù)分析平臺(tái)涩哟,不得不說(shuō)Hadoop系統(tǒng)童番,Hadoop到現(xiàn)在也超過(guò)10年的歷史了,很多東西發(fā)生了變化糟秘,版本也從0.x 進(jìn)化到目前的2.6版本。我把2012年后定義成后Hadoop平臺(tái)時(shí)代性雄,這不是說(shuō)不用Hadoop煤蚌,而是像NoSQL (Not Only SQL)那樣翰苫,有其他的選型補(bǔ)充鹰晨。我在知乎上也寫(xiě)過(guò)Hadoop的一些入門文章 如何學(xué)習(xí)Hadoop - 董飛的回答,為了給大家有個(gè)鋪墊妹窖,簡(jiǎn)單講一些相關(guān)開(kāi)源組件嫉沽。
背景篇
Hadoop: 開(kāi)源的數(shù)據(jù)分析平臺(tái),解決了大數(shù)據(jù)(大到一臺(tái)計(jì)算機(jī)無(wú)法進(jìn)行存儲(chǔ)闻镶,一臺(tái)計(jì)算機(jī)無(wú)法在要求的時(shí)間內(nèi)進(jìn)行處理)的可靠存儲(chǔ)和處理郊霎。適合處理非結(jié)構(gòu)化數(shù)據(jù),包括HDFS解幽,MapReduce基本組件曾雕。
HDFS:提供了一種跨服務(wù)器的彈性數(shù)據(jù)存儲(chǔ)系統(tǒng)擎宝。
MapReduce:技術(shù)提供了感知數(shù)據(jù)位置的標(biāo)準(zhǔn)化處理流程:讀取數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行映射(Map)帖族,使用某個(gè)鍵值對(duì)數(shù)據(jù)進(jìn)行重排,然后對(duì)數(shù)據(jù)進(jìn)行化簡(jiǎn)(Reduce)得到最終的輸出侄非。
Amazon Elastic Map Reduce(EMR): 托管的解決方案竞漾,運(yùn)行在由Amazon Elastic Compute Cloud(EC2)和Simple Strorage Service(S3)組成的網(wǎng)絡(luò)規(guī)模的基礎(chǔ)設(shè)施之上较锡。如果你需要一次性的或不常見(jiàn)的大數(shù)據(jù)處理篮条,EMR可能會(huì)為你節(jié)省開(kāi)支弟头。但EMR是高度優(yōu)化成與S3 中的數(shù)據(jù)一起工作,會(huì)有較高的延時(shí)兑燥。
Hadoop 還包含了一系列技術(shù)的擴(kuò)展系統(tǒng)亮瓷,這些技術(shù)主要包括了Sqoop、Flume降瞳、Hive嘱支、Pig、Mahout挣饥、Datafu和HUE等除师。
Pig:分析大數(shù)據(jù)集的一個(gè)平臺(tái),該平臺(tái)由一種表達(dá)數(shù)據(jù)分析程序的高級(jí)語(yǔ)言和對(duì)這些程序進(jìn)行評(píng)估的基礎(chǔ)設(shè)施一起組成扔枫。
Hive:用于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)汛聚,它提供了類似于SQL的查詢語(yǔ)言,通過(guò)使用該語(yǔ)言短荐,可以方便地進(jìn)行數(shù)據(jù)匯總倚舀,特定查詢以及分析。
Hbase:一種分布的忍宋、可伸縮的痕貌、大數(shù)據(jù)儲(chǔ)存庫(kù),支持隨機(jī)糠排、實(shí)時(shí)讀/寫(xiě)訪問(wèn)舵稠。
Sqoop:為高效傳輸批量數(shù)據(jù)而設(shè)計(jì)的一種工具,其用于Apache Hadoop和結(jié)構(gòu)化數(shù)據(jù)儲(chǔ)存庫(kù)如關(guān)系數(shù)據(jù)庫(kù)之間的數(shù)據(jù)傳輸入宦。
Flume:一種分布式的哺徊、可靠的、可用的服務(wù)乾闰,其用于高效地搜集落追、匯總、移動(dòng)大量日志數(shù)據(jù)涯肩。
ZooKeeper:一種集中服務(wù)淋硝,其用于維護(hù)配置信息,命名宽菜,提供分布式同步谣膳,以及提供分組服務(wù)。
Cloudera:最成型的Hadoop發(fā)行版本铅乡,擁有最多的部署案例继谚。提供強(qiáng)大的部署、管理和監(jiān)控工具阵幸。開(kāi)發(fā)并貢獻(xiàn)了可實(shí)時(shí)處理大數(shù)據(jù)的Impala項(xiàng)目花履。
Hortonworks:使用了100%開(kāi)源Apache Hadoop提供商芽世。開(kāi)發(fā)了很多增強(qiáng)特性并提交至核心主干,這使得Hadoop能夠在包括Windows Server和Azure在內(nèi)平臺(tái)上本地運(yùn)行诡壁。
MapR:獲取更好的性能和易用性而支持本地Unix文件系統(tǒng)而不是HDFS济瓢。提供諸如快照、鏡像或有狀態(tài)的故障恢復(fù)等高可用性特性妹卿。領(lǐng)導(dǎo)著Apache Drill項(xiàng)目旺矾,是Google的Dremel的開(kāi)源實(shí)現(xiàn),目的是執(zhí)行類似SQL的查詢以提供實(shí)時(shí)處理夺克。
原理篇
數(shù)據(jù)存儲(chǔ)
我們的目標(biāo)是做一個(gè)可靠的箕宙,支持大規(guī)模擴(kuò)展和容易維護(hù)的系統(tǒng)。計(jì)算機(jī)里面有個(gè)locality(局部性定律)铺纽,如圖所示柬帕。從下到上訪問(wèn)速度越來(lái)越快,但存儲(chǔ)代價(jià)更大狡门。
相對(duì)內(nèi)存陷寝,磁盤和SSD就需要考慮數(shù)據(jù)的擺放, 因?yàn)樾阅軙?huì)差異很大其馏。磁盤好處是持久化盼铁,單位成本便宜,容易備份尝偎。但隨著內(nèi)存便宜,很多數(shù)據(jù)集合可以考慮直接放入內(nèi)存并分布到各機(jī)器上鹏控,有些基于 key-value, Memcached用在緩存上致扯。內(nèi)存的持久化可以通過(guò) (帶電池的RAM),提前寫(xiě)入日志再定期做Snapshot或者在其他機(jī)器內(nèi)存中復(fù)制当辐。當(dāng)重啟時(shí)需要從磁盤或網(wǎng)絡(luò)載入之前狀態(tài)抖僵。其實(shí)寫(xiě)入磁盤就用在追加日 志上面 ,讀的話就直接從內(nèi)存缘揪。像VoltDB, MemSQL耍群,RAMCloud 關(guān)系型又基于內(nèi)存數(shù)據(jù)庫(kù),可以提供高性能找筝,解決之前磁盤管理的麻煩蹈垢。
HyperLogLog & Bloom Filter & CountMin Sketch
都是是應(yīng)用于大數(shù)據(jù)的算法,大致思路是用一組相互獨(dú)立的哈希函數(shù)依次處理輸入袖裕。HyperLogLog 用來(lái)計(jì)算一個(gè)很大集合的基數(shù)(即合理總共有多少不相同的元素)曹抬,對(duì)哈希值分塊計(jì)數(shù):對(duì)高位統(tǒng)計(jì)有多少連續(xù)的0;用低位的值當(dāng)做數(shù)據(jù)塊急鳄。 BloomFilter,在預(yù)處理階段對(duì)輸入算出所有哈希函數(shù)的值并做出標(biāo)記谤民。當(dāng)查找一個(gè)特定的輸入是否出現(xiàn)過(guò)堰酿,只需查找這一系列的哈希函數(shù)對(duì)應(yīng)值上有沒(méi) 有標(biāo)記。對(duì)于BloomFilter张足,可能有False Positive触创,但不可能有False Negative。BloomFilter可看做查找一個(gè)數(shù)據(jù)有或者沒(méi)有的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)的頻率是否大于1)为牍。CountMin Sketch在BloomFilter的基礎(chǔ)上更進(jìn)一步哼绑,它可用來(lái)估算某一個(gè)輸入的頻率(不局限于大于1)。
CAP Theorem
技術(shù)篇
來(lái)自:http://thinkbig.teradata.com/leading_big_data_technologies/big-data-reference-architecture/
根據(jù)不同的延遲要求(SLA)新翎,數(shù)據(jù)量存儲(chǔ)大小, 更新量多少住练,分析需求地啰,大數(shù)據(jù)處理的架構(gòu)也需要做靈活的設(shè)計(jì)。上圖就描述了在不同領(lǐng)域中大數(shù)據(jù)組件讲逛。
說(shuō)大數(shù)據(jù)的技術(shù)還是要先提Google亏吝,Google 新三輛馬車,Spanner, F1, Dremel
Spanner:高可擴(kuò)展盏混、多版本蔚鸥、全球分布式外加同步復(fù)制特性的谷歌內(nèi)部數(shù)據(jù)庫(kù),支持外部一致性的分布式事務(wù);設(shè)計(jì)目標(biāo)是橫跨全球上百個(gè)數(shù)據(jù)中心,覆蓋百萬(wàn)臺(tái)服務(wù)器,包含萬(wàn)億條行記錄许赃!(Google就是這么霸氣-)
F1: 構(gòu)建于Spanner之上,在利用Spanner的豐富特性基礎(chǔ)之上,還提供分布式SQL止喷、事務(wù)一致性的二級(jí)索引等功能,在AdWords廣告業(yè)務(wù)上成功代替了之前老舊的手工MySQL Shard方案。
**Dremel: 一種用來(lái)分析信息的方法混聊,它可以在數(shù)以千計(jì)的服務(wù)器上運(yùn)行启盛,類似使用SQL語(yǔ)言,能以極快的速度處理網(wǎng)絡(luò)規(guī)模的海量數(shù)據(jù)(PB數(shù)量級(jí)),只需幾秒鐘時(shí)間就能完成僵闯。
Spark
2014年最火的大數(shù)據(jù)技術(shù)Spark卧抗,有什么關(guān)于 Spark 的書(shū)推薦? - 董飛的回答 做了介紹鳖粟。主要意圖是基于內(nèi)存計(jì)算做更快的數(shù)據(jù)分析社裆。同時(shí)支持圖計(jì)算,流式計(jì)算和批處理向图。Berkeley AMP Lab的核心成員出來(lái)成立公司Databricks開(kāi)發(fā)Cloud產(chǎn)品泳秀。
Flink
Kafka
Announcing the Confluent Platform 1.0 Kafka 描述為 LinkedIn 的“中樞神經(jīng)系統(tǒng)”,管理從各個(gè)應(yīng)用程序匯聚到此的信息流檩赢,這些數(shù)據(jù)經(jīng)過(guò)處理后再被分發(fā)到各處吕嘀。不同于傳統(tǒng)的企業(yè)信息列隊(duì)系統(tǒng),Kafka 是以近乎實(shí)時(shí)的方式處理流經(jīng)一個(gè)公司的所有數(shù)據(jù)贞瞒,目前已經(jīng)為 LinkedIn, Netflix, Uber 和 Verizon 建立了實(shí)時(shí)信息處理平臺(tái)偶房。Kafka 的優(yōu)勢(shì)就在于近乎實(shí)時(shí)性。
Storm
Samza
LinkedIn主推的流式計(jì)算框架。與其他類似的Spark叨橱,Storm做了幾個(gè)比較典蜕。跟Kafka集成良好,作為主要的存儲(chǔ)節(jié)點(diǎn)和中介罗洗。
Lambda architecture
Nathan寫(xiě)了文章《如何去打敗CAP理論》How to beat the CAP theorem愉舔,提出Lambda Architecture,主要思想是對(duì)一些延遲高但數(shù)據(jù)量大的還是采用批處理架構(gòu)伙菜,但對(duì)于即時(shí)性實(shí)時(shí)數(shù)據(jù)使用流式處理框架轩缤,然后在之上搭建一個(gè)服務(wù)層去合并兩邊的數(shù)據(jù)流,這種系統(tǒng)能夠平衡實(shí)時(shí)的高效和批處理的Scale,看了覺(jué)得腦洞大開(kāi)火的,確實(shí)很有效壶愤,被很多公司采用在生產(chǎn)系統(tǒng)中。
Lambda架構(gòu)的問(wèn)題要維護(hù)兩套系統(tǒng)馏鹤,Twitter開(kāi)發(fā)了Summingbird來(lái)做到一次編程征椒,多處運(yùn)行。將批處理和流處理無(wú)縫連接湃累,通過(guò)整合批處理與流處理來(lái)減少它們之間的轉(zhuǎn)換開(kāi)銷勃救。下圖就解釋了系統(tǒng)運(yùn)行時(shí)。
NoSQL
數(shù)據(jù)傳統(tǒng)上是用樹(shù)形結(jié)構(gòu)存儲(chǔ)(層次結(jié)構(gòu))治力,但很難表示多對(duì)多的關(guān)系蒙秒,關(guān)系型數(shù)據(jù)庫(kù)就是解決這個(gè)難題,最近幾年發(fā)現(xiàn)關(guān)系型數(shù)據(jù)庫(kù)也不靈了宵统,新型NoSQL出現(xiàn) 如Cassandra晕讲,MongoDB,Couchbase榜田。NoSQL 里面也分成這幾類益兄,文檔型,圖運(yùn)算型箭券,列存儲(chǔ)净捅,key-value型,不同系統(tǒng)解決不同問(wèn)題辩块。沒(méi)一個(gè)one-size-fits-all 的方案蛔六。
Cassandra
大數(shù)據(jù)架構(gòu)中,Cassandra的主要作用就是存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)废亭。DataStax的Cassandra是一種面向列的數(shù)據(jù)庫(kù)国章,它通過(guò)分布式架構(gòu)提供高可用性及耐用性的服務(wù)。它實(shí)現(xiàn)了超大規(guī)模的集群豆村,并提供一種稱作“最終一致性”的一致性類型液兽,這意味著在任何時(shí)刻,在不同服務(wù)器中的相同數(shù)據(jù)庫(kù)條目可以有不同的值掌动。
SQL on Hadoop
開(kāi)源社區(qū)業(yè)出現(xiàn)了很多 SQL-on-Hadoop的項(xiàng)目四啰,著眼跟一些商業(yè)的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)競(jìng)爭(zhēng)。包括Apache Hive, Spark SQL, Cloudera Impala, Hortonworks Stinger, Facebook Presto, Apache Tajo粗恢,Apache Drill柑晒。有些是基于Google Dremel設(shè)計(jì)。
Impala
Cloudera公司主導(dǎo)開(kāi)發(fā)的新型查詢系統(tǒng)眷射,它提供SQL語(yǔ)義匙赞,能夠查詢存儲(chǔ)在Hadoop的HDFS和HBase中的PB級(jí)大數(shù)據(jù)佛掖,號(hào)稱比Hive快5-10倍,但最近被Spark的風(fēng)頭給罩住了涌庭,大家還是更傾向于后者芥被。
Drill
Apache社區(qū)類似于Dremel的開(kāi)源版本—Drill。一個(gè)專為互動(dòng)分析大型數(shù)據(jù)集的分布式系統(tǒng)脾猛。
Druid
在大數(shù)據(jù)集之上做實(shí)時(shí)統(tǒng)計(jì)分析而設(shè)計(jì)的開(kāi)源數(shù)據(jù)存儲(chǔ)撕彤。這個(gè)系統(tǒng)集合了一個(gè)面向列存儲(chǔ)的層,一個(gè)分布式猛拴、shared-nothing的架構(gòu)羹铅,和一個(gè)高級(jí)的索引結(jié)構(gòu),來(lái)達(dá)成在秒級(jí)以內(nèi)對(duì)十億行級(jí)別的表進(jìn)行任意的探索分析愉昆。
Berkeley Data Analytics Stack
上面說(shuō)道Spark职员,在Berkeley AMP lab 中有個(gè)更宏偉的藍(lán)圖,就是BDAS跛溉,里面有很多明星項(xiàng)目焊切,除了Spark,還包括:
Mesos:一個(gè)分布式環(huán)境的資源管理平臺(tái)芳室,它使得Hadoop专肪、MPI、Spark作業(yè)在統(tǒng)一資源管理環(huán)境下執(zhí)行堪侯。它對(duì)Hadoop2.0支持很好嚎尤。Twitter,Coursera都在使用伍宦。
Tachyon:是一個(gè)高容錯(cuò)的分布式文件系統(tǒng)芽死,允許文件以內(nèi)存的速度在集群框架中進(jìn)行可靠的共享,就像Spark和MapReduce那樣次洼。項(xiàng)目發(fā)起人李浩源說(shuō)目前發(fā)展非彻毓螅快,甚至比Spark當(dāng)時(shí)還要驚人卖毁,已經(jīng)成立創(chuàng)業(yè)公司Tachyon Nexus.
BlinkDB:也很有意思揖曾,在海量數(shù)據(jù)上運(yùn)行交互式 SQL 查詢的大規(guī)模并行查詢引擎。它允許用戶通過(guò)權(quán)衡數(shù)據(jù)精度來(lái)提升查詢響應(yīng)時(shí)間亥啦,其數(shù)據(jù)的精度被控制在允許的誤差范圍內(nèi)炭剪。
Cloudera
Hadoop老大哥提出的經(jīng)典解決方案。
HDP (Hadoop Data Platform)
Hortonworks 提出的架構(gòu)選型禁悠。
Redshift
Netflix
完全基于AWS的數(shù)據(jù)處理解決方案尔邓。
Intel
參考鏈接
The Hadoop Ecosystem Table
How to beat the CAP theorem
Lambda Architecture
Questioning the Lambda Architecture