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