云計(jì)算相關(guān)知識(shí)學(xué)習(xí)第一周

云計(jì)算五大核心特點(diǎn):

按需自助服務(wù):消費(fèi)者無(wú)需同服務(wù)提供商交互就可以自動(dòng)地得到自助的計(jì)算資源能力,如服務(wù)器的時(shí)間、網(wǎng)絡(luò)存儲(chǔ)等(資源的自助服務(wù))。

泛在的網(wǎng)絡(luò)訪問(wèn):跨平臺(tái)的訪問(wèn),無(wú)論手機(jī)、平板或PC都可以訪問(wèn)云計(jì)算平臺(tái)。

動(dòng)態(tài)的資源池:根據(jù)消費(fèi)者的需求來(lái)動(dòng)態(tài)地劃分或釋放不同的物理和虛擬資源。

快速?gòu)椥裕阂环N對(duì)資源快速和彈性提供和同樣對(duì)資源快速和彈性釋放的能力。對(duì)消費(fèi)者來(lái)講,所提供的這種能力是無(wú)限的(隨需的、大規(guī)模的計(jì)算機(jī)資源),并且在任何時(shí)間以任何量化方式可購(gòu)買(mǎi)的。

可計(jì)量的服務(wù):云系統(tǒng)對(duì)服務(wù)類(lèi)型通過(guò)計(jì)量的方法來(lái)自動(dòng)控制和優(yōu)化資源使用。(例如存儲(chǔ)、處理、帶寬以及活動(dòng)用戶(hù)數(shù))。資源的使用可被監(jiān)測(cè)、控制以及對(duì)供應(yīng)商和用戶(hù)提供透明的報(bào)告(即付即用的模式)。


三大服務(wù)模式:

SaaS軟件層服務(wù),如wordpress環(huán)境,可以直接給用戶(hù)用的軟件。

PaaS平臺(tái)服務(wù):如虛擬主機(jī)、操作系統(tǒng)等開(kāi)發(fā)環(huán)境,用來(lái)供開(kāi)發(fā)人員開(kāi)發(fā)應(yīng)用。

IaaS基礎(chǔ)設(shè)置服務(wù):提供硬件設(shè)施的代管理,相當(dāng)于把服務(wù)器的運(yùn)維外包給云平臺(tái)公司,節(jié)省了維護(hù)成本和辦公場(chǎng)地,公司可以在任何時(shí)候利用這些硬件來(lái)運(yùn)行其應(yīng)用。


云計(jì)算、Hadoop、Openstack的關(guān)系

云計(jì)算:是一種通過(guò)互聯(lián)網(wǎng)訪問(wèn)、可定制的IT資源共享池,并按照使用量付費(fèi)的模式,這些資源包括網(wǎng)絡(luò),服務(wù)器,存儲(chǔ)、應(yīng)用、服務(wù)等。廣泛意義上來(lái)說(shuō),云計(jì)算是指服務(wù)的交付和使用模式,即通過(guò)網(wǎng)絡(luò)以按需,易擴(kuò)展的方式獲取所需的資源,這種服務(wù)可以是IT的基礎(chǔ)設(shè)施(硬件、軟件、平臺(tái)),也可以是其他服務(wù),云計(jì)算的核心理念就是按需服務(wù),就像人使用水、電、天然氣等資源一樣。

Openstack:是云計(jì)算實(shí)現(xiàn)的基礎(chǔ)框架,由亞馬遜開(kāi)源實(shí)現(xiàn)。Openstack將物理機(jī)虛擬化,包含各種管理組件及API。

Hadoop:是一種利用分布式進(jìn)行大數(shù)據(jù)存儲(chǔ)、計(jì)算的基礎(chǔ)架構(gòu)。

Openstack和Hadoop并沒(méi)有什么關(guān)系,屬于不同層面。


Hadoop基礎(chǔ)——Hadoop組成

HDFS(Hadoop Distributed File System):用來(lái)提高吞吐量的分布式文件系統(tǒng),利用高效率的分布式算法將大量本分?jǐn)?shù)據(jù)分散存儲(chǔ)在多個(gè)數(shù)據(jù)節(jié)點(diǎn),是海量數(shù)據(jù)分布式存儲(chǔ)與管理的基石。

MapReduce:并行處理框架,利用計(jì)算機(jī)集群強(qiáng)大的計(jì)算能力完成處理龐大的計(jì)算任務(wù)。

除HDFS和MapReduce之外,Hadoop還有很多其他的項(xiàng)目,但最核心的是這兩個(gè),所以下面更近一步了解HDFS和MapReduce。


Hadoop基礎(chǔ)——HDFS分布式文件系統(tǒng)

參考鏈接:http://www.cnblogs.com/laov/p/3434917.html

HDFS(Hadoop Distributed File System )Hadoop分布式文件系統(tǒng)。是根據(jù)google發(fā)表的論文翻版的。論文為GFS(Google File System)Google 文件系統(tǒng)。

HDFS有很多特點(diǎn)

?????①?保存多個(gè)副本,且提供容錯(cuò)機(jī)制,副本丟失或宕機(jī)自動(dòng)恢復(fù)。默認(rèn)存3份。

?????②?運(yùn)行在廉價(jià)的機(jī)器上。

?????③?適合大數(shù)據(jù)的處理。多大?多???HDFS默認(rèn)會(huì)將文件分割成block,64M為1個(gè)block。然后將block按鍵值對(duì)存儲(chǔ)在HDFS上,并將鍵值對(duì)的映射存到內(nèi)存中。如果小文件太多,那內(nèi)存的負(fù)擔(dān)會(huì)很重。

如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分NameNode、SecondaryNameNode、DataNode這幾個(gè)角色。

? ??NameNode:是Master節(jié)點(diǎn),是大領(lǐng)導(dǎo)。管理數(shù)據(jù)塊映射;處理客戶(hù)端的讀寫(xiě)請(qǐng)求;配置副本策略;管理HDFS的名稱(chēng)空間;(用戶(hù)數(shù)據(jù)不會(huì)流經(jīng)該節(jié)點(diǎn),NameNode不僅提供為空間命名、訪問(wèn)控制信息、映射信息、位置信息等服務(wù),還可以管理系統(tǒng)一定范圍內(nèi)的活動(dòng)——出自李慶君·Hadoop架構(gòu)下海量空間數(shù)據(jù)存儲(chǔ)與管理)

? ??SecondaryNameNode:是一個(gè)小弟,分擔(dān)大哥namenode的工作量;是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode。

? ??DataNode:Slave節(jié)點(diǎn),奴隸,干活的。負(fù)責(zé)存儲(chǔ)client發(fā)來(lái)的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫(xiě)操作。

? ??熱備份:b是a的熱備份,如果a壞掉。那么b馬上運(yùn)行代替a的工作。

? ??冷備份:b是a的冷備份,如果a壞掉。那么b不能馬上代替a工作。但是b上存儲(chǔ)a的一些信息,減少a壞掉之后的損失。

? ??fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹(shù)。)

? ??edits:元數(shù)據(jù)的操作日志(針對(duì)文件系統(tǒng)做的修改操作記錄)

? ??namenode內(nèi)存中存儲(chǔ)的是=fsimage+edits。

SecondaryNameNode負(fù)責(zé)定時(shí)默認(rèn)1小時(shí),從namenode上,獲取fsimage和edits來(lái)進(jìn)行合并,然后再發(fā)送給namenode。減少namenode的工作量。

其中datanode主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),namenode主要負(fù)責(zé)三個(gè)功能,分別是(1)管理元數(shù)據(jù) ?(2)維護(hù)目錄樹(shù) (3)響應(yīng)客戶(hù)請(qǐng)求

首先介紹下,元數(shù)據(jù)格式

hdfs在外界看來(lái)就是普通的文件系統(tǒng),可以通過(guò)路徑進(jìn)行數(shù)據(jù)的訪問(wèn)等操作,但在實(shí)際過(guò)程存儲(chǔ)中,卻是分布在各個(gè)節(jié)點(diǎn)上。如上圖所示,是一條元數(shù)據(jù),/test/a.log 是在hdfs文件系統(tǒng)中的路徑,3是這個(gè)文件的副本數(shù)(副本數(shù)可以通過(guò)在配置文件中的配置來(lái)修改的)。在hdfs中,文件是進(jìn)行分塊存儲(chǔ)的,如果文件過(guò)大,就要分成多塊存儲(chǔ),每個(gè)塊在文件系統(tǒng)中存儲(chǔ)3個(gè)副本,以上圖為例,就是分成blk_1和blk_2兩個(gè)塊,每個(gè)塊在實(shí)際的節(jié)點(diǎn)中有3個(gè)副本,比如blk_1的3個(gè)副本分別存儲(chǔ)在h0,h1,h3中。

現(xiàn)在由此引出一個(gè)問(wèn)題,namenode中的元數(shù)據(jù)是存儲(chǔ)在哪里的?首先,我們做個(gè)假設(shè),如果存儲(chǔ)在namenode節(jié)點(diǎn)的磁盤(pán)中,因?yàn)榻?jīng)常需要進(jìn)行隨機(jī)訪問(wèn),還有響應(yīng)客戶(hù)請(qǐng)求,必然是效率過(guò)低。因此,元數(shù)據(jù)需要存放在內(nèi)存中。但如果只存在內(nèi)存中,一旦斷點(diǎn),元數(shù)據(jù)丟失,整個(gè)集群就無(wú)法工作了!??!因此必須在磁盤(pán)中有備份,在磁盤(pán)中的備份就是fsImage,存放在namenode節(jié)點(diǎn)對(duì)應(yīng)的磁盤(pán)中。這樣又會(huì)帶來(lái)新的問(wèn)題,當(dāng)在內(nèi)存中的元數(shù)據(jù)更新時(shí),如果同時(shí)更新fsImage,就會(huì)導(dǎo)致效率過(guò)低,但如果不更新,就會(huì)發(fā)生一致性問(wèn)題,一旦namenode節(jié)點(diǎn)斷點(diǎn),就會(huì)產(chǎn)生數(shù)據(jù)丟失。因此,引入edits.log文件(只進(jìn)行追加操作,效率很高)。每當(dāng)元數(shù)據(jù)有更新或者添加元數(shù)據(jù)時(shí),修改內(nèi)存中的元數(shù)據(jù)并追加到edits.log中。這樣,一旦namenode節(jié)點(diǎn)斷電,可以通過(guò)fsImage和edits.log的合并,合成元數(shù)據(jù)。但是,如果長(zhǎng)時(shí)間添加數(shù)據(jù)到edit.log中,會(huì)導(dǎo)致該文件數(shù)據(jù)過(guò)大,效率降低,而且一旦斷電,恢復(fù)元數(shù)據(jù)需要的時(shí)間過(guò)長(zhǎng)。因此,需要定期進(jìn)行fsImage和edits.log的合并,如果這個(gè)操作有namenode節(jié)點(diǎn)完成,又會(huì)效率過(guò)低。因此,引入一個(gè)新的節(jié)點(diǎn)secondaryNamenode,專(zhuān)門(mén)用于fsImage和edits.log的合并。

檢查點(diǎn)處理過(guò)程的具體步驟如下

1)namenode節(jié)點(diǎn)每隔一定時(shí)間請(qǐng)求secondaryNamenode合并操作

2)secondaryNamenode請(qǐng)求namenode進(jìn)行edits.log的滾動(dòng),這樣新的編輯操作就能夠進(jìn)入新的文件中

3)secondaryNamenode從namenode中下載fsImage和edits.log

4)secondaryNamenode進(jìn)行fsImage和edits.log的合并,成為fsImage.checkpoint文件

5)namenode下載合并后的fsImage.checkpoin文件

6)將fsImage.checkpoint和edits.new命名為原來(lái)的文件名(這樣之后fsImage和內(nèi)存中的元數(shù)據(jù)只差edits.new)

具體的過(guò)程如下圖所示


工作原理

寫(xiě)操作:

有一個(gè)文件FileA,100M大小。Client將FileA寫(xiě)入到HDFS上。

HDFS按默認(rèn)配置。

HDFS分布在三個(gè)機(jī)架上Rack1,Rack2,Rack3。


a.?Client將FileA按64M分塊。分成兩塊,block1和Block2;

b.?Client向nameNode發(fā)送寫(xiě)數(shù)據(jù)請(qǐng)求,如圖藍(lán)色虛線(xiàn)①------>。

c.?NameNode節(jié)點(diǎn),記錄block信息。并返回可用的DataNode,如粉色虛線(xiàn)②--------->。

??? Block1: host2,host1,host3

??? Block2: host7,host8,host4

??? 原理:

??????? NameNode具有RackAware機(jī)架感知功能,這個(gè)可以配置。

??????? 若client為DataNode節(jié)點(diǎn),那存儲(chǔ)block時(shí),規(guī)則為:副本1,同client的節(jié)點(diǎn)上;副本2,不同機(jī)架節(jié)點(diǎn)上;副本3,同第二個(gè)副本機(jī)架的另一個(gè)節(jié)點(diǎn)上;其他副本隨機(jī)挑選。

??????? 若client不為DataNode節(jié)點(diǎn),那存儲(chǔ)block時(shí),規(guī)則為:副本1,隨機(jī)選擇一個(gè)節(jié)點(diǎn)上;副本2,不同副本1,機(jī)架上;副本3,同副本2相同的另一個(gè)節(jié)點(diǎn)上;其他副本隨機(jī)挑選。

d.?client向DataNode發(fā)送block1;發(fā)送過(guò)程是以流式寫(xiě)入。

? ? 流式寫(xiě)入過(guò)程,

? ???????1>將64M的block1按64k的package劃分;

?????????2>然后將第一個(gè)package發(fā)送給host2;

?????????3>host2接收完后,將第一個(gè)package發(fā)送給host1,同時(shí)client想host2發(fā)送第二個(gè)package;

?????????4>host1接收完第一個(gè)package后,發(fā)送給host3,同時(shí)接收host2發(fā)來(lái)的第二個(gè)package。

?????????5>以此類(lèi)推,如圖紅線(xiàn)實(shí)線(xiàn)所示,直到將block1發(fā)送完畢。

?????????6>host2,host1,host3向NameNode,host2向Client發(fā)送通知,說(shuō)“消息發(fā)送完了”。如圖粉紅顏色實(shí)線(xiàn)所示。

?????????7>client收到host2發(fā)來(lái)的消息后,向namenode發(fā)送消息,說(shuō)我寫(xiě)完了。這樣就真完成了。如圖黃色粗實(shí)線(xiàn)

?????????8>發(fā)送完block1后,再向host7,host8,host4發(fā)送block2,如圖藍(lán)色實(shí)線(xiàn)所示。

?????????9>發(fā)送完block2后,host7,host8,host4向NameNode,host7向Client發(fā)送通知,如圖淺綠色實(shí)線(xiàn)所示。

?????????10>client向NameNode發(fā)送消息,說(shuō)我寫(xiě)完了,如圖黃色粗實(shí)線(xiàn)。。。這樣就完畢了。

分析,通過(guò)寫(xiě)過(guò)程,我們可以了解到:

?????寫(xiě)1T文件,我們需要3T的存儲(chǔ),3T的網(wǎng)絡(luò)流量貸款。

?????在執(zhí)行讀或?qū)懙倪^(guò)程中,NameNode和DataNode通過(guò)HeartBeat進(jìn)行保存通信,確定DataNode活著。如果發(fā)現(xiàn)DataNode死掉了,就將死掉的DataNode上的數(shù)據(jù),放到其他節(jié)點(diǎn)去。讀取時(shí),要讀其他節(jié)點(diǎn)去。

?????掛掉一個(gè)節(jié)點(diǎn),沒(méi)關(guān)系,還有其他節(jié)點(diǎn)可以備份;甚至,掛掉某一個(gè)機(jī)架,也沒(méi)關(guān)系;其他機(jī)架上,也有備份。


讀操作:

讀操作就簡(jiǎn)單一些了,如圖所示,client要從datanode上,讀取FileA。而FileA由block1和block2組成。?


那么,讀操作流程為:

a.?client向namenode發(fā)送讀請(qǐng)求。

b.?namenode查看Metadata信息,返回fileA的block的位置。

? ? block1:host2,host1,host3

? ? block2:host7,host8,host4

c.?block的位置是有先后順序的,先讀block1,再讀block2。而且block1去host2上讀??;然后block2,去host7上讀取;


上面例子中,client位于機(jī)架外,那么如果client位于機(jī)架內(nèi)某個(gè)DataNode上,例如,client是host6。那么讀取的時(shí)候,遵循的規(guī)律是:

優(yōu)選讀取本機(jī)架上的數(shù)據(jù)。


Hadoop基礎(chǔ)——MapReduce原理

參考鏈接:http://blog.jobbole.com/80619/

MapReduce分Map(映射)和Reduce(歸約)。Map是對(duì)一組數(shù)據(jù)元素進(jìn)行某種重復(fù)式的處理。

Reduce是對(duì)Map的中間結(jié)果進(jìn)行某種進(jìn)一步的匯總。

MapReduce中的Map和Reduce操作的抽象描述

MapReduce借鑒了函數(shù)式程序設(shè)計(jì)語(yǔ)言Lisp中的思想,定義了如下的Map和Reduce兩個(gè)抽象的編程接口,由用戶(hù)去編程實(shí)現(xiàn):

?map:(k1; v1)?→[(k2; v2)]

輸入:鍵值對(duì)(k1; v1)表示的數(shù)據(jù)

處理:文檔數(shù)據(jù)記錄(如文本文件中的行,或數(shù)據(jù)表格中的行)將以“鍵值對(duì)”形式傳入map函數(shù);map函數(shù)將處理這些鍵值對(duì),并以另一種鍵值對(duì)形式輸出處理的一組鍵值對(duì)中間結(jié)果   [(k2; v2)]

輸出:鍵值對(duì)[(k2; v2)]表示的一組中間數(shù)據(jù)

?reduce:?(k2; [v2])→?[(k3; v3)]

輸入: 由map輸出的一組鍵值對(duì)[(k2; v2)] 將被進(jìn)行合并處理將同樣主鍵下的不同數(shù)值合并到一個(gè)列表[v2]中,故reduce的輸入為(k2; [v2])

處理:對(duì)傳入的中間結(jié)果列表數(shù)據(jù)進(jìn)行某種整理或進(jìn)一步的處理,并產(chǎn)生最終的某種形式的結(jié)果輸出[(k3; v3)] 。

輸出:最終輸出結(jié)果[(k3; v3)]

Map和Reduce為程序員提供了一個(gè)清晰的操作接口抽象描述

基于MapReduce的處理過(guò)程示例文檔詞頻統(tǒng)計(jì):WordCount

設(shè)有4組原始文本數(shù)據(jù):

Text 1:?the weather is good???????? Text 2:?today is good

Text 3:?good weather is good????? Text 4:?today has good weather

傳統(tǒng)的串行處理方式(Java):

輸出:good:? 5;?? has: 1;? is: 3;?? the: 1;?? today: 2;??? weather: 3

基于MapReduce的處理過(guò)程示例文檔詞頻統(tǒng)計(jì):WordCount

MapReduce處理方式

使用4個(gè)map節(jié)點(diǎn):

map節(jié)點(diǎn)1:

輸入:(text1, “the weather is good”)

輸出:(the, 1), (weather, 1), (is, 1), (good, 1)

map節(jié)點(diǎn)2:

輸入:(text2, “today is good”)

輸出:(today, 1), (is, 1), (good, 1)

map節(jié)點(diǎn)3:

輸入:(text3, “good weather is good”)

輸出:(good, 1), (weather, 1), (is, 1), (good, 1)

map節(jié)點(diǎn)4:

輸入:(text3, “today has good weather”)

輸出:(today, 1), (has, 1), (good, 1), (weather, 1)

使用3個(gè)reduce節(jié)點(diǎn):

MapReduce處理方式

MapReduce偽代碼(實(shí)現(xiàn)Map和Reduce兩個(gè)函數(shù)):


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容