天天看點

Hadoop:相關概念

Hadoop:相關概念

Hadoop實作了一個分布式檔案系統(Hadoop Distributed File System),簡稱HDFS.

(1)HDFS有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬體上;

(2)HDFS提供高吞吐量(high throughput)來通路應用程式的資料,适合那些有着超大資料集(large data set)的應用程式;

(3)HDFS放寬了(relax)POSIX的要求,可以以流的形式通路(streaming access)檔案系統中的資料;

Hadoop架構最核心的設計就是:HDFS和MapReduce.

(1)HDFS為海量的資料提供的存儲;

(2)MapReduce為海量的資料提供的了計算;

(1)海量資料需要及時分析和處理;

(2)海量資料需要深入分析和挖掘;

(3)資料需要長期保持;

(1)磁盤IO稱為一種瓶頸,而非CPU資源;

(2)網絡寬帶是一種缺稀資源;

(3)硬體故障成為影響穩定的一大因素;

(1)Nosq資料庫,Key-Value存儲;

(2)最大化利用記憶體;

(1)Hadoop Distribued File System(分布式檔案系統);

(2)最大化利用磁盤;

(1)編輯模型,主要用來資料分析;

(2)最大化利用CPU;

集中式系統用一句話概況就是:一個主機帶多個終端。

終端沒有資料處理能力,僅負責資料的錄入和輸出;而運算、存儲等等都在主機上進行。現在銀行系統,大部分都是這種集中式系統,此外,大型企業、科研機關、軍隊、政府等也有分布;

集中式系統,主要流行于上個世紀。

集中式系統的最大特點就是部署結構非常簡單;底層一般采用從IBM、HP等廠商購買到昂貴的大型主機;是以,無需考慮對對服務進行多節點的部署,也不用考慮各節點之間的分布式協作問題。

但是由于采購單機部署,很可能帶來系統的大而複雜、難于維護、發生單點故障(單個點發生故障的時候會波及到整個系統或者網絡,進而導緻整個系統或者網絡癱瘓)、擴充性差等問題。

一群獨立計算機集合共同提供對外服務,但是對系統使用者來說,就像是一台計算機提供服務一樣;分布式意味着可以采用更多的普通計算機(相對于昂貴的大型機)組成分布式叢集對外服務;計算機越多,cpu、記憶體、存儲資源等也就越多,能夠處理的并發通路量也就越大;

一個标準的分布式系統應該具有以下幾個特征:

(1)分布性:

  分布式系統中的多台計算機之間在空間位置上可以随意分布,系統中的多台計算機之間沒有主、從之分,即沒有控制整個系統的主機,也沒有受控的從機;

(2)透明性:

  系統資源被所有計算機共享。每台計算機的使用者不僅可以使用本機的資源,還可以使用本分布式系統中的其他計算機資源(包括cpu、檔案、列印機等);

(3)同一性:

  系統中的若幹台計算機可以互相協作來完成同一個任務,或者說一個程式可以分布在幾台計算機上并行的運作。

(4)通信性:

  系統中任意兩台計算機都就可以通過通信來交換資訊。

大型網站往往需要處理海量資料,單台計算機往往無法提供足夠的記憶體空間,可以對這些資料進行分布式存儲。

随着計算機的發展,有些應用需要非常巨大的計算能力才能完成。如果采用集中式計算,需要耗費相當長的時間來完成。

分布式計算将該應用分解成許多小的部分,配置設定給多台計算機進行處理;這樣可以節約成體計算時間,大大提高計算效率。

磁盤尋址時間提高速度遠遠小于資料傳輸速率的提高速度(尋址是将磁頭移動到特定硬碟位置進行讀寫操作,這是導緻硬碟操作延遲的主要原因,而傳輸速率取決于硬碟的寬帶)。

對于超大規模資料(以PB=1024TB為機關)必須考慮用其他方式。

關系型資料庫使用B樹結構進行資料的更新查詢操作,對于最大到GB的資料量,一般相對資料量較小,效果很好。但是大資料量時,B樹使用排列/合并方式重建資料庫以便新資料的效率遠遠低于MapReduce。

(1)結構化資料(structured data):

  是具既定格式的實體化資料,如xml文檔或者滿足特定預定義格式格式的資料庫表。這就是RDBMS包括的内容。

(2)半結構化資料(semi-structured data):

  比較松散,雖然可以有格式,但是經常被忽略,是以它隻能作為對的一般指導。如:一張電子表格,其結構是由單元格組成的網格,但單元格自身可以儲存任何形式的資料。

(3)非結構化資料(unstructuresd data):

  沒有什麼特别的内部結構,如純文字或者圖像資料。

關系型資料庫使用的是結構化資料,在資料庫階段按具體類型處理資料。關系型資料庫的規範非常重要,保持資料的完整性和一緻性。

程式員需要編寫map函數和reduce函數。每個函數定義從一個鍵值對集合到另一個鍵值對集合的映射。

Hadoop:相關概念
Hadoop:相關概念

map函數:接受一個鍵值對(Key-Value pair),會産生一組中間鍵值對。MapReduce架構會将Map函數産生的中間鍵值對裡鍵相同的值傳遞給一個reduce函數。

reduce函數:接受一個鍵,以及相關的一組值,将這一組值進行合并産生一組規模更小的值(通常隻有一個或者零個值)。

HDFS采用master/slave架構。

Hadoop:相關概念

放伺服器的機架。

一個Block的副本會儲存到兩個或者兩個以上的機架上的伺服器中,這樣能防災容錯,因為一個機架出現掉電,交換機挂掉的幾率還是很高的。

Linux中每個磁盤有預設的資料塊大小,這是對磁盤操作的最小機關,通常512位元組。HDFS同樣有塊(Block)的概念,預設64MB/128MB,比磁盤塊大得多。

與單一的檔案系統類似,HDFS的檔案系統也被劃分成多個分塊(Chunk)作為獨立的存儲單元。

一個hadoop檔案就是由一系列的分散在不同的DataNode的block組成。

HDFS預設的Block為64MB/128MB?

塊相對較大,主要把尋道時間最小化。如果一個塊足夠大,從硬碟傳輸資料的時間将遠遠大于尋找塊起始位置的時間。這樣使得HDFS的資料塊速度和硬碟的傳輸速度更加接近。

NmaeNode的作用是管理檔案目錄的結構,接受使用者的操作請求,是管理資料節點,是一個jetty伺服器。

名位元組點維護兩套資料,一套是檔案目錄與資料塊之間的關系,另一套是資料塊與節點之間的關系。

前一套資料是靜态的,是存放在磁盤上,通過fsimage和edits檔案來維護;後一套資料是動态的,不持久放到磁盤的,每當叢集啟動的時候,會自動建立這些資訊,是以一般放在記憶體中。

NameNode保護檔案metadata資訊包括:

(1)檔案owership和permission

(2)檔案包含哪些塊

(3)Block儲存在哪個DataNode(由DataNode啟動時上報)

例如一個metadata

NameNode的metadata的資訊在啟動後會加載到記憶體中。

檔案包含:

(1)fsimage(檔案系統鏡像):中繼資料鏡像檔案。存儲某一時段NameNode記憶體中繼資料資訊。

(2)edits:記錄檔檔案。

(3)fstime:儲存最近一次checkpoint的時間。

NameNode決定是否将檔案映射到DataNode的複制塊上:多副本,預設三個。第一個複制塊存儲在同一機架的不同節點上,最後一個複制塊存儲到不同機架的某個節點上。

DataNode的作用是HDFS中真正存儲資料的。

DataNode的作用:

(1)儲存Block,每個塊對應的一個中繼資料資訊檔案。這個檔案主要描述這個塊屬于哪個檔案,第幾個塊的資訊。

(2)啟動DataNode線程的時候會向NameNode回報Block資訊。

(3)通過向NameNode發送心跳保持與其聯系(3秒一次),如果NameNode十分鐘沒有收到DataNode的心跳,認為其已經lost,并将其上的Block複制到其他的DataNode。

假設檔案大小是100GB,從位元組位置0開始,每64MB位元組劃分為一個block,以此類推,可以劃分出很多的block,每個block的大小就是64MB。block是hdfs讀寫資料的基本機關。

Secondary NameNode是一個用來監控HDFS狀态的輔助背景程式。

定期的将Namespace鏡像與記錄檔檔案(edit log)合并,以防止記錄檔檔案(edit log)變得過大,能減少NameNode啟動時間。

它不是NameNode的熱備份,可以作為一個冷備份:

(1)将本地儲存的fsimage導入;

(2)修改cluster的所有DataNode的NameNode位址;

(3)修改所有client端的NameNode位址;

(4)或者修改Sencondary NameNode IP為NameNode IP;

NameNode的工作原理:

Hadoop:相關概念
Hadoop:相關概念
Hadoop:相關概念

Hadoop在建立新檔案時是如何選擇block位置?

綜合來說,要考慮以下因素:帶寬(包括寫帶寬和讀帶寬)和資料安全性。如果我們把三個備份全部放在一個datanode上,雖然可以避免了寫帶寬的消耗,但幾乎沒有提供資料備援帶來的安全性,因為如果這個datanode當機,那麼這個檔案的所有資料就全部丢失了。另一個極端情況是,如果把三個備援備份全部放在不同的機架,甚至資料中心裡面,雖然這樣資料會安全,但寫資料會消耗很多的帶寬。Hadoop 0.17.0給我們提供了一個預設replica配置設定政策(Hadoop 1.X以後允許replica政策是可插拔的,也就是你可以自己制定自己需要的replica配置設定政策)。replica的預設配置設定政策是把第一個備份放在與用戶端相同的datanode上(如果用戶端在叢集外運作,就随機選取一個datanode來存放第一個replica),第二個replica放在與第一個replica不同機架的一個随機datanode上,第三個replica放在與第二個replica相同機架的随機datanode上。如果replica數大于三,則随後的replica在叢集中随機存放,Hadoop會盡量避免過多的replica存放在同一個機架上。

在分布式檔案系統自動的時候,開始時會有安全模式,當分布式檔案系統處于安全模式的情況下,檔案系統中不允許有上傳,修改,删除等寫操作,隻能讀,直到安全模式結束。

(1)namenode啟動的時候,首先将映像檔案(fsimage)載入記憶體,并執行編輯日志(edits)中的各項操作;

(2)一旦在記憶體中成功建立檔案系統中繼資料的映射,則建立一個新的fsimage檔案(這個操作不要SecondaryNameNode)和一個空的日志edits檔案;

(3)NameNode開始監聽RPC和HTTP請求;

(4)此刻namenode運作在安全模式,即namenode的檔案系統對于用戶端來說是隻讀的。(可以顯示目錄,顯示檔案内容等;寫,删除,重命名等操作都會失敗);

(5)系統中的資料塊的位置不是有namenode維護的,而是以塊清單的形式存儲在datanode中(datanode啟動彙報的);

(6)在系統的正常操作期間,namenode會在記憶體中保留所有塊位置的映射資訊;

(7)在安全模式下,各個datanode會向namenode發送塊清單的最新情況;

(8)進入和離開安全模式;

檢視namenode處于哪個狀态:

進入安全模式(hadoop啟動的時候是在安全模式):

離開安全模式:

同其他RPC架構一樣,Hadoop RPC分為四個部分:

(1)序列化層:Client與Server端通信傳遞的資訊采用了Hadoop裡提供的序列化類或自定義的Writable類型;

(2)函數調用層:Hadoop RPC通過動态代理以及java反射實作函數調用;

(3)網絡傳輸層:Hadoop RPC采用了基于TCP/IP的socket機制;

(4)伺服器端架構層:RPC Server利用java NIO以及采用了事件驅動的I/O模型,提高RPC Server的并發處理能力;

上一篇: kylin3

繼續閱讀