Hadoop如何處理?如何增強Hadoop 安全?
HDFS是Hadoop Distributed File System系統的縮寫,是一個使用JAVA語言實現的、分散式的、可擴展的文件系統,它存儲 Hadoop 集群中所有存儲節點上的文件,由NameNode和DataNode兩部分組成。HDFS的上一層是 MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成,用來對存儲在HDFS上的數據進行計算分析。下面來具體介紹HDFS和MapReduce的工作原理及應用。
###HDFSHDFS採用master/slave架構。一個HDFS集群是由一個Namenode和一定數目的Datanodes組成。Namenode是一個中心伺服器,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。集群中的Datanode是集群中的數據節點,用來存儲實際的數據,並負責管理它所在節點上的數據存儲。HDFS公開了文件系統的名字空間,用戶能夠以文件的形式在上面存儲數據。從內部看,一個文件被分成一個或多個數據塊,這些塊存儲在一組Datanode上。Namenode執行文件系統的名字空間操作,比如打開、關閉、重命名文件或目錄。它也負責確定數據塊到具體Datanode節點的映射。Datanode負責處理文件系統客戶端的讀寫請求。在Namenode的統一調度下進行數據塊的創建、刪除和複製,下面就具體來闡述HDFS系統中涉及的基本概念;- 數據塊(Block) HDFS和傳統的分散式文件系統一樣,也採用了數據塊的概念,將數據分割成固定大小的數據塊進行存儲,默認大小為64MB,塊的大小可針對每個文件配置,由客戶端任意指定,並且每個塊都有屬於自己的全局ID,作為一個獨立的單位存儲在集群伺服器上。與傳統分散式文件系統不同的是,如果實際數據沒有達到塊大小時,則並不實際佔用磁碟空間。- HDFS元數據 HDFS元數據由文件系統目錄樹信息、文件和數據塊的對應關係和塊的存放位置三個部分組成,文件系統目錄樹信息包括文件名、目錄名及文件和目錄的從屬關係,文件和目錄的大小,創建及最後訪問時間。文件和塊的對應關係記錄了文件由哪些塊組成。此外元數據還記錄了塊的存放位置,包括存放塊的機器名和塊ID。
- NameNode HDFS對元數據和實際數據採取分別存儲的方式,元數據存儲在一台指定的伺服器上,稱為NameNode,實際數據則存儲在集群中的其他機器上的文件系統中,稱為DataNode。NameNode是用來管理文件系統命名空間的組件,並且一個HDFS集群只有一台NameNode,由於元數據存儲在NameNode上,當NameNode出現故障時將導致整個集群無法工作。元數據保存在NameNode的內存當中,以便快速查詢,1G內存大致可以存放1000000個塊對應的元數據信息。- DataNode DataNode用來存儲塊的實際數據,每個塊會在本地文件系統產生兩個文件,一個是實際的數據文件,另一個是塊的附加信息文件,其中包括數據的校驗和生成時間等信息。DataNode通過心跳包(Heartbeat)與NameNode通信,當客戶端讀取/寫入數據的時候將直接與DataNode進行通信。- Secondary NameNode Secondary NameNode在Hadoop集群中起到至關重要的作用,首先需要明確它並不是NameNode的備份節點,它和NameNode運行在不同的主機上,它主要的工作是階段性地合併NameNode的日誌文件,控制NameNode日誌文件的大小。此外,在NameNode硬碟損壞的情況下,Secondary NameNode也可用作數據恢復,但恢復的只是部分數據。###HDFS架構及工作原理下圖為HDFS對數據存儲的原理圖,NameNode存儲了DataNode節點所存儲數據的元數據,即Hdfs和MapReduce兩個文件的分塊信息,假設單個文件的存儲份數為3,即每個數據塊有三份備份,那麼數據在DataNode上的存儲的原則為:相同的兩個數據塊存儲在同一機架的不同的DataNode節點上;第三個數據塊存儲在不同機架上的DataNode節點上。這樣就解決了當某個DataNode節點出現故障的時候數據丟失的問題,保障了存儲在HDFS系統上數據的可用性。
![](http://a.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=1072289f963df8dca6688795f8215ebd/7dd98d1001e939014182ab5672ec54e737d196d1.jpg)###Hadoop MapReduceMapReduce是Google公司的核心計算模型,它將運行於大規模集群上的複雜的並行計算過程高度地抽象為兩個函數:Map和Reduce。MapReduce也可以看成是一種解決問題的方法,它把一個複雜的任務分解成多個任務,Map負責把任務分解成多個任務,Reduce負責把分解後多任務處理的結果匯總起來。Hadoop中的MapReduce是一個簡易的軟體框架,基於它寫出來的應用程序能夠運行在由上千台機器組成的大型集群上,並以一種可靠容錯的方式並行處理TB級別的數據集,實現了Hadoop在集群上的數據和任務的並行計算與處理。在並行計算中其他的種種複雜的問題,如分散式存儲、工作調度、負載均衡、容錯處理、網路通信等均由MapReduce框架負責處理,編程人員可以不用關心。用MapReduce來處理的數據集必須具備這樣的特點:待處理的數據集可以分解成許多小的數據集,並且每個小的數據集都可以完全並行地進行處理。###Hadoop MapReduce實現
Hadoop MapReduce是基於HDFS的MapReduce編程框架實現的,我們把MapReduce處理的問題稱為作業 (Job),並將作業分解為任務 (Task),在MapReduce執行過程中需要有兩種任務。- Map 把輸入的鍵/值對轉換成一組中間結果的鍵/值對.- Reduce 把Map任務產生的一組具有相同鍵的中間結果根據邏輯轉換生成較小的最終結果。###Hadoop MapReduce的服務進程
Hadoop MapReduce有兩個主要的服務進程,一個是單獨運行在主節點上的JobTracker進程,另一個是運行在每個集群從節點上的TaskTracker進程。服務進程部署如下圖所示。![](http://h.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=5678a1efd9a20cf446c5f6db43396700/10dfa9ec8a1363276d2ae45b988fa0ec09fac796.jpg)JobTraker和NameNode運行在同一個伺服器上,我們稱為Hadoop集群的主節點,負責接收客戶端提交的作業,並將任務分配到不同的計算節點TaskTracker上,同時監控作業的運行情況,完成作業的更新和容錯處理;Tasktracker通常和DataNode裝在一起,稱為Hadoop集群的從節點,它調用Map和Reduce執行JobTracker指派的任務,並發送心跳消息給JobTracker,向JobTracker彙報可運行任務的數量。##Hadoop安全機制Hadoop 一直缺乏安全機制,主要表現在以下幾個方面。- User to Service:NameNode或者JobTracker缺乏安全認證機制;DataNode缺乏安全授權機制;JobTracker缺乏安全授權機制。- Service to Service安全認證:Datanode與TaskTracker缺乏安全授權機制,這使得用戶可以隨意啟動假的DataNode和TaskTracker。- 磁碟或者通信連接沒有經過加密。為了增強Hadoop的安全機制, 從2009年起Apache專門抽出一個團隊為Hadoop增加安全認證和授權機制,Apache Hadoop 1.0.0版本之後的版本添加了安全機制,但是升級到該版本後可能會導致Hadoop的一些應用不可用。推薦閱讀:
※又一國家級!浪潮獲評大數據應用領域首個國家專業化眾創空間
※iCloud雲上貴州,2018數博會連接2億多用戶
※美國現代藝術博物館的軟數據:111件服裝展品的前世今生
※大數據的價值,在「用」不在「大」
※為互聯網金融加把鎖?天元數據網用實力說話!