引言
最知名的云計算開源系統Hadoop模仿和實現了Google云計算的主要功能。隨著云計算的逐漸流行,這一項目被越來越多的個人和企業所運用。HDFS、MapReduce和HBase為Hadoop的核心,它們對應了Google云計算最核心技術GFS、MapRe-duce和Bigtable的開源實現。
主節點包括NameNode、SecondaryNameNode和Jobtracker守護進程(即所謂的主守護進程),其余是為演示管理集群所用的節點(使用Hadoop實用程序和瀏覽器)。從節點包括DataNode和Tasktracker(從屬守護進程)。兩種設置的不同之處在于:主節點包括提供Hadoop集群管理和協調的守護進程,而從節點包括實現Hadoop文件系統。
目前此項目正在進行中,雖然現在還沒有到達1.0版本,和Google系統還有很大差距,但是前景非常好,值得關注。
1 HDFS
當一個數據集容量超過一個獨立物理機的存儲能力時,把數據集通過大量的機器進行分布是十分必要的。文件系統稱做分布式文件系統,它跨網絡進行存儲管理。因為是基于網絡的,所以會帶來很多復雜的網絡編程問題。這使得分布式文件系統比起常規的文件系統要復雜得多。例如,其中一個重要的挑戰就是文件系統容忍節點錯誤的同時不丟失數據。
Hadoop有一個稱為HDFS (hadoop distributedfilesystem)的分布式文件系統,它是Hadoop的期間文件系統。
1.1設計前提與目標
HDFS的設計前提與目標如下:
(1)硬件錯誤可能經常出現,其屬于常態并非異常。HDFS允許硬件出故障,HDFS的最核心設計目標就是錯誤檢測并快速自動恢復。
(2)流式數據訪問。流式讀為主HDFS上的應用的主要處理方式。支持批量處理,高吞吐量是數據訪問的關注重點。
(3)超大規模數據集。TB級或者PB級是HDFS的一般企業級的文件規模。HDFS支持大文件存儲,提高數據傳輸帶寬。單一的HDFS實例可以支撐數以千萬計的文件,而且可以在一個集群中擴展到幾百個節點。
(4)簡單一致性模型。對文件實行一次性寫、多次讀的訪問模式,是HDFS的應用程序常用的處理方式。文件建立之后,數據寫入完成之后就不再做更改。解決了數據一致性問題,吞吐量問題也得以解決。
(5)移動計算比移動數據更簡單。移動數據比移動計算在大文件上來的代價更高。操作海量數據的時候效果愈加明顯,這樣可以提高系統的吞吐量和減少網絡的擁塞。
(6)異構軟硬件平臺間的可移植性。可移植性使得HDFS可以作為適應性很強的大規模數據應用平臺。
1.2體系結構
HDFS是一個管理者一工作者結構的體系。HDFS集群由一個NameNode(管理者)和一些DataNode(工作者)組成。NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端通過NameNode和DataNode交互訪問這個文件系統。客戶端聯系NameNode以獲取文件的元數據,而真正的文件I/O操作是直接和DataNode進行交互的。
NameNode維護文件系統樹和這個樹中所有的文件和目錄。NameNode也記錄著每個文件的每個DataNode塊所在的位置,然而,它并不永久性地存儲塊的位置信息。因為在系統重啟時,這些信息會由DataNode重新建立。
DataNode是分布式文件系統的工作者,負責它們所在的物理節點上的存儲管理。這些節點在客戶端或者NameNode需要時起到存儲和檢索的作用,并且把它們存儲的塊的信息通過塊清單的方式周期性地回饋給NameNode。
圖一是HDFS的結構示意圖。例如客戶端要訪問一個文件,客戶端從NameNode獲得組成文件的數據塊的位置列表,也就是要知道數據塊被存儲在哪些DataNode上;然后,客戶端直接從DataNode上讀取文件數據。NameNode不參與文件的傳輸。
圖一HDFS的結構示意圖
1.3保障可靠性的措施
HDFS的主要設計目標之一就是在故障情況下也能保證數據存儲的可靠性。HDFS具備了較為完善的冗余備份和故障恢復機制,可以實現將海量文件存儲在集群中,并保證其可靠性。
(1)冗余備份。HDFS將文件按數據塊(Block)存儲,默認塊大小為64MB(可配置),并采取了一系列的容錯處理。
(2)副本存放。通常情況下,副本的存放策略很關鍵,機架內節點之間的帶寬比跨機架節點之間的帶寬要大。它能影響HDFS的可靠性和性能。圖三體現了復制因子為3的情況下,各數據塊的分布情況。
(3)心跳檢測。集群中的每個DataNode周期性地向NameNode發送心跳包和塊報告。如果正確接收到心跳包,則證明該DataNode工作沒有異常。
(4)安全模式。啟動系統時,NameNode首先進入一個安全模式。此時不會出現數據塊的寫操作。NameNode會收到各個DataNode擁有的數據塊列表對它的數據塊報告,所有的數據塊信息被NameNode獲取。
圖二復制因子為3時數據塊分布情況圖
(5)數據完整性檢測。多種原因會造成從DataNode獲取的數據塊有可能是損壞的。對文件內容的校驗和檢查,由HDFS客戶端軟件完成。如果校驗出異常,客戶端就會認為數據塊有損壞,將從其他DataNode取得該數據分塊的副本。
(6)空間回收。主要處理被刪除文件的臨時存放問題,保證其在一定的時間內還可以被恢復,超過時限,則釋放相應數據塊。
(7)元數據磁盤失效。HDFS的核心數據結構是映像文件和事務日志。假如這些文件遭到損壞,HDFS將會變得不可用。當NameNode重新啟動的時候,總是選擇最新的一致的映像文件和事務日志。在HDFS集群中NameNode是單點存在的,如果它出現故障,必須手動干預。目前,還不支持自動重啟或者切換到另外的NameNode。
(8)快照。快照支持對某個時間數據的復制,可以在HDFS數據被損壞時,利用回滾處理回到過去一個已知正確的時間點。但是目前HDFS不支持快照功能。
2 MapReduce
Google的MapReduce編程模型可以通過Hadoop實現。Hadoop的核心是MapReduce.而MapReduce實際上是一種分布式計算模型。MapReduce是開源平臺,所有用戶都可以免費使用這個框架并進行并行編程。使用該模型,分布式并行程序的編寫變得非常簡單。
Hadoop Map/Reduce框架是一個主/從架構。它包括一個Jobtracker和若干Tasktracker(集群中每個節點都有一個Tasktracker)。Jobtracker是用戶和MapReduce框架之間的交互點。Tasktracker按照Jobtracker的指令執行任務并處理map階段到re-duce階段的數據轉移。
MapReduce作業(Job)是客戶端執行的單位,它包括了輸入數據、MapReduce程序和配置信息。Hadoop通過把一個作業分成若干個小任務(Task)來處理,其包括兩種類型的任務:Map任務和Reduce任務。有兩種類型的節點控制著作業執行過程:Jobtracker和多個Tasktracker。Jobtracker通過調度任務在Tasktracker上運行,來協調所有運行在系統上的作業。Tasktracker運行任務的同時,把進度報告傳送到Jobtracker,Jobtracker則記錄著每項任務的整體進展情況。如果其中一個任務失敗,Jobtracker可以重新調度任務到另外一個Tasktracker。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:Hadoop的核心技術研究或概述