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

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

2019-02-19    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

 

Google File System(GFS)的開源實現(xiàn):HDFS

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

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

 

 

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

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

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

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

 

 

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

MapReduce 的開源實現(xiàn):Hadoop MapReduce

在我看來,MapReduce 既是一個編程模型,又是一個計算框架。也就是說,開發(fā)人員必須基于 MapReduce 編程模型進行編程開發(fā),然后將程序通過 MapReduce 計算框架分發(fā)到 Hadoop 集群中運行。我們先看一下作為編程模型的 MapReduce。

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

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

map 函數(shù)的計算過程是,將這行文本中的單詞提取出來,針對每個單詞輸出一個 這樣的 對。

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

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

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

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

 

 

接下來我們來看作為計算框架,MapReduce 是如何運作的。

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

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

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

TaskTracker 進程。這個進程負責(zé)啟動和管理 Map 進程以及 Reduce 進程。因為需要每個數(shù)據(jù)塊都有對應(yīng)的 map 函數(shù),TaskTracker 進程通常和 HDFS 的 DataNode 進程啟動在同一個服務(wù)器。也就是說,Hadoop 集群中絕大多數(shù)服務(wù)器同時運行 DataNode 進程和 TaskTacker 進程。

 

 

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

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

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

 

 

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

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

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

BigTable 的開源實現(xiàn):HBase

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

 

 

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

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

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

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

 

 

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

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

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

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

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