hadoop 各种概念整理
Hadoop
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱(chēng)HDFS。
HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(wèn)(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
Hadoop解決哪些問(wèn)題?
-
海量數(shù)據(jù)需要及時(shí)分析和處理
-
海量數(shù)據(jù)需要深入分析和挖掘
-
數(shù)據(jù)需要長(zhǎng)期保存
海量數(shù)據(jù)存儲(chǔ)的問(wèn)題:
-
磁盤(pán)IO稱(chēng)為一種瓶頸,而非CPU資源
-
網(wǎng)絡(luò)帶寬是一種稀缺資源
-
硬件故障成為影響穩(wěn)定的一大因素
Hadoop 相關(guān)技術(shù)
Hbase
- Nosql數(shù)據(jù)庫(kù),Key-Value存儲(chǔ)
- 最大化利用內(nèi)存
HDFS
- hadoop distribute file system(分布式文件系統(tǒng))
- 最大化利用磁盤(pán)
MapReduce
- 編程模型,主要用來(lái)做數(shù)據(jù)分析
- 最大化利用CPU
集中式系統(tǒng)
集中式系統(tǒng)用一句話概括就是:一個(gè)主機(jī)帶多個(gè)終端。終端沒(méi)有數(shù)據(jù)處理能力,僅負(fù)責(zé)數(shù)據(jù)的錄入和輸出。而運(yùn)算、存儲(chǔ)等全部在主機(jī)上進(jìn)行。現(xiàn)在的銀行系統(tǒng),大部分都是這種集中式的系統(tǒng),此外,在大型企業(yè)、科研單位、軍隊(duì)、政府等也有分布。集中式系統(tǒng),主要流行于上個(gè)世紀(jì)。
集中式系統(tǒng)的最大的特點(diǎn)就是部署結(jié)構(gòu)非常簡(jiǎn)單,底層一般采用從IBM、HP等廠商購(gòu)買(mǎi)到的昂貴的大型主機(jī)。因此無(wú)需考慮如何對(duì)服務(wù)進(jìn)行多節(jié)點(diǎn)的部署,也就不用考慮各節(jié)點(diǎn)之間的分布式協(xié)作問(wèn)題。但是,由于采用單機(jī)部署。很可能帶來(lái)系統(tǒng)大而復(fù)雜、難于維護(hù)、發(fā)生單點(diǎn)故障(單個(gè)點(diǎn)發(fā)生故障的時(shí)候會(huì)波及到整個(gè)系統(tǒng)或者網(wǎng)絡(luò),從而導(dǎo)致整個(gè)系統(tǒng)或者網(wǎng)絡(luò)的癱瘓)、擴(kuò)展性差等問(wèn)題。
分布式系統(tǒng)(distributed system)
一群獨(dú)立計(jì)算機(jī)集合共同對(duì)外提供服務(wù),但是對(duì)于系統(tǒng)的用戶(hù)來(lái)說(shuō),就像是一臺(tái)計(jì)算機(jī)在提供服務(wù)一樣。分布式意味著可以采用更多的普通計(jì)算機(jī)(相對(duì)于昂貴的大型機(jī))組成分布式集群對(duì)外提供服務(wù)。計(jì)算機(jī)越多,CPU、內(nèi)存、存儲(chǔ)資源等也就越多,能夠處理的并發(fā)訪問(wèn)量也就越大。
一個(gè)標(biāo)準(zhǔn)的分布式系統(tǒng)應(yīng)該具有以下幾個(gè)主要特征:
- 分布性
分布式系統(tǒng)中的多臺(tái)計(jì)算機(jī)之間在空間位置上可以隨意分布,系統(tǒng)中的多臺(tái)計(jì)算機(jī)之間沒(méi)有主、從之分,即沒(méi)有控制整個(gè)系統(tǒng)的主機(jī),也沒(méi)有受控的從機(jī)。
- 透明性
系統(tǒng)資源被所有計(jì)算機(jī)共享。每臺(tái)計(jì)算機(jī)的用戶(hù)不僅可以使用本機(jī)的資源,還可以使用本分布式系統(tǒng)中其他計(jì)算機(jī)的資源(包括CPU、文件、打印機(jī)等)。
- 同一性
系統(tǒng)中的若干臺(tái)計(jì)算機(jī)可以互相協(xié)作來(lái)完成一個(gè)共同的任務(wù),或者說(shuō)一個(gè)程序可以分布在幾臺(tái)計(jì)算機(jī)上并行地運(yùn)行。
- 通信性
系統(tǒng)中任意兩臺(tái)計(jì)算機(jī)都可以通過(guò)通信來(lái)交換信息。
分布式數(shù)據(jù)和存儲(chǔ)
大型網(wǎng)站常常需要處理海量數(shù)據(jù),單臺(tái)計(jì)算機(jī)往往無(wú)法提供足夠的內(nèi)存空間,可以對(duì)這些數(shù)據(jù)進(jìn)行分布式存儲(chǔ)。
分布式計(jì)算
隨著計(jì)算技術(shù)的發(fā)展,有些應(yīng)用需要非常巨大的計(jì)算能力才能完成,如果采用集中式計(jì)算,需要耗費(fèi)相當(dāng)長(zhǎng)的時(shí)間來(lái)完成。分布式計(jì)算將該應(yīng)用分解成許多小的部分,分配給多臺(tái)計(jì)算機(jī)進(jìn)行處理。這樣可以節(jié)約整體計(jì)算時(shí)間,大大提高計(jì)算效率。
關(guān)系型數(shù)據(jù)庫(kù), MapReduce (大規(guī)模數(shù)據(jù)批量分析)
數(shù)據(jù)訪問(wèn)效率
磁盤(pán)尋址時(shí)間提高速度遠(yuǎn)遠(yuǎn)小于數(shù)據(jù)傳輸速率提高速度(尋址是將磁頭移動(dòng)到特定硬盤(pán)位置進(jìn)行讀寫(xiě)操作,這是導(dǎo)致硬盤(pán)操作延遲的主要原因,而傳輸速率取決于硬盤(pán)的帶寬)。對(duì)于超大規(guī)模數(shù)據(jù)(以PB為單位)必須考慮使用其他方式。關(guān)系型數(shù)據(jù)庫(kù)使用B樹(shù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)的更新查詢(xún)操作,對(duì)于最大到GB的數(shù)據(jù)量,一般相對(duì)數(shù)據(jù)量較小,效果很好。但是大數(shù)據(jù)量時(shí),B樹(shù)使用排序/合并方式重建數(shù)據(jù)庫(kù)以更新數(shù)據(jù)的效率遠(yuǎn)遠(yuǎn)低于MapReduce。
數(shù)據(jù)結(jié)構(gòu)不同
- 結(jié)構(gòu)化數(shù)據(jù)
(structured data):是具體既定格式的實(shí)體化數(shù)據(jù),如XML文檔或滿(mǎn)足特定預(yù)定義格式的數(shù)據(jù)庫(kù)表。這是RDBMS包括的內(nèi)容。?
半結(jié)構(gòu)化數(shù)據(jù)
- 半結(jié)構(gòu)化數(shù)據(jù)
(semi-structured data):比較松散,雖然可能有格式,但是經(jīng)常被忽略,所以他只能作為對(duì)的一般指導(dǎo)。如:一張電子表格,其結(jié)構(gòu)是由單元格組成的網(wǎng)格,但是每個(gè)單元格自身可保存任何形式的數(shù)據(jù)。?
非結(jié)構(gòu)化數(shù)據(jù)
- 非結(jié)構(gòu)化數(shù)據(jù)?
(unstructured data):沒(méi)有什么特別的內(nèi)部結(jié)構(gòu),如純文本或圖像數(shù)據(jù)。
關(guān)系型數(shù)據(jù)使用的是結(jié)構(gòu)化數(shù)據(jù),在數(shù)據(jù)庫(kù)階段按具體類(lèi)型處理數(shù)據(jù)。關(guān)系型數(shù)據(jù)的規(guī)范性非常重要,保持?jǐn)?shù)據(jù)的完整性,一致性。
MapReduce 線性,可伸縮性編程
程序員需要編寫(xiě) map函數(shù) 和 reduce函數(shù)。每個(gè)函數(shù)定義從一個(gè)鍵值對(duì)集合到另一個(gè)鍵值對(duì)集合的映射。
MapReduce 工作原理
?
map函數(shù):接受一個(gè)鍵值對(duì)(key-value pair),產(chǎn)生一組中間鍵值對(duì)。MapReduce框架會(huì)將map函數(shù)產(chǎn)生的中間鍵值對(duì)里鍵相同的值傳遞給一個(gè)reduce函數(shù)。
reduce函數(shù):接受一個(gè)鍵,以及相關(guān)的一組值,將這組值進(jìn)行合并產(chǎn)生一組規(guī)模更小的值(通常只有一個(gè)或零個(gè)值)。
HDFS
HDFS采用master/slave架構(gòu)?
?
rack
放服務(wù)器的支架。
一個(gè)Block的副本會(huì)保存到兩個(gè)或兩個(gè)以上的機(jī)架上的服務(wù)器中,這樣能防災(zāi)容錯(cuò),因?yàn)橐粋€(gè)機(jī)架出現(xiàn)掉電,交換機(jī)掛了的概率還是很高的。
數(shù)據(jù)塊
linux中每個(gè)磁盤(pán)有默認(rèn)的數(shù)據(jù)塊大小,這是對(duì)磁盤(pán)操作的最小單位,通常512字節(jié)。HDFS同樣也有塊(Block)的概念,默認(rèn)64MB/128MB,比磁盤(pán)塊大得多。與單一的文件系統(tǒng)類(lèi)似,HDFS上的文件系統(tǒng)也被劃分成多個(gè)分塊(Chunk)作為獨(dú)立的存儲(chǔ)單元。
一個(gè)hadoop文件就是由一系列分散在不同的DataNode上的block組成。
HDFS默認(rèn)的Block為64MB/128MB?
塊相對(duì)較大,主要是把尋道時(shí)間最小化。如果一個(gè)塊足夠大,從硬盤(pán)傳輸數(shù)據(jù)的時(shí)間將遠(yuǎn)遠(yuǎn)大于尋找塊起始位置的時(shí)間。這樣使得HDFS的數(shù)據(jù)塊速度和硬盤(pán)的傳輸速度更加接近。
NameNode 元數(shù)據(jù)節(jié)點(diǎn)
NameNode的作用是管理文件目錄結(jié)構(gòu),接受用戶(hù)的操作請(qǐng)求,是管理數(shù)據(jù)節(jié)點(diǎn)的,是一個(gè)jetty服務(wù)器。名字節(jié)點(diǎn)維護(hù)兩套數(shù)據(jù), 一套是文件目錄與數(shù)據(jù)塊之間的關(guān)系 , 另一套是數(shù)據(jù)塊與節(jié)點(diǎn)之間的關(guān)系 。 前一套 數(shù)據(jù)是 靜態(tài)的 ,是存放在磁盤(pán)上的, 通過(guò)fsimage和edits文件來(lái)維護(hù) ; 后一套 數(shù)據(jù)是 動(dòng)態(tài)的 ,不持久放到到磁盤(pán)的,每當(dāng)集群?jiǎn)?dòng)的時(shí)候,會(huì)自動(dòng)建立這些信息,所以一般都放在內(nèi)存中。
NameNode保存文件metadata信息,包括:
-
文件owership和permissions
-
文件包含哪些塊
-
Block保存在哪個(gè)DateNode(由DataNode啟動(dòng)時(shí)上報(bào)給)
例如一個(gè)Metadata
file.txt Blk A: DN1,DN5,DN6Blk B: DN7,DN1,DN2Blk C: DN5,DN8,DN9NameNode的metadata信息在啟動(dòng)后會(huì)加載到內(nèi)存中
文件包括:
① fsimage (文件系統(tǒng)鏡像):元數(shù)據(jù)鏡像文件。存儲(chǔ)某一時(shí)段NameNode內(nèi)存元數(shù)據(jù)信息。
② edits: 操作日志文件。
③ fstime: 保存最近一次checkpoint的時(shí)間
NameNode決定是否將文件映射到DataNode的復(fù)制塊上:多副本,默認(rèn)三個(gè),第一個(gè)復(fù)制塊存儲(chǔ)在同一機(jī)架的不同節(jié)點(diǎn)上,最后一個(gè)復(fù)制塊存儲(chǔ)到不同機(jī)架的某個(gè)節(jié)點(diǎn)上。
?
?
轉(zhuǎn)自:http://www.cnblogs.com/gisorange/p/4328859.html
DataNode
DataNode的作用是HDFS中真正存儲(chǔ)數(shù)據(jù)的。
DataNode的作用:
-
保存Block,每個(gè)塊對(duì)應(yīng)一個(gè)元數(shù)據(jù)信息文件。這個(gè)文件主要描述這個(gè)塊屬于哪個(gè)文件,第幾個(gè)塊等信息。
-
啟動(dòng)DataNode線程的時(shí)候會(huì)向NameNode匯報(bào)Block信息
-
通過(guò)向NameNode發(fā)送心跳保持與其聯(lián)系(3秒一次),如果NameNode 10分鐘沒(méi)有收到DataNode的心跳,認(rèn)為其已經(jīng)lost,并將其上的Block復(fù)制到其它的DataNode.
假設(shè)文件大小是100GB,從字節(jié)位置0開(kāi)始,每64MB字節(jié)劃分為一個(gè)block,依此類(lèi)推,可以劃分出很多的block。每個(gè)block就是64MB大小。block是hdfs讀寫(xiě)數(shù)據(jù)的基本單位。
Secondary NameNode(輔助元數(shù)據(jù)信息)
Secondary NameNode是一個(gè)用來(lái)監(jiān)控HDFS狀態(tài)的輔助后臺(tái)程序。定期的將Namespace鏡像與操作日志文件(edit log)合并,以防止操作日志文件(edit log)變得過(guò)大;能減少NameNode啟動(dòng)時(shí)間。
它不是NameNode的熱備份,可以作為一個(gè)冷備份?
* 將本地保存的fsimage導(dǎo)入?
* 修改cluster的所有DataNode的NameNode地址?
* 修改所有client端的NameNode地址?
* 或者修改Secondary NameNode IP為 NameNode IP
?
hadoop讀取文件
?
hadoop寫(xiě)文件
?
Hadoop在創(chuàng)建新文件時(shí)是如何選擇block的位置的呢,綜合來(lái)說(shuō),要考慮以下因素:帶寬(包括寫(xiě)帶寬和讀帶寬)和數(shù)據(jù)安全性。如果我們把三個(gè)備份全部放在一個(gè)datanode上,雖然可以避免了寫(xiě)帶寬的消耗,但幾乎沒(méi)有提供數(shù)據(jù)冗余帶來(lái)的安全性,因?yàn)槿绻@個(gè)datanode當(dāng)機(jī),那么這個(gè)文件的所有數(shù)據(jù)就全部丟失了。另一個(gè)極端情況是,如果把三個(gè)冗余備份全部放在不同的機(jī)架,甚至數(shù)據(jù)中心里面,雖然這樣數(shù)據(jù)會(huì)安全,但寫(xiě)數(shù)據(jù)會(huì)消耗很多的帶寬。Hadoop 0.17.0給我們提供了一個(gè)默認(rèn)replica分配策略(Hadoop 1.X以后允許replica策略是可插拔的,也就是你可以自己制定自己需要的replica分配策略)。replica的默認(rèn)分配策略是把第一個(gè)備份放在與客戶(hù)端相同的datanode上(如果客戶(hù)端在集群外運(yùn)行,就隨機(jī)選取一個(gè)datanode來(lái)存放第一個(gè)replica),第二個(gè)replica放在與第一個(gè)replica不同機(jī)架的一個(gè)隨機(jī)datanode上,第三個(gè)replica放在與第二個(gè)replica相同機(jī)架的隨機(jī)datanode上。如果replica數(shù)大于三,則隨后的replica在集群中隨機(jī)存放,Hadoop會(huì)盡量避免過(guò)多的replica存放在同一個(gè)機(jī)架上。
轉(zhuǎn)自:http://www.cnblogs.com/beanmoon/archive/2012/12/17/2821548.html
NameNode 安全模式
在分布式文件系統(tǒng)自動(dòng)的時(shí)候,開(kāi)始時(shí)會(huì)有安全模式,當(dāng)分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中不允許有上傳,修改,刪除等寫(xiě)操作,只能讀,直到安全模式結(jié)束。
1) namenode啟動(dòng)的時(shí)候,首先將映像文件(fsimage)載入內(nèi)存,并執(zhí)行編輯日志(edits)中的各項(xiàng)操作
2) 一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射,則創(chuàng)建一個(gè)新的fsimage文件(這個(gè)操作不要SecondaryNameNode)和一個(gè)空的日志edits文件
3) NameNode開(kāi)始監(jiān)聽(tīng)RPC和HTTP請(qǐng)求
4) 此刻namenode運(yùn)行在安全模式,即namenode的文件系統(tǒng)對(duì)于客戶(hù)端來(lái)說(shuō)是只讀的。(可以顯示目錄,顯示文件內(nèi)容等;寫(xiě),刪除,重命名等操作都會(huì)失敗)
5) 系統(tǒng)中的數(shù)據(jù)塊的位置不是有namenode維護(hù)的,而是以塊列表的形式存儲(chǔ)在datanode中(datanode啟動(dòng)匯報(bào)的)
6) 在系統(tǒng)的正常操作期間,namenode會(huì)在內(nèi)存中保留所有塊位置的映射信息
7)在安全模式下,各個(gè)datanode會(huì)向namenode發(fā)送塊列表的最新情況
8) 進(jìn)入和離開(kāi)安全模式
查看namenode處于哪個(gè)狀態(tài)?
hadoop dfsadmin -sagemode get
進(jìn)入安全模式(hadoop啟動(dòng)的時(shí)候是在安全模式)?
hadoop dfsadmin -sagemode enter
離開(kāi)安全模式?
hadoop dfsadmin -sagemode leave
Hadoop中的RPC機(jī)制
同其他RPC框架一樣,Hadoop RPC分為四個(gè)部分:
(1)序列化層:Clent與Server端通信傳遞的信息采用了Hadoop里提供的序列化類(lèi)或自定義的Writable類(lèi)型;
(2)函數(shù)調(diào)用層:Hadoop RPC通過(guò)動(dòng)態(tài)代理以及java反射實(shí)現(xiàn)函數(shù)調(diào)用;
(3)網(wǎng)絡(luò)傳輸層:Hadoop RPC采用了基于TCP/IP的socket機(jī)制;
(4)服務(wù)器端框架層:RPC Server利用java NIO以及采用了事件驅(qū)動(dòng)的I/O模型,提高RPC Server的并發(fā)處理能力;
感謝您的關(guān)注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群進(jìn)群密碼:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,備注:“xttblog”,添加助理微信拉你進(jìn)群。備注錯(cuò)誤不會(huì)同意好友申請(qǐng)。再次感謝您的關(guān)注!后續(xù)有精彩內(nèi)容會(huì)第一時(shí)間發(fā)給您!原創(chuàng)文章投稿請(qǐng)發(fā)送至532009913@qq.com郵箱。商務(wù)合作可添加助理微信進(jìn)行溝通!
總結(jié)
以上是生活随笔為你收集整理的hadoop 各种概念整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 手动建站记录2019
- 下一篇: Mapped Statements co