分布式計(jì)算 第五章 大數(shù)據(jù)多機(jī)計(jì)算:Hadoop
5.2 大數(shù)據(jù)和分布式的基礎(chǔ)概念
5.2.1 從硬件思考大數(shù)據(jù)
從硬件角度看,一臺(tái)或是幾臺(tái)機(jī)器似乎難以勝任大數(shù)據(jù)的存儲(chǔ)和計(jì)算工作。
? 大量機(jī)器的集群構(gòu)成數(shù)據(jù)中心
? 使用高速互聯(lián)網(wǎng)絡(luò)對(duì)大量機(jī)器進(jìn)行連接以確保數(shù)據(jù)傳遞
? 綜合考量數(shù)據(jù)中心的散熱問(wèn)題、能耗問(wèn)題,以及各方面成本
? 集群中硬件發(fā)生故障的概率很高,如何確保可靠性
? 單一架構(gòu)的機(jī)器難以勝任各種計(jì)算類型,考慮異構(gòu)計(jì)算
可靠性問(wèn)題:
由于數(shù)據(jù)中心的集群中往往包含數(shù)以萬(wàn)計(jì)的計(jì)算機(jī),為顧及成本,集群往往使用較為廉價(jià)的普通商用硬件
5.1.2 從軟件角度看大數(shù)據(jù)
從軟件角度看,由于大數(shù)據(jù)的計(jì)算與存儲(chǔ)分布在未必可靠的大量計(jì)算機(jī)組成的集群上。
? 分而治之,使用分片存儲(chǔ)策略和分布式算法對(duì)大數(shù)據(jù)進(jìn)
行存儲(chǔ)與處理
? 考慮存儲(chǔ)與計(jì)算的容錯(cuò)性,以使得故障發(fā)生時(shí)造成的損
失最小化
? 算法設(shè)計(jì)方面要盡可能減少節(jié)點(diǎn)間通信(因?yàn)檫@很耗時(shí))
5.1.3 分布式 DISTRIBUTED
談到大數(shù)據(jù)就不得不談到分布式,在單機(jī)上存儲(chǔ)和處理大數(shù)據(jù)是不可能的。分布式,就是將任務(wù)分配到許多節(jié)點(diǎn)(機(jī)器)上去,這是一種借助網(wǎng)絡(luò)而產(chǎn)生的并行方法。在大數(shù)據(jù)方向,可以將它的研究分為兩方面:
? 分布式存儲(chǔ)(如分布式文件系統(tǒng)、分布式數(shù)據(jù)庫(kù))
? 分布式計(jì)算(本質(zhì)上是并行計(jì)算模型與算法,如上一章的MPI可以用于分布式計(jì)算)
5.1.4 谷歌“三駕馬車”
在分布式領(lǐng)域,谷歌公司提出了三項(xiàng)技術(shù)來(lái)分別解決文件存儲(chǔ)、結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和分布式計(jì)算模型這三個(gè)關(guān)鍵問(wèn)題,并以此開
啟了大數(shù)據(jù)時(shí)代。
GFS (SOSP2003)
Google File System(GFS)是一個(gè)可擴(kuò)展的分布式文件系統(tǒng),適用于大型分布式數(shù)據(jù)密集型應(yīng)用程序。它能夠在廉價(jià)的商用硬件上提供容錯(cuò)能力,并能為大量客戶端提供較高的總體性能
- 把一個(gè)較大的文件切分成不同的單元塊;
- 把每個(gè)單元塊存儲(chǔ)在一個(gè)ChunkServer服務(wù)器節(jié)點(diǎn)上,并且每一塊都會(huì)復(fù)制在多個(gè)ChunkServer服務(wù)器;
- 每一個(gè)文件包含多少塊和哪些塊,這些元數(shù)據(jù)存儲(chǔ)在GFS Master服務(wù)器上;
- 構(gòu)成一個(gè)低成本的分布式存儲(chǔ)系統(tǒng),被用來(lái)處理數(shù)據(jù)量非常大的存儲(chǔ)場(chǎng)景,為MapReduce的大數(shù)據(jù)處理模型提供輸入和輸出的存儲(chǔ)系統(tǒng);
BigTable (OSDI2006)
Bigtable 是一個(gè)分布式存儲(chǔ)系統(tǒng),用于管理結(jié)構(gòu)化數(shù)據(jù),旨在擴(kuò)展到非常大的規(guī)模:數(shù)千個(gè)商用服務(wù)器上的 PB 級(jí)數(shù)據(jù)。 Google 的許多項(xiàng)目(60)都將數(shù)據(jù)存儲(chǔ)在Bigtable 中,包括網(wǎng)絡(luò)索引、Google 地球和 Google
財(cái)經(jīng)
MapReduce (OSDI2004)
MapReduce 是一種用于處理和生成大型數(shù)據(jù)集的分布式運(yùn)算程序編程模型和相關(guān)實(shí)現(xiàn)。用戶指定 map 函數(shù)來(lái)處理鍵-值對(duì)(KV)以生成一組中間鍵-值對(duì),以及 reduce 函數(shù)來(lái)合并與同一中間鍵關(guān)聯(lián)的所有中間值(相當(dāng)于分組合并)最后得到結(jié)果。
5.1.5鍵值存儲(chǔ)的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 簡(jiǎn)單:數(shù)據(jù)結(jié)構(gòu)中只有鍵和值,并成對(duì)
出現(xiàn),值在理論上可以存放任一數(shù)據(jù),
并支持大數(shù)據(jù)存儲(chǔ)。 - 快速:以內(nèi)存運(yùn)行模式為主,數(shù)據(jù)處理
快是其最大優(yōu)勢(shì)。 - 高效計(jì)算:數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單化,數(shù)據(jù)集之
間的關(guān)系簡(jiǎn)單化,再加上基于內(nèi)存的數(shù)
據(jù)集計(jì)算,分布式計(jì)算等,形成了高效
計(jì)算的前提條件。 - 分布式處理:分布式處理能力使鍵值數(shù)
據(jù)庫(kù)具備了處理大數(shù)據(jù)的能力。
缺點(diǎn)
- 對(duì)值進(jìn)行多值查找功能很弱。
- 缺少約束容易出錯(cuò)。
- 不容易建立復(fù)雜關(guān)系。
- 根據(jù)其缺點(diǎn)可以看出來(lái),很多查詢,排序,統(tǒng)計(jì)等功能需要程序員在業(yè)務(wù)代碼進(jìn)行編程約束。
5.2 Hadoop
5.2.1 Hadoop與云計(jì)算區(qū)別與聯(lián)系
Hadoop與云計(jì)算區(qū)別
? 范圍與定位
? 資源利用率
? 可靠性
Hadoop與云計(jì)算聯(lián)系
? 互補(bǔ)性
? 數(shù)據(jù)共享與交互
5.2.2 Hadoop 是什么?
? Hadoop 是一系列開源軟件的集合,是為大數(shù)據(jù)的處理而設(shè)計(jì)的分布式框架。
? Hadoop 將單機(jī)擴(kuò)展到數(shù)千臺(tái)機(jī)器,每臺(tái)機(jī)器都提供本地計(jì)算和存儲(chǔ)。
? Hadoop 通過(guò)對(duì)應(yīng)用層故障的檢測(cè)和處理,再由不可靠硬件構(gòu)成的集群上實(shí)現(xiàn)高可用。
Hadoop包含了谷歌“三駕馬車”的開源實(shí)現(xiàn):
? GFS – HDFS
? MapReduce – Hadoop MapReduce
? BigTable – HBase(不展開)
以及其他的相關(guān)組件:
? Hadoop Common:支持其他 Hadoop 模塊的通用實(shí)用程序
? Hadoop YARN:作業(yè)調(diào)度和集群資源管理的框架
? ……
HDFS具有一些假設(shè):
? 硬件故障經(jīng)常發(fā)生,因此需要能檢測(cè)故障并快速恢復(fù)
? 面向流式數(shù)據(jù)訪問(wèn),為批處理而非用戶交互使用,更注重高吞吐而非低延遲,因此并未兼容POSIX
? 針對(duì)大型數(shù)據(jù)集,典型文件大小為GB到TB級(jí),不適合小文件讀取,并應(yīng)當(dāng)在數(shù)百個(gè)節(jié)點(diǎn)上支持?jǐn)?shù)千萬(wàn)的文件
? 簡(jiǎn)化的一致性模型,一個(gè)文件一旦創(chuàng)建、寫入和關(guān)閉就不需要更改,除了追加和截?cái)啵@樣簡(jiǎn)化了一致性問(wèn)題且提高了吞吐
? 移動(dòng)計(jì)算而非移動(dòng)數(shù)據(jù),尤其當(dāng)數(shù)據(jù)集很大時(shí),這將會(huì)較少網(wǎng)絡(luò)擁塞并提升吞吐
? 跨軟硬件平臺(tái)的可移植性
5.2.2 HDFS:分布式文件系統(tǒng)
? HDFS是一種依照GFS設(shè)計(jì)的分布式文件系統(tǒng)
? 運(yùn)行在低成本商業(yè)硬件上,提供高容錯(cuò)性
? 提供高吞吐量訪問(wèn),支持具有大量數(shù)據(jù)集的應(yīng)用程序
? 運(yùn)行在用戶態(tài),并非內(nèi)核級(jí)文件系統(tǒng)
NAMENODE 和 DATANODE
? HDFS使用master/slave架構(gòu)
? 集群包含一個(gè)NameNode和多個(gè)DataNode
? DataNode:在HDFS中,文件被分為一到多個(gè)塊(Block)。DataNode用于實(shí)際存儲(chǔ)這種“塊”,并處理塊的創(chuàng)建、刪除。同時(shí),還負(fù)責(zé)處理來(lái)自文件系統(tǒng)客戶端的讀取和寫入請(qǐng)求。
? NameNode:每個(gè)集群一個(gè)(也可以有備份),用于維護(hù)文件系統(tǒng)的元數(shù)據(jù)(命名空間),執(zhí)行文件系統(tǒng)命名空間上的操作,如打開、關(guān)閉、重命名文件和目錄,以及確定塊(Block)和DataNode的映射。
數(shù)據(jù)的復(fù)制
? HDFS要在大型集群中可靠地存儲(chǔ)很大的文件。因此它將文件分塊,并為每個(gè)塊生成多個(gè)副本
? 每個(gè)文件的塊大小和副本數(shù)量是可配置的
? NameNode 做出有關(guān)塊復(fù)制的所有決定。它定期從集群中的每個(gè) DataNode 接收 Heartbeat 和 Blockreport。收到心跳意味著 DataNode 運(yùn)行正常。Blockreport 包含DataNode 上所有塊的列表
- 對(duì)同一個(gè)機(jī)架內(nèi)的訪問(wèn)速度要快過(guò)跨機(jī)架訪問(wèn),但機(jī)架也會(huì)出現(xiàn)故障,有一定可能會(huì)整個(gè)機(jī)架一起掛掉。因此如何放置副本對(duì)集群性能與可靠性有很大影響:
? 全放在一個(gè)機(jī)架上,機(jī)架掛掉數(shù)據(jù)就訪問(wèn)不到了
? 全放在不同機(jī)架上,寫操作成本就變得很高 - Hadoop擁有Rack Awareness(機(jī)架感知)功能,通過(guò)它可以 制定不同的副本放置策略
- 例如副本數(shù)為3時(shí),選擇寫操作所在機(jī)架放置一個(gè)副本,另選一個(gè)機(jī)架放置兩個(gè)副本
- 類似地,在進(jìn)行讀取時(shí)也會(huì)優(yōu)先選擇相同機(jī)架上的副本
5.2.3 YARN:調(diào)度器
? 在Hadoop中,計(jì)算是以作業(yè)(job)的形式發(fā)布,并被劃分為任務(wù)(task)的形式執(zhí)行
? 計(jì)算任務(wù)的執(zhí)行需要使用空閑計(jì)算資源(cpu等硬件資源)
? YARN就是用來(lái)調(diào)度管理計(jì)算任務(wù)和計(jì)算資源的框架
YARN的主要工作包括
? 接受作業(yè)(應(yīng)用程序),啟動(dòng)作業(yè),失敗時(shí)重啟作業(yè)
? 管理集群資源(基于容器,囊括了內(nèi)存、cpu、磁盤、網(wǎng)絡(luò)等)
? 創(chuàng)建、管理、監(jiān)控各節(jié)點(diǎn)上的容器(任務(wù)執(zhí)行的微環(huán)境)
? 為應(yīng)用程序按需分配資源(將任務(wù)發(fā)放到適當(dāng)?shù)墓?jié)點(diǎn)、適當(dāng)?shù)娜萜鳎?br> ? 跟蹤任務(wù)的執(zhí)行,監(jiān)控任務(wù)健康狀態(tài),處理任務(wù)的失敗
5.2.4 MapReduce:編程模型框架
? MapReduce(后文稱MR)是一個(gè)用于編寫并行大數(shù)據(jù)處理程序, 并使其在集群上可靠運(yùn)行的編程框架
? MR操作的數(shù)據(jù)存儲(chǔ)在分布式文件系統(tǒng)上,也就是在磁盤中(在Hadoop上就是HDFS)
? MR的輸入輸出數(shù)據(jù)形式均為鍵值對(duì) <k, v>
? 一個(gè)MR作業(yè)通常將數(shù)據(jù)分為多個(gè)部分,每個(gè)部分分別由map操 作生成中間值,然后由reduce操作對(duì)具有相同key的所有value進(jìn)行匯總
Map與Reduce操作的是數(shù)據(jù)分片而非所有數(shù)據(jù),因此在各機(jī)器、各分片上的操作是并行的
? 數(shù)據(jù)被切分成塊
? 在各機(jī)器(map worker)上啟動(dòng)代碼副本,執(zhí)行map操作,讀入分塊并輸出中間值
? (對(duì)中間值按key進(jìn)行排序)
? 在各機(jī)器(reduce worker)上啟動(dòng)代碼副本,執(zhí)行reduce操作,讀入各自key對(duì)應(yīng)的中間值并生成結(jié)果
reduce分為三個(gè)階段:
- 框架首先將所有相關(guān)的map輸出分片取回
- 框架將取回的中間值按key進(jìn)行分組、排序
? 以上兩步是同時(shí)進(jìn)行的,取回?cái)?shù)據(jù)時(shí)就會(huì)進(jìn)行合并操作
? 可以使用Job.setGroupingComparatorClass(Class)、
Job.setSortComparatorClass(Class)控制分組和排序 - 以上操作結(jié)束后,開始進(jìn)行reduce
推測(cè)執(zhí)行文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-755289.html
? 在集群上分布式執(zhí)行任務(wù)時(shí),總會(huì)有一些節(jié)點(diǎn)跑得比其他節(jié)點(diǎn)慢很多
? Hadoop默認(rèn)情況下不會(huì)傻傻等著慢節(jié)點(diǎn)運(yùn)行完,如果發(fā)現(xiàn)有的任務(wù)執(zhí)行比平均速度慢,它會(huì)嘗試開啟一個(gè)與該任務(wù)相同的“推測(cè)任務(wù)”
? 原任務(wù)和推測(cè)任務(wù)誰(shuí)先跑完就用誰(shuí),另一個(gè)會(huì)被終止
? 推測(cè)執(zhí)行會(huì)占用更多集群資源,可以通過(guò)配置將其關(guān)閉文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-755289.html
到了這里,關(guān)于分布式計(jì)算 第五章 大數(shù)據(jù)多機(jī)計(jì)算:Hadoop的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!