hadoop 各種概念整理
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
- file.txt
- Blk A:
- DN1,DN5,DN6
- Blk B:
- DN7,DN1,DN2
- Blk C:
- 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 各種概念整理