中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

全面了解大數(shù)據(jù)“三駕馬車”的開(kāi)源實(shí)現(xiàn)

2019-02-19    來(lái)源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

 

Google File System(GFS)的開(kāi)源實(shí)現(xiàn):HDFS

Google 大數(shù)據(jù)“三駕馬車”的第一駕是 GFS(Google 文件系統(tǒng)),而 Hadoop 的第一個(gè)產(chǎn)品是 HDFS,可以說(shuō)分布式文件存儲(chǔ)是分布式計(jì)算的基礎(chǔ),也可見(jiàn)分布式文件存儲(chǔ)的重要性。

HDFS 是在一個(gè)大規(guī)模分布式服務(wù)器集群上,對(duì)數(shù)據(jù)分片后進(jìn)行并行讀寫(xiě)及冗余存儲(chǔ)。

 

 

從圖中你可以看到 HDFS 的關(guān)鍵組件有兩個(gè),一個(gè)是 DataNode,一個(gè)是 NameNode。

DataNode 負(fù)責(zé)文件數(shù)據(jù)的存儲(chǔ)和讀寫(xiě)操作,HDFS 將文件數(shù)據(jù)分割成若干數(shù)據(jù)塊(Block),每個(gè) DataNode 存儲(chǔ)一部分?jǐn)?shù)據(jù)塊,這樣文件就分布存儲(chǔ)在整個(gè) HDFS 服務(wù)器集群中。應(yīng)用程序客戶端(Client)可以并行對(duì)這些數(shù)據(jù)塊進(jìn)行訪問(wèn),從而使得 HDFS 可以在服務(wù)器集群規(guī)模上實(shí)現(xiàn)數(shù)據(jù)并行訪問(wèn),極大地提高了訪問(wèn)速度。

NameNode 負(fù)責(zé)整個(gè)分布式文件系統(tǒng)的元數(shù)據(jù)(MetaData)管理,也就是文件路徑名、數(shù)據(jù)塊的 ID 以及存儲(chǔ)位置等信息,相當(dāng)于操作系統(tǒng)中文件分配表(FAT)的角色。HDFS 為了保證數(shù)據(jù)的高可用,會(huì)將一個(gè)數(shù)據(jù)塊復(fù)制為多份(缺省情況為 3 份),并將多份相同的數(shù)據(jù)塊存儲(chǔ)在不同的服務(wù)器上,甚至不同的機(jī)架上。這樣當(dāng)有磁盤(pán)損壞,或者某個(gè) DataNode 服務(wù)器宕機(jī),甚至某個(gè)交換機(jī)宕機(jī),導(dǎo)致其存儲(chǔ)的數(shù)據(jù)塊不能訪問(wèn)的時(shí)候,客戶端會(huì)查找其備份的數(shù)據(jù)塊進(jìn)行訪問(wèn)。

放大一下看數(shù)據(jù)塊多份復(fù)制存儲(chǔ)的實(shí)現(xiàn)。圖中對(duì)于文件 /users/sameerp/data/part-0,其復(fù)制備份數(shù)設(shè)置為 2,存儲(chǔ)的 BlockID 分別為 1、3。Block1 的兩個(gè)備份存儲(chǔ)在 DataNode0 和 DataNode2 兩個(gè)服務(wù)器上,Block3 的兩個(gè)備份存儲(chǔ) DataNode4 和 DataNode6 兩個(gè)服務(wù)器上,上述任何一臺(tái)服務(wù)器宕機(jī)后,每個(gè)數(shù)據(jù)塊都至少還有一個(gè)備份存在,不會(huì)影響對(duì)件 /users/sameerp/data/part-0 的訪問(wèn)。

 

 

和 RAID 一樣,數(shù)據(jù)分成若干數(shù)據(jù)塊后存儲(chǔ)到不同服務(wù)器上,可以實(shí)現(xiàn)數(shù)據(jù)大容量存儲(chǔ),并且不同分片的數(shù)據(jù)可以并行進(jìn)行讀 / 寫(xiě)操作,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)的高速訪問(wèn)。

MapReduce 的開(kāi)源實(shí)現(xiàn):Hadoop MapReduce

在我看來(lái),MapReduce 既是一個(gè)編程模型,又是一個(gè)計(jì)算框架。也就是說(shuō),開(kāi)發(fā)人員必須基于 MapReduce 編程模型進(jìn)行編程開(kāi)發(fā),然后將程序通過(guò) MapReduce 計(jì)算框架分發(fā)到 Hadoop 集群中運(yùn)行。我們先看一下作為編程模型的 MapReduce。

舉個(gè) WordCount 的例子,WordCount 主要解決的是文本處理中詞頻統(tǒng)計(jì)的問(wèn)題,就是統(tǒng)計(jì)文本中每一個(gè)單詞出現(xiàn)的次數(shù)。MapReduce 版本 WordCount 程序的核心是一個(gè) map 函數(shù)和一個(gè) reduce 函數(shù)。

map 函數(shù)的輸入主要是一個(gè) 對(duì),在這個(gè)例子里,Value 是要統(tǒng)計(jì)的所有文本中的一行數(shù)據(jù),Key 在一般計(jì)算中都不會(huì)用到。

map 函數(shù)的計(jì)算過(guò)程是,將這行文本中的單詞提取出來(lái),針對(duì)每個(gè)單詞輸出一個(gè) 這樣的 對(duì)。

MapReduce 計(jì)算框架會(huì)將這些 收集起來(lái),將相同的 word 放在一起,形成 > 這樣的 數(shù)據(jù),然后將其輸入給 reduce 函數(shù)。

這里 reduce 的輸入?yún)?shù) Values 就是由很多個(gè) 1 組成的集合,而 Key 就是具體的單詞 word。

reduce 函數(shù)的計(jì)算過(guò)程是,將這個(gè)集合里的 1 求和,再將單詞(word)和這個(gè)和(sum)組成一個(gè) ,也就是 輸出。每一個(gè)輸出就是一個(gè)單詞和它的詞頻統(tǒng)計(jì)總和。

一個(gè) map 函數(shù)可以針對(duì)一部分?jǐn)?shù)據(jù)進(jìn)行運(yùn)算,這樣就可以將一個(gè)大數(shù)據(jù)切分成很多塊(這也正是 HDFS 所做的),MapReduce 計(jì)算框架為每個(gè)數(shù)據(jù)塊分配一個(gè) map 函數(shù)去計(jì)算,從而實(shí)現(xiàn)大數(shù)據(jù)的分布式計(jì)算。

 

 

接下來(lái)我們來(lái)看作為計(jì)算框架,MapReduce 是如何運(yùn)作的。

以 Hadoop 1 為例,MapReduce 運(yùn)行過(guò)程涉及三類關(guān)鍵進(jìn)程。

大數(shù)據(jù)應(yīng)用進(jìn)程。這類進(jìn)程是啟動(dòng) MapReduce 程序的主入口,主要是指定 Map 和 Reduce 類、輸入輸出文件路徑等,并提交作業(yè)給 Hadoop 集群,也就是下面提到的 JobTracker 進(jìn)程。這是由用戶啟動(dòng)的 MapReduce 程序進(jìn)程,比如 WordCount 程序。

JobTracker 進(jìn)程。這類進(jìn)程根據(jù)要處理的輸入數(shù)據(jù)量,命令下面提到的 TaskTracker 進(jìn)程啟動(dòng)相應(yīng)數(shù)量的 Map 和 Reduce 進(jìn)程任務(wù),并管理整個(gè)作業(yè)生命周期的任務(wù)調(diào)度和監(jiān)控。這是 Hadoop 集群的常駐進(jìn)程,需要注意的是,JobTracker 進(jìn)程在整個(gè) Hadoop 集群全局唯一。

TaskTracker 進(jìn)程。這個(gè)進(jìn)程負(fù)責(zé)啟動(dòng)和管理 Map 進(jìn)程以及 Reduce 進(jìn)程。因?yàn)樾枰總(gè)數(shù)據(jù)塊都有對(duì)應(yīng)的 map 函數(shù),TaskTracker 進(jìn)程通常和 HDFS 的 DataNode 進(jìn)程啟動(dòng)在同一個(gè)服務(wù)器。也就是說(shuō),Hadoop 集群中絕大多數(shù)服務(wù)器同時(shí)運(yùn)行 DataNode 進(jìn)程和 TaskTacker 進(jìn)程。

 

 

MapReduce 計(jì)算真正產(chǎn)生奇跡的地方是數(shù)據(jù)的合并與連接。

還是回到 WordCount 例子中,我們想要統(tǒng)計(jì)相同單詞在所有輸入數(shù)據(jù)中出現(xiàn)的次數(shù),而一個(gè) Map 只能處理一部分?jǐn)?shù)據(jù),一個(gè)熱門單詞幾乎會(huì)出現(xiàn)在所有的 Map 中,這意味著同一個(gè)單詞必須要合并到一起進(jìn)行統(tǒng)計(jì)才能得到正確的結(jié)果。

在 map 輸出與 reduce 輸入之間,MapReduce 計(jì)算框架處理數(shù)據(jù)合并與連接操作,這個(gè)操作有個(gè)專門的詞匯叫 shuffle。那到底什么是 shuffle?shuffle 的具體過(guò)程又是怎樣的呢?請(qǐng)看下圖。

 

 

每個(gè) Map 任務(wù)的計(jì)算結(jié)果都會(huì)寫(xiě)入到本地文件系統(tǒng),等 Map 任務(wù)快要計(jì)算完成的時(shí)候,MapReduce 計(jì)算框架會(huì)啟動(dòng) shuffle 過(guò)程,在 Map 任務(wù)進(jìn)程調(diào)用一個(gè) Partitioner 接口,對(duì) Map 產(chǎn)生的每個(gè) 進(jìn)行 Reduce 分區(qū)選擇,然后通過(guò) HTTP 通信發(fā)送給對(duì)應(yīng)的 Reduce 進(jìn)程。這樣不管 Map 位于哪個(gè)服務(wù)器節(jié)點(diǎn),相同的 Key 一定會(huì)被發(fā)送給相同的 Reduce 進(jìn)程。Reduce 任務(wù)進(jìn)程對(duì)收到的 進(jìn)行排序和合并,相同的 Key 放在一起,組成一個(gè) 傳遞給 Reduce 執(zhí)行。

map 輸出的 shuffle 到哪個(gè) Reduce 進(jìn)程是這里的關(guān)鍵,它是由 Partitioner 來(lái)實(shí)現(xiàn),MapReduce 框架默認(rèn)的 Partitioner 用 Key 的哈希值對(duì) Reduce 任務(wù)數(shù)量取模,相同的 Key 一定會(huì)落在相同的 Reduce 任務(wù) ID 上。

講了這么多,對(duì) shuffle 的理解,你只需要記住這一點(diǎn):分布式計(jì)算需要將不同服務(wù)器上的相關(guān)數(shù)據(jù)合并到一起進(jìn)行下一步計(jì)算,這就是 shuffle。

BigTable 的開(kāi)源實(shí)現(xiàn):HBase

HBase 為可伸縮海量數(shù)據(jù)儲(chǔ)存而設(shè)計(jì),實(shí)現(xiàn)面向在線業(yè)務(wù)的實(shí)時(shí)數(shù)據(jù)訪問(wèn)延遲。HBase 的伸縮性主要依賴其可分裂的 HRegion 及可伸縮的分布式文件系統(tǒng) HDFS 實(shí)現(xiàn)。

 

 

HRegion 是 HBase 負(fù)責(zé)數(shù)據(jù)存儲(chǔ)的主要進(jìn)程,應(yīng)用程序?qū)?shù)據(jù)的讀寫(xiě)操作都是通過(guò)和 HRetion 通信完成。上面是 HBase 架構(gòu)圖,我們可以看到在 HBase 中,數(shù)據(jù)以 HRegion 為單位進(jìn)行管理,也就是說(shuō)應(yīng)用程序如果想要訪問(wèn)一個(gè)數(shù)據(jù),必須先找到 HRegion,然后將數(shù)據(jù)讀寫(xiě)操作提交給 HRegion,由 HRegion 完成存儲(chǔ)層面的數(shù)據(jù)操作。

HRegionServer 是物理服務(wù)器,每個(gè) HRegionServer 上可以啟動(dòng)多個(gè) HRegion 實(shí)例。當(dāng)一個(gè) HRegion 中寫(xiě)入的數(shù)據(jù)太多,達(dá)到配置的閾值時(shí),一個(gè) HRegion 會(huì)分裂成兩個(gè) HRegion,并將 HRegion 在整個(gè)集群中進(jìn)行遷移,以使 HRegionServer 的負(fù)載均衡。

每個(gè) HRegion 中存儲(chǔ)一段 Key 值區(qū)間 [key1, key2) 的數(shù)據(jù),所有 HRegion 的信息,包括存儲(chǔ)的 Key 值區(qū)間、所在 HRegionServer 地址、訪問(wèn)端口號(hào)等,都記錄在 HMaster 服務(wù)器上。為了保證 HMaster 的高可用,HBase 會(huì)啟動(dòng)多個(gè) HMaster,并通過(guò) ZooKeeper 選舉出一個(gè)主服務(wù)器。

下面是一張調(diào)用時(shí)序圖,應(yīng)用程序通過(guò) ZooKeeper 獲得主 HMaster 的地址,輸入 Key 值獲得這個(gè) Key 所在的 HRegionServer 地址,然后請(qǐng)求 HRegionServer 上的 HRegion,獲得所需要的數(shù)據(jù)。

 

 

數(shù)據(jù)寫(xiě)入過(guò)程也是一樣,需要先得到 HRegion 才能繼續(xù)操作。HRegion 會(huì)把數(shù)據(jù)存儲(chǔ)在若干個(gè) HFile 格式的文件中,這些文件使用 HDFS 分布式文件系統(tǒng)存儲(chǔ),在整個(gè)集群內(nèi)分布并高可用。當(dāng)一個(gè) HRegion 中數(shù)據(jù)量太多時(shí),這個(gè) HRegion 連同 HFile 會(huì)分裂成兩個(gè) HRegion,并根據(jù)集群中服務(wù)器負(fù)載進(jìn)行遷移。如果集群中有新加入的服務(wù)器,也就是說(shuō)有了新的 HRegionServer,由于其負(fù)載較低,也會(huì)把 HRegion 遷移過(guò)去并記錄到 HMaster,從而實(shí)現(xiàn) HBase 的線性伸縮。

標(biāo)簽: Google 大數(shù)據(jù) 大數(shù)據(jù)應(yīng)用 服務(wù)器 通信

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:獨(dú)家解密:阿里大規(guī)模數(shù)據(jù)中心性能分析

下一篇:深度思考:從BERT看大規(guī)模數(shù)據(jù)的無(wú)監(jiān)督利用