Hadoop 第一代分布式存儲(chǔ)計(jì)算框架 Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開發(fā),它允許用戶在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力高速運(yùn)算和存儲(chǔ)。Hadoop包含豐富的生態(tài)組件,有我們耳熟能詳?shù)姆植际轿募到y(tǒng)HDFS,分布式計(jì)算框架MapReduce,以及分布式調(diào)度系統(tǒng)YARN。 HDFS是一個(gè)高容錯(cuò)、高吞吐的分布式存儲(chǔ)系統(tǒng),可以被廣泛部署在低價(jià)的硬件設(shè)備之上?;炯軜?gòu): 有幾個(gè)概念值得記?。?/span>
大文件被切分成多個(gè)block存儲(chǔ),默認(rèn)大小為128M。為了保證數(shù)據(jù)可靠性,每個(gè)block分布式存儲(chǔ)在多個(gè)datanode節(jié)點(diǎn)上,默認(rèn)3副本。
NameNode是HDFS的主節(jié)點(diǎn),主要作用是維大數(shù)據(jù)培訓(xùn)護(hù)文件系統(tǒng)的目錄結(jié)構(gòu),管理文件與block之間關(guān)系,block與datanode之間關(guān)系。
DataNode是HDFS的數(shù)據(jù)節(jié)點(diǎn),主要作用是存儲(chǔ)與管理數(shù)據(jù)塊,并將信息上報(bào)給NameNode。 MapReduce是Hadoop體系中的并行計(jì)算框架, 也是一種編程模型,分成Map和Reduce兩個(gè)階段,在Map階段對(duì)數(shù)據(jù)進(jìn)行提取,得到有效的鍵值對(duì),然后在Reduce階段進(jìn)行計(jì)算,得到最終的結(jié)果。流程圖如: YARN是一個(gè)通用資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,它的引入在集群利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面具有重大意義。這里不做詳細(xì)介紹。 Hive 基于Hadoop的數(shù)據(jù)倉(cāng)庫(kù) Hive是構(gòu)建在Hadoop之上的數(shù)據(jù)倉(cāng)庫(kù)工具,由facebook開源,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問題。Hive 定義了一種類 SQL 查詢語(yǔ)言 HQL,提供SQL查詢功能,可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行。 Hive是一個(gè)SQL on Hadoop組件,主要特點(diǎn)是高吞吐、高延時(shí),學(xué)習(xí)成本低(SQL),通常用于海量結(jié)構(gòu)化數(shù)據(jù)離線分析;Hive支持TextFile、RCFile、ORC、Parquet等多種文件格式,Gzip、LZO、Snappy等多種壓縮格式;支持用戶自定義函數(shù)。數(shù)據(jù)模型如下: Hive是大家比較熟知的開源組件,多數(shù)情況下我們只要解決如何更好、穩(wěn)定、高效的使用問題即可。涉及Hive MetaStore相關(guān)的屬于高階使用。 HBase 主流的分布式NoSQL數(shù)據(jù)庫(kù) HBase(Hadoop database)是一個(gè)分布式、可擴(kuò)展、面向列的NoSQL數(shù)據(jù)庫(kù),本質(zhì)上是一個(gè)Key-Value系統(tǒng),底層數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)HDFS上,原生支持 MapReduce計(jì)算框架,具有高吞吐、低延時(shí)的讀寫特點(diǎn)。 HBase周邊生態(tài)成熟,具有很多豐富的特性,比如強(qiáng)一致性讀寫、自動(dòng)分區(qū)、自動(dòng)故障轉(zhuǎn)移、面向列等。HBase主要用于海量數(shù)據(jù)永久性存儲(chǔ)與超大規(guī)模并發(fā)訪問場(chǎng)景,目前應(yīng)用非常廣泛。生態(tài)架構(gòu)如: HBase相關(guān)的概念主要有:
HBase主節(jié)點(diǎn),負(fù)責(zé)節(jié)點(diǎn)的管理。
HBase從節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn);負(fù)責(zé)數(shù)據(jù)的讀寫。
HBase表的分區(qū),水平方向分布式存儲(chǔ)的單元。
Spark 一站式的分布式計(jì)算引擎 Spark是一個(gè)快速通用的、一站式的分布式計(jì)算引擎,它是開源的類Hadoop MapReduce的通用并行框架,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn),但又不同于MapReduce,其中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要頻繁讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce算法。 Spark提供了大量的庫(kù),主要包括Spark Core、Spark SQL 、Spark Streaming 、MLlib、GraphX等。開發(fā)者可以在同一個(gè)應(yīng)用程序中無縫組合使用這些庫(kù)。框架圖如: 總結(jié)Spark的技術(shù)優(yōu)勢(shì),主要有以下幾點(diǎn):
Kafka 分布式消息引擎及流處理平臺(tái) Kafka是一個(gè)分布式消息引擎與流處理平臺(tái),經(jīng)常用做企業(yè)的消息總線、實(shí)時(shí)數(shù)據(jù)管道,甚至還可把它看作存儲(chǔ)系統(tǒng)。早期Kafka 的定位是一個(gè)高吞吐的分布式消息系統(tǒng),目前則演變成了一個(gè)成熟的分布式消息引擎,以及流處理平臺(tái)。 高吞吐、低延時(shí)是Kafka 顯著的特點(diǎn),Kafka能夠達(dá)到百萬級(jí)的消息吞吐量,延遲可達(dá)毫秒級(jí)。Kafka是典型的生產(chǎn)者-消費(fèi)者模型,如下: Kafka生產(chǎn)端發(fā)送消息到集群Broker節(jié)點(diǎn)上,具體是發(fā)到某一個(gè)topic的partition中,消息在同一partition中保證順序;消費(fèi)端拉取消息進(jìn)行消費(fèi)處理,通常是sink到其他引擎如另一個(gè)kafka、存儲(chǔ)系統(tǒng)、NoSQL數(shù)據(jù)庫(kù)等。涉及主要概念有:
生產(chǎn)者,即消息產(chǎn)生和發(fā)送的一方。
消費(fèi)者,即拉取消息進(jìn)行處理的一方。
Kafka實(shí)例或角色,一個(gè)Kafka集群由多個(gè)broker構(gòu)成,通常一臺(tái)機(jī)器部署一個(gè)Kafka實(shí)例,一個(gè)實(shí)例掛了不影響其他實(shí)例。
即主題,服務(wù)端消息的邏輯存儲(chǔ)單元。一個(gè)topic通常包含若干個(gè)Partition即分區(qū)。
Topic的分區(qū),分布式存儲(chǔ)在各個(gè)broker中, 實(shí)現(xiàn)發(fā)布與訂閱的負(fù)載均衡。
消息,或稱日志消息,是Kafka服務(wù)端實(shí)際存儲(chǔ)的數(shù)據(jù)。 Elasticsearch 主流的分布式搜索引擎 Elasticsearch,簡(jiǎn)稱ES,是當(dāng)下主流的分布式全文搜索,它允許用戶快速的進(jìn)行存儲(chǔ)、搜索和分析海量數(shù)據(jù),底層是開源庫(kù)Lucene,開箱即用。 ES通常為具有復(fù)雜的搜索要求或多維度查詢的應(yīng)用程序提供底層數(shù)據(jù)存儲(chǔ)、搜索能力,不僅僅是全文搜索。基本架構(gòu)圖: 總結(jié)主要有以下關(guān)鍵詞或特點(diǎn):
ES是一個(gè)搜索引擎,可用于全文搜索或結(jié)構(gòu)化搜索。
如上圖示,ES數(shù)據(jù)在水平方向是以分片(shard)以及副本分片(replica)的形式分布式存儲(chǔ)在不同節(jié)點(diǎn)。
對(duì)外主要以Rest API或接口的形式提供服務(wù)。
主要能夠提供近實(shí)時(shí)的寫入與搜索能力,不太適用于那些對(duì)實(shí)時(shí)性要求比較高的應(yīng)用。
ES還是一個(gè)文檔型引擎,數(shù)據(jù)在ES中被稱為document,用戶可指定document id,否則ES會(huì)自動(dòng)生成一個(gè)document id。
ES是一個(gè)Schema free的組件,我們可以提前定義schema結(jié)構(gòu),也可以不定義,ES會(huì)自動(dòng)幫我們創(chuàng)建schema結(jié)構(gòu),動(dòng)態(tài)添加字段。 |
|