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

全面了解大數據“三駕馬車”的開源實現

2019-02-19    來源:raincent

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

 

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

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

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

 

 

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

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

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

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

 

 

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

MapReduce 的開源實現:Hadoop MapReduce

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

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

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

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

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

這里 reduce 的輸入參數 Values 就是由很多個 1 組成的集合,而 Key 就是具體的單詞 word。

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

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

 

 

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

以 Hadoop 1 為例,MapReduce 運行過程涉及三類關鍵進程。

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

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

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

 

 

MapReduce 計算真正產生奇跡的地方是數據的合并與連接。

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

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

 

 

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

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

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

BigTable 的開源實現:HBase

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

 

 

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

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

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

下面是一張調用時序圖,應用程序通過 ZooKeeper 獲得主 HMaster 的地址,輸入 Key 值獲得這個 Key 所在的 HRegionServer 地址,然后請求 HRegionServer 上的 HRegion,獲得所需要的數據。

 

 

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

標簽: Google 大數據 大數據應用 服務器 通信

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

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

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