溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Hadoop核心架構(gòu)是什么

發(fā)布時(shí)間:2021-12-04 15:40:29 來(lái)源:億速云 閱讀:258 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Hadoop核心架構(gòu)是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Hadoop核心架構(gòu)是什么”吧!

通過(guò)對(duì)Hadoop分布式計(jì)算平臺(tái)最核心的分布式文件系統(tǒng)HDFS、MapReduce處理過(guò)程,以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive和分布式數(shù)據(jù)庫(kù)Hbase的介紹,基本涵蓋了Hadoop分布式平臺(tái)的所有技術(shù)核心。

通過(guò)這一階段的調(diào)研總結(jié),從內(nèi)部機(jī)理的角度詳細(xì)分析,HDFS、MapReduce、Hbase、Hive是如何運(yùn)行,以及基于Hadoop數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建和分布式數(shù)據(jù)庫(kù)內(nèi)部具體實(shí)現(xiàn)。如有不足,后續(xù)及時(shí)修改。

HDFS的體系架構(gòu)

整個(gè)Hadoop的體系結(jié)構(gòu)主要是通過(guò)HDFS來(lái)實(shí)現(xiàn)對(duì)分布式存儲(chǔ)的底層支持,并通過(guò)MR來(lái)實(shí)現(xiàn)對(duì)分布式并行任務(wù)處理的程序支持。

HDFS采用主從(Master/Slave)結(jié)構(gòu)模型,一個(gè)HDFS集群是由一個(gè)NameNode和若干個(gè)DataNode組成的(在***的Hadoop2.2版本已經(jīng)實(shí)現(xiàn)多個(gè)NameNode的配置-這也是一些大公司通過(guò)修改hadoop源代碼實(shí)現(xiàn)的功能,在***的版本中就已經(jīng)實(shí)現(xiàn)了)。NameNode作為主服務(wù)器,管理文件系統(tǒng)命名空間和客戶(hù)端對(duì)文件的訪(fǎng)問(wèn)操作。DataNode管理存儲(chǔ)的數(shù)據(jù)。HDFS支持文件形式的數(shù)據(jù)。

從內(nèi)部來(lái)看,文件被分成若干個(gè)數(shù)據(jù)塊,這若干個(gè)數(shù)據(jù)塊存放在一組DataNode上。NameNode執(zhí)行文件系統(tǒng)的命名空間,如打開(kāi)、關(guān)閉、重命名文件或目錄等,也負(fù)責(zé)數(shù)據(jù)塊到具體DataNode的映射。DataNode負(fù)責(zé)處理文件系統(tǒng)客戶(hù)端的文件讀寫(xiě),并在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建、刪除和復(fù)制工作。NameNode是所有HDFS元數(shù)據(jù)的管理者,用戶(hù)數(shù)據(jù)永遠(yuǎn)不會(huì)經(jīng)過(guò)NameNode。

Hadoop核心架構(gòu)是什么

如圖:HDFS體系結(jié)構(gòu)圖

圖中涉及三個(gè)角色:NameNode、DataNode、Client。NameNode是管理者,DataNode是文件存儲(chǔ)者、Client是需要獲取分布式文件系統(tǒng)的應(yīng)用程序。

文件寫(xiě)入:

1) Client向NameNode發(fā)起文件寫(xiě)入的請(qǐng)求。

2) NameNode根據(jù)文件大小和文件塊配置情況,返回給Client它管理的DataNode的信息。

3) Client將文件劃分為多個(gè)block,根據(jù)DataNode的地址,按順序?qū)lock寫(xiě)入DataNode塊中。

文件讀?。?/p>

1) Client向NameNode發(fā)起讀取文件的請(qǐng)求。

2) NameNode返回文件存儲(chǔ)的DataNode信息。

3) Client讀取文件信息。

HDFS作為分布式文件系統(tǒng)在數(shù)據(jù)管理方面可借鑒點(diǎn):

文件塊的放置:一個(gè)Block會(huì)有三份備份,一份在NameNode指定的DateNode上,一份放在與指定的DataNode不在同一臺(tái)機(jī)器的DataNode上,一根在于指定的DataNode在同一Rack上的DataNode上。備份的目的是為了數(shù)據(jù)安全,采用這種方式是為了考慮到同一Rack失敗的情況,以及不同數(shù)據(jù)拷貝帶來(lái)的性能的問(wèn)題。

MapReduce體系架構(gòu)

MR框架是由一個(gè)單獨(dú)運(yùn)行在主節(jié)點(diǎn)上的JobTracker和運(yùn)行在每個(gè)集群從節(jié)點(diǎn)上的TaskTracker共同組成。主節(jié)點(diǎn)負(fù)責(zé)調(diào)度構(gòu)成一個(gè)作業(yè)的所有任務(wù),這些任務(wù)分布在不同的不同的從節(jié)點(diǎn)上。主節(jié)點(diǎn)監(jiān)視它們的執(zhí)行情況,并重新執(zhí)行之前失敗的任務(wù)。從節(jié)點(diǎn)僅負(fù)責(zé)由主節(jié)點(diǎn)指派的任務(wù)。當(dāng)一個(gè)Job被提交時(shí),JobTracker接受到提交作業(yè)和配置信息之后,就會(huì)將配置信息等分發(fā)給從節(jié)點(diǎn),同時(shí)調(diào)度任務(wù)并監(jiān)控TaskTracker的執(zhí)行。JobTracker可以運(yùn)行于集群中的任意一臺(tái)計(jì)算機(jī)上。TaskTracker負(fù)責(zé)執(zhí)行任務(wù),它必須運(yùn)行在DataNode上,DataNode既是數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),也是計(jì)算節(jié)點(diǎn)。JobTracker將map任務(wù)和reduce任務(wù)分發(fā)給空閑的TaskTracker,這些任務(wù)并行運(yùn)行,并監(jiān)控任務(wù)運(yùn)行的情況。如果JobTracker出了故障,JobTracker會(huì)把任務(wù)轉(zhuǎn)交給另一個(gè)空閑的TaskTracker重新運(yùn)行。

HDFS和MR共同組成Hadoop分布式系統(tǒng)體系結(jié)構(gòu)的核心。HDFS在集群上實(shí)現(xiàn)了分布式文件系統(tǒng),MR在集群上實(shí)現(xiàn)了分布式計(jì)算和任務(wù)處理。HDFS在MR任務(wù)處理過(guò)程中提供了文件操作和存儲(chǔ)等支持,MR在HDFS的基礎(chǔ)上實(shí)現(xiàn)了任務(wù)的分發(fā)、跟蹤、執(zhí)行等工作,并收集結(jié)果,二者相互作用,完成分布式集群的主要任務(wù)。

Hadoop上的并行應(yīng)用程序開(kāi)發(fā)是基于MR編程框架。MR編程模型原理:利用一個(gè)輸入的key-value對(duì)集合來(lái)產(chǎn)生一個(gè)輸出的key-value對(duì)集合。MR庫(kù)通過(guò)Map和Reduce兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)這個(gè)框架。用戶(hù)自定義的map函數(shù)接受一個(gè)輸入的key-value對(duì),然后產(chǎn)生一個(gè)中間的key-value對(duì)的集合。MR把所有具有相同的key值的value結(jié)合在一起,然后傳遞個(gè)reduce函數(shù)。Reduce函數(shù)接受key和相關(guān)的value結(jié)合,reduce函數(shù)合并這些value值,形成一個(gè)較小的value集合。通常我們通過(guò)一個(gè)迭代器把中間的value值提供給reduce函數(shù)(迭代器的作用就是收集這些value值),這樣就可以處理無(wú)法全部放在內(nèi)存中的大量的value值集合了。

Hadoop核心架構(gòu)是什么

流程簡(jiǎn)而言之,大數(shù)據(jù)集被分成眾多小的數(shù)據(jù)集塊,若干個(gè)數(shù)據(jù)集被分在集群中的一個(gè)節(jié)點(diǎn)進(jìn)行處理并產(chǎn)生中間結(jié)果。單節(jié)點(diǎn)上的任務(wù),map函數(shù)一行行讀取數(shù)據(jù)獲得數(shù)據(jù)的(k1,v1),數(shù)據(jù)進(jìn)入緩存,通過(guò)map函數(shù)執(zhí)行map(基于key-value)排序(框架會(huì)對(duì)map的輸出進(jìn)行排序)執(zhí)行后輸入(k2,v2)。每一臺(tái)機(jī)器都執(zhí)行同樣的操作。不同機(jī)器上的(k2,v2)通過(guò)merge排序的過(guò)程(shuffle的過(guò)程可以理解成reduce前的一個(gè)過(guò)程),***reduce合并得到,(k3,v3),輸出到HDFS文件中。

談到reduce,在reduce之前,可以先對(duì)中間數(shù)據(jù)進(jìn)行數(shù)據(jù)合并(Combine),即將中間有相同的key的<key,value>對(duì)合并。Combine的過(guò)程與reduce的過(guò)程類(lèi)似,但Combine是作為map任務(wù)的一部分,在執(zhí)行完map函數(shù)后僅接著執(zhí)行。Combine能減少中間結(jié)果key-value對(duì)的數(shù)目,從而降低網(wǎng)絡(luò)流量。

Map任務(wù)的中間結(jié)果在做完Combine和Partition后,以文件的形式存于本地磁盤(pán)上。中間結(jié)果文件的位置會(huì)通知主控JobTracker,JobTracker再通知reduce任務(wù)到哪一個(gè)DataNode上去取中間結(jié)果。所有的map任務(wù)產(chǎn)生的中間結(jié)果均按其key值按hash函數(shù)劃分成R份,R個(gè)reduce任務(wù)各自負(fù)責(zé)一段key區(qū)間。每個(gè)reduce需要向許多個(gè)map任務(wù)節(jié)點(diǎn)取的落在其負(fù)責(zé)的key區(qū)間內(nèi)的中間結(jié)果,然后執(zhí)行reduce函數(shù),***形成一個(gè)最終結(jié)果。有R個(gè)reduce任務(wù),就會(huì)有R個(gè)最終結(jié)果,很多情況下這R個(gè)最終結(jié)果并不需要合并成一個(gè)最終結(jié)果,因?yàn)檫@R個(gè)最終結(jié)果可以作為另一個(gè)計(jì)算任務(wù)的輸入,開(kāi)始另一個(gè)并行計(jì)算任務(wù)。這就形成了上面圖中多個(gè)輸出數(shù)據(jù)片段(HDFS副本)。

Hbase數(shù)據(jù)管理

Hbase就是Hadoop database。與傳統(tǒng)的mysql、oracle究竟有什么差別。即列式數(shù)據(jù)與行式數(shù)據(jù)由什么區(qū)別。NoSql數(shù)據(jù)庫(kù)與傳統(tǒng)關(guān)系型數(shù)據(jù)由什么區(qū)別:

Hbase VS Oracle

1、 Hbase適合大量插入同時(shí)又有讀的情況。輸入一個(gè)Key獲取一個(gè)value或輸入一些key獲得一些value。

2、 Hbase的瓶頸是硬盤(pán)傳輸速度。Hbase的操作,它可以往數(shù)據(jù)里面insert,也可以u(píng)pdate一些數(shù)據(jù),但update的實(shí)際上也是insert,只是插入一個(gè)新的時(shí)間戳的一行。Delete數(shù)據(jù),也是insert,只是insert一行帶有delete標(biāo)記的一行。Hbase的所有操作都是追加插入操作。Hbase是一種日志集數(shù)據(jù)庫(kù)。它的存儲(chǔ)方式,像是日志文件一樣。它是批量大量的往硬盤(pán)中寫(xiě),通常都是以文件形式的讀寫(xiě)。這個(gè)讀寫(xiě)速度,就取決于硬盤(pán)與機(jī)器之間的傳輸有多快。而Oracle的瓶頸是硬盤(pán)尋道時(shí)間。它經(jīng)常的操作時(shí)隨機(jī)讀寫(xiě)。要update一個(gè)數(shù)據(jù),先要在硬盤(pán)中找到這個(gè)block,然后把它讀入內(nèi)存,在內(nèi)存中的緩存中修改,過(guò)段時(shí)間再回寫(xiě)回去。由于你尋找的block不同,這就存在一個(gè)隨機(jī)的讀。硬盤(pán)的尋道時(shí)間主要由轉(zhuǎn)速來(lái)決定的。而尋道時(shí)間,技術(shù)基本沒(méi)有改變,這就形成了尋道時(shí)間瓶頸。

3、 Hbase中數(shù)據(jù)可以保存許多不同時(shí)間戳的版本(即同一數(shù)據(jù)可以復(fù)制許多不同的版本,準(zhǔn)許數(shù)據(jù)冗余,也是優(yōu)勢(shì))。數(shù)據(jù)按時(shí)間排序,因此Hbase特別適合尋找按照時(shí)間排序?qū)ふ襎op n的場(chǎng)景。找出某個(gè)人最近瀏覽的消息,最近寫(xiě)的N篇博客,N種行為等等,因此Hbase在互聯(lián)網(wǎng)應(yīng)用非常多。

4、 Hbase的局限。只能做很簡(jiǎn)單的Key-value查詢(xún)。它適合有高速插入,同時(shí)又有大量讀的操作場(chǎng)景。而這種場(chǎng)景又很極端,并不是每一個(gè)公司都有這種需求。在一些公司,就是普通的OLTP(聯(lián)機(jī)事務(wù)處理)隨機(jī)讀寫(xiě)。在這種情況下,Oracle的可靠性,系統(tǒng)的負(fù)責(zé)程度又比Hbase低一些。而且Hbase局限還在于它只有主鍵索引,因此在建模的時(shí)候就遇到了問(wèn)題。比如,在一張表中,很多的列我都想做某種條件的查詢(xún)。但卻只能在主鍵上建快速查詢(xún)。所以說(shuō),不能籠統(tǒng)的說(shuō)那種技術(shù)有優(yōu)勢(shì)。

5、 Oracle是行式數(shù)據(jù)庫(kù),而Hbase是列式數(shù)據(jù)庫(kù)。列式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)在于數(shù)據(jù)分析這種場(chǎng)景。數(shù)據(jù)分析與傳統(tǒng)的OLTP的區(qū)別。數(shù)據(jù)分析,經(jīng)常是以某個(gè)列作為查詢(xún)條件,返回的結(jié)果也經(jīng)常是某一些列,不是全部的列。在這種情況下,行式數(shù)據(jù)庫(kù)反應(yīng)的性能就很低效。

行式數(shù)據(jù)庫(kù):Oracle為例,數(shù)據(jù)文件的基本組成單位:塊/頁(yè)。塊中數(shù)據(jù)是按照一行行寫(xiě)入的。這就存在一個(gè)問(wèn)題,當(dāng)我們要讀一個(gè)塊中的某些列的時(shí)候,不能只讀這些列,必須把這個(gè)塊整個(gè)的讀入內(nèi)存中,再把這些列的內(nèi)容讀出來(lái)。換句話(huà)就是:為了讀表中的某些列,必須要把整個(gè)表的行全部讀完,才能讀到這些列。這就是行數(shù)據(jù)庫(kù)最糟糕的地方。

列式數(shù)據(jù)庫(kù):是以列作為元素存儲(chǔ)的。同一個(gè)列的元素會(huì)擠在一個(gè)塊。當(dāng)要讀某些列,只需要把相關(guān)的列塊讀到內(nèi)存中,這樣讀的IO量就會(huì)少很多。通常,同一個(gè)列的數(shù)據(jù)元素通常格式都是相近的。這就意味著,當(dāng)數(shù)據(jù)格式相近的時(shí)候,數(shù)據(jù)就可以做大幅度的壓縮。所以,列式數(shù)據(jù)庫(kù)在數(shù)據(jù)壓縮方面有很大的優(yōu)勢(shì),壓縮不僅節(jié)省了存儲(chǔ)空間,同時(shí)也節(jié)省了IO。(這一點(diǎn),可利用在當(dāng)數(shù)據(jù)達(dá)到百萬(wàn)、***別以后,數(shù)據(jù)查詢(xún)之間的優(yōu)化,提高性能,示場(chǎng)景而定)

Hive數(shù)據(jù)管理

Hive是建立在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)架構(gòu)。它提供了一系列的工具,用來(lái)進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)換、加載,這是一種可以存儲(chǔ)、查詢(xún)和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)機(jī)制??梢园袶adoop下結(jié)構(gòu)化數(shù)據(jù)文件映射為一張成Hive中的表,并提供類(lèi)sql查詢(xún)功能,除了不支持更新、索引和事務(wù),sql其它功能都支持。可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行,作為sql到MapReduce的映射器。提供shell、JDBC/ODBC、Thrift、Web等接口。優(yōu)點(diǎn):成本低可以通過(guò)類(lèi)sql語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì)。作為一個(gè)數(shù)據(jù)倉(cāng)庫(kù),Hive的數(shù)據(jù)管理按照使用層次可以從元數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換三個(gè)方面介紹。

(1)元數(shù)據(jù)存儲(chǔ)

Hive將元數(shù)據(jù)存儲(chǔ)在RDBMS中,有三種方式可以連接到數(shù)據(jù)庫(kù):

&middot;內(nèi)嵌模式:元數(shù)據(jù)保持在內(nèi)嵌數(shù)據(jù)庫(kù)的Derby,一般用于單元測(cè)試,只允許一個(gè)會(huì)話(huà)連接

&middot;多用戶(hù)模式:在本地安裝Mysql,把元數(shù)據(jù)放到Mysql內(nèi)

&middot;遠(yuǎn)程模式:元數(shù)據(jù)放置在遠(yuǎn)程的Mysql數(shù)據(jù)庫(kù)

(2)數(shù)據(jù)存儲(chǔ)

首先,Hive沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)格式,也沒(méi)有為數(shù)據(jù)建立索引,用于可以非常自由的組織Hive中的表,只需要在創(chuàng)建表的時(shí)候告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,這就可以解析數(shù)據(jù)了。

其次,Hive中所有的數(shù)據(jù)都存儲(chǔ)在HDFS中,Hive中包含4中數(shù)據(jù)模型:Tabel、ExternalTable、Partition、Bucket。

Table:類(lèi)似與傳統(tǒng)數(shù)據(jù)庫(kù)中的Table,每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄來(lái)存儲(chǔ)數(shù)據(jù)。例如:一個(gè)表zz,它在HDFS中的路徑為:/wh/zz,其中wh是在hive-site.xml中由$指定的數(shù)據(jù)倉(cāng)庫(kù)的目錄,所有的Table數(shù)據(jù)(不含External Table)都保存在這個(gè)目錄中。

Partition:類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)中劃分列的索引。在Hive中,表中的一個(gè)Partition對(duì)應(yīng)于表下的一個(gè)目錄,所有的Partition數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中。例如:zz表中包含ds和city兩個(gè)Partition,則對(duì)應(yīng)于ds=20140214,city=beijing的HDFS子目錄為:/wh/zz/ds=20140214/city=Beijing;

Buckets:對(duì)指定列計(jì)算的hash,根據(jù)hash值切分?jǐn)?shù)據(jù),目的是為了便于并行,每一個(gè)Buckets對(duì)應(yīng)一個(gè)文件。將user列分?jǐn)?shù)至32個(gè)Bucket上,首先對(duì)user列的值計(jì)算hash,比如,對(duì)應(yīng)hash=0的HDFS目錄為:/wh/zz/ds=20140214/city=Beijing/part-00000;對(duì)應(yīng)hash=20的,目錄為:/wh/zz/ds=20140214/city=Beijing/part-00020。

ExternalTable指向已存在HDFS中的數(shù)據(jù),可創(chuàng)建Partition。和Table在元數(shù)據(jù)組織結(jié)構(gòu)相同,在實(shí)際存儲(chǔ)上有較大差異。Table創(chuàng)建和數(shù)據(jù)加載過(guò)程,可以用統(tǒng)一語(yǔ)句實(shí)現(xiàn),實(shí)際數(shù)據(jù)被轉(zhuǎn)移到數(shù)據(jù)倉(cāng)庫(kù)目錄中,之后對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)將會(huì)直接在數(shù)據(jù)倉(cāng)庫(kù)的目錄中完成。刪除表時(shí),表中的數(shù)據(jù)和元數(shù)據(jù)都會(huì)刪除。ExternalTable只有一個(gè)過(guò)程,因?yàn)榧虞d數(shù)據(jù)和創(chuàng)建表是同時(shí)完成。世界數(shù)據(jù)是存儲(chǔ)在Location后面指定的HDFS路徑中的,并不會(huì)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)中。

(3)數(shù)據(jù)交換

&middot;用戶(hù)接口:包括客戶(hù)端、Web界面和數(shù)據(jù)庫(kù)接口

&middot;元數(shù)據(jù)存儲(chǔ):通常是存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的,如Mysql,Derby等

&middot;Hadoop:用HDFS進(jìn)行存儲(chǔ),利用MapReduce進(jìn)行計(jì)算。

關(guān)鍵點(diǎn):Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,如Mysql、Derby中。Hive中的元數(shù)據(jù)包括表的名字、表的列和分區(qū)及其屬性、表的屬性(是否為外部表)、表數(shù)據(jù)所在的目錄等。

Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢(xún)由MapReduce完成。

到此,相信大家對(duì)“Hadoop核心架構(gòu)是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI