1. 程式人生 > >hadoop 各種概念整理

hadoop 各種概念整理

保存文件 replica 基本 linux中 最小 朋友 字節 並發訪問 尋址

Hadoop

Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。

Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,則MapReduce為海量的數據提供了計算。

Hadoop解決哪些問題?

  • 海量數據需要及時分析和處理

  • 海量數據需要深入分析和挖掘

  • 數據需要長期保存

海量數據存儲的問題:

  • 磁盤IO稱為一種瓶頸,而非CPU資源

  • 網絡帶寬是一種稀缺資源

  • 硬件故障成為影響穩定的一大因素

Hadoop 相關技術

Hbase

  • Nosql數據庫,Key-Value存儲
  • 最大化利用內存

HDFS

  • hadoop distribute file system(分布式文件系統)
  • 最大化利用磁盤

MapReduce

  • 編程模型,主要用來做數據分析
  • 最大化利用CPU

集中式系統

集中式系統用一句話概括就是:一個主機帶多個終端。終端沒有數據處理能力,僅負責數據的錄入和輸出。而運算、存儲等全部在主機上進行。現在的銀行系統,大部分都是這種集中式的系統,此外,在大型企業、科研單位、軍隊、政府等也有分布。集中式系統,主要流行於上個世紀。

集中式系統的最大的特點就是部署結構非常簡單,底層一般采用從IBM、HP等廠商購買到的昂貴的大型主機。因此無需考慮如何對服務進行多節點的部署,也就不用考慮各節點之間的分布式協作問題。但是,由於采用單機部署。很可能帶來系統大而復雜、難於維護、發生單點故障(單個點發生故障的時候會波及到整個系統或者網絡,從而導致整個系統或者網絡的癱瘓)、擴展性差等問題。

分布式系統(distributed system)

一群獨立計算機集合共同對外提供服務,但是對於系統的用戶來說,就像是一臺計算機在提供服務一樣。分布式意味著可以采用更多的普通計算機(相對於昂貴的大型機)組成分布式集群對外提供服務。計算機越多,CPU、內存、存儲資源等也就越多,能夠處理的並發訪問量也就越大。

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

  • 分布性

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

  • 透明性

系統資源被所有計算機共享。每臺計算機的用戶不僅可以使用本機的資源,還可以使用本分布式系統中其他計算機的資源(包括CPU、文件、打印機等)。

  • 同一性

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

  • 通信性

系統中任意兩臺計算機都可以通過通信來交換信息。

分布式數據和存儲

大型網站常常需要處理海量數據,單臺計算機往往無法提供足夠的內存空間,可以對這些數據進行分布式存儲。

分布式計算

隨著計算技術的發展,有些應用需要非常巨大的計算能力才能完成,如果采用集中式計算,需要耗費相當長的時間來完成。分布式計算將該應用分解成許多小的部分,分配給多臺計算機進行處理。這樣可以節約整體計算時間,大大提高計算效率。

關系型數據庫, MapReduce (大規模數據批量分析)

數據訪問效率

磁盤尋址時間提高速度遠遠小於數據傳輸速率提高速度(尋址是將磁頭移動到特定硬盤位置進行讀寫操作,這是導致硬盤操作延遲的主要原因,而傳輸速率取決於硬盤的帶寬)。對於超大規模數據(以PB為單位)必須考慮使用其他方式。關系型數據庫使用B樹結構進行數據的更新查詢操作,對於最大到GB的數據量,一般相對數據量較小,效果很好。但是大數據量時,B樹使用排序/合並方式重建數據庫以更新數據的效率遠遠低於MapReduce。

數據結構不同

  • 結構化數據

(structured data):是具體既定格式的實體化數據,如XML文檔或滿足特定預定義格式的數據庫表。這是RDBMS包括的內容。
半結構化數據

  • 半結構化數據

(semi-structured data):比較松散,雖然可能有格式,但是經常被忽略,所以他只能作為對的一般指導。如:一張電子表格,其結構是由單元格組成的網格,但是每個單元格自身可保存任何形式的數據。
非結構化數據

  • 非結構化數據
    (unstructured data):沒有什麽特別的內部結構,如純文本或圖像數據。

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

MapReduce 線性,可伸縮性編程

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

MapReduce 工作原理

技術分享圖片
技術分享圖片

技術分享圖片
技術分享圖片

 map函數:接受一個鍵值對(key-value pair),產生一組中間鍵值對。MapReduce框架會將map函數產生的中間鍵值對裏鍵相同的值傳遞給一個reduce函數。

  reduce函數:接受一個鍵,以及相關的一組值,將這組值進行合並產生一組規模更小的值(通常只有一個或零個值)。

HDFS

HDFS采用master/slave架構
技術分享圖片
技術分享圖片

rack

放服務器的支架。

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

數據塊

linux中每個磁盤有默認的數據塊大小,這是對磁盤操作的最小單位,通常512字節。HDFS同樣也有塊(Block)的概念,默認64MB/128MB,比磁盤塊大得多。與單一的文件系統類似,HDFS上的文件系統也被劃分成多個分塊(Chunk)作為獨立的存儲單元。

一個hadoop文件就是由一系列分散在不同的DataNode上的block組成。

HDFS默認的Block為64MB/128MB?

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

NameNode 元數據節點

NameNode的作用是管理文件目錄結構,接受用戶的操作請求,是管理數據節點的,是一個jetty服務器。名字節點維護兩套數據, 一套是文件目錄與數據塊之間的關系 , 另一套是數據塊與節點之間的關系 。 前一套 數據是 靜態的 ,是存放在磁盤上的, 通過fsimage和edits文件來維護 ; 後一套 數據是 動態的 ,不持久放到到磁盤的,每當集群啟動的時候,會自動建立這些信息,所以一般都放在內存中。

NameNode保存文件metadata信息,包括:

  • 文件owership和permissions

  • 文件包含哪些塊

  • Block保存在哪個DateNode(由DataNode啟動時上報給)

例如一個Metadata

  1. file.txt
  2. Blk A:
  3. DN1,DN5,DN6
  4. Blk B:
  5. DN7,DN1,DN2
  6. Blk C:
  7. DN5,DN8,DN9

NameNode的metadata信息在啟動後會加載到內存中

文件包括:

① fsimage (文件系統鏡像):元數據鏡像文件。存儲某一時段NameNode內存元數據信息。

② edits: 操作日誌文件。

③ fstime: 保存最近一次checkpoint的時間

NameNode決定是否將文件映射到DataNode的復制塊上:多副本,默認三個,第一個復制塊存儲在同一機架的不同節點上,最後一個復制塊存儲到不同機架的某個節點上。

技術分享圖片
技術分享圖片

技術分享圖片
技術分享圖片

轉自:http://www.cnblogs.com/gisorange/p/4328859.html

DataNode

DataNode的作用是HDFS中真正存儲數據的。

DataNode的作用:

  • 保存Block,每個塊對應一個元數據信息文件。這個文件主要描述這個塊屬於哪個文件,第幾個塊等信息。

  • 啟動DataNode線程的時候會向NameNode匯報Block信息

  • 通過向NameNode發送心跳保持與其聯系(3秒一次),如果NameNode 10分鐘沒有收到DataNode的心跳,認為其已經lost,並將其上的Block復制到其它的DataNode.

假設文件大小是100GB,從字節位置0開始,每64MB字節劃分為一個block,依此類推,可以劃分出很多的block。每個block就是64MB大小。block是hdfs讀寫數據的基本單位。

Secondary NameNode(輔助元數據信息)

Secondary NameNode是一個用來監控HDFS狀態的輔助後臺程序。定期的將Namespace鏡像與操作日誌文件(edit log)合並,以防止操作日誌文件(edit log)變得過大;能減少NameNode啟動時間。

它不是NameNode的熱備份,可以作為一個冷備份
* 將本地保存的fsimage導入
* 修改cluster的所有DataNode的NameNode地址
* 修改所有client端的NameNode地址
* 或者修改Secondary NameNode IP為 NameNode IP

技術分享圖片
技術分享圖片

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存放在同一個機架上。

轉自:http://www.cnblogs.com/beanmoon/archive/2012/12/17/2821548.html

NameNode 安全模式

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

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 dfsadmin -sagemode get

進入安全模式(hadoop啟動的時候是在安全模式)
hadoop dfsadmin -sagemode enter

離開安全模式
hadoop dfsadmin -sagemode leave

Hadoop中的RPC機制

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

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

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

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

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

技術分享圖片

感謝您的關註!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群進群密碼:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,備註:“xttblog”,添加助理微信拉你進群。備註錯誤不會同意好友申請。再次感謝您的關註!後續有精彩內容會第一時間發給您!原創文章投稿請發送至[email protected]郵箱。商務合作可添加助理微信進行溝通!

hadoop 各種概念整理