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