畢 業(yè) 設(shè) 計(jì) 論 文
題目: 基于HDFS的云災(zāi)備存儲(chǔ)系統(tǒng)——可靠存儲(chǔ)及負(fù)載均衡方法研究
院(系) 計(jì)算機(jī)科學(xué)與技術(shù)
專 業(yè) 網(wǎng)絡(luò)工程
屆 別 2012
摘 要
隨著計(jì)算機(jī)技術(shù)及因特網(wǎng)技術(shù)的發(fā)展,數(shù)據(jù)信息已成為現(xiàn)代企業(yè)以及每個(gè)人的重要資源,數(shù)據(jù)的丟失或被竊取將帶來重大的損失,數(shù)據(jù)的安全存儲(chǔ)及備份顯得尤為重要。本文設(shè)計(jì)一個(gè)基于Hadoop的云災(zāi)備存儲(chǔ)系統(tǒng)來存儲(chǔ)數(shù)據(jù)。
論文采用在Linu*虛擬機(jī)上創(chuàng)建hadoop分布式文件系統(tǒng),由分布式系統(tǒng)管理并備份用戶的數(shù)據(jù)。分布式系統(tǒng)由一個(gè)名字節(jié)點(diǎn)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)構(gòu)成,名字節(jié)點(diǎn)對(duì)數(shù)據(jù)的存儲(chǔ)進(jìn)行管理,而數(shù)據(jù)節(jié)點(diǎn)則負(fù)責(zé)數(shù)據(jù)的物理存儲(chǔ)。為了防止名字節(jié)點(diǎn)的故障導(dǎo)致系統(tǒng)的崩潰,必須配置一個(gè)第二名字節(jié)點(diǎn)來作為冗余并定時(shí)處理保存名字節(jié)點(diǎn)的系統(tǒng)日志。為了數(shù)據(jù)的安全備份,必須把數(shù)據(jù)復(fù)制為多個(gè)副本存儲(chǔ)在多個(gè)數(shù)據(jù)節(jié)點(diǎn)上。系統(tǒng)不僅要實(shí)現(xiàn)海量數(shù)據(jù)的存儲(chǔ),同時(shí)也要實(shí)現(xiàn)海量用戶的的管理。為了防止某個(gè)數(shù)據(jù)節(jié)點(diǎn)的負(fù)載過重,導(dǎo)致用戶的操作延遲太大,還必須處理好系統(tǒng)數(shù)據(jù)節(jié)點(diǎn)的負(fù)載均衡,使海量用戶能夠同時(shí)流暢的訪問hdfs系統(tǒng)。
本文,通過配置多臺(tái)數(shù)據(jù)節(jié)點(diǎn),并在名字節(jié)點(diǎn)上設(shè)置一個(gè)文件要保存的副本數(shù),來實(shí)現(xiàn)數(shù)據(jù)的安全備份,用戶數(shù)據(jù)分為多份存儲(chǔ)在不同的服務(wù)器上。名字節(jié)點(diǎn)則通過一張排序表來控制用戶訪問數(shù)據(jù)時(shí)是由哪個(gè)數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)響應(yīng),排序表實(shí)現(xiàn)了負(fù)載低的數(shù)據(jù)節(jié)點(diǎn)首先響應(yīng)用戶的訪問,從而達(dá)到各數(shù)據(jù)節(jié)點(diǎn)的負(fù)載均衡。
關(guān)鍵詞:Hadoop;云災(zāi)備;可靠存儲(chǔ);負(fù)載均衡
ABSTRACT
With the development of computer technology and Internet technology, information has become a modern enterprise as well as important resources for everyone.So data’s lost or stolen will bring a significant loss. Secure storage and backup of data is particularly important. This paper designed a cloud disaster recovery storage system witch based on Hadoop to store data.
Paper using the Linu* virtual machine to create a hadoop distributed file system, distributed systems management and backup the user’s data. The distributed system consists of a namenode and multiple datanodes, the namenode manage the data’s storage.And the datanode is responsible for the physical storage of data. In order to prevent the namenode’failured led to the collapse of the system, we should configure a secondary namenode as the namenode’s redundancy and regularly deal with save system log. For the security of data backup, data replication for the storage of multiple copies of multiple datanodes. The system must not only mass data storage, but also mass user’s management. In order to prevent the overloading of a datanode, which lead to the delay become too large for users operation, we must deal with the datanodes’ load balancing, so that the mass users’ access will be simultaneously smooth.
The article, by configuring multiple datanodes and set the number of copiesf to save for each file on the namenode to achieve the security of data backup, user data is divided into pay would be stored on different servers. The namenode control witch datanode for user’s access through a sorting table .This sorting table is used to achieve the low-loaded datanode first to respond to user access, so as to achieve load balancing of all datanodes .
Key words
……(新文秘網(wǎng)http://m.jey722.cn省略3883字,正式會(huì)員可完整閱讀)……
失。
第五章:實(shí)現(xiàn)HDFS的負(fù)載均衡。本章主要介紹當(dāng)今應(yīng)用較廣泛的負(fù)載均衡技術(shù),以及負(fù)載均衡的重要性,最后介紹本文是通過何種方法來實(shí)現(xiàn)HDFS的負(fù)載均衡的。
第六章:系統(tǒng)的測(cè)試和評(píng)估。本章主要對(duì)系統(tǒng)實(shí)現(xiàn)的各個(gè)功能進(jìn)行測(cè)試,檢查是否達(dá)到設(shè)計(jì)的需求。最后還將對(duì)測(cè)試結(jié)果進(jìn)行詳細(xì)的分析,指出系統(tǒng)存在的優(yōu)缺點(diǎn)。
第七章:
總結(jié)。本章對(duì)全文的工作進(jìn)行總結(jié),并談?wù)勛约涸诠ぷ髦械闹T多
心得體會(huì),最后還將提出所研發(fā)系統(tǒng)以后的改進(jìn)計(jì)劃。
2 Hadoop的相關(guān)知識(shí)
2.1 數(shù)據(jù)的存儲(chǔ)和分析
現(xiàn)在,不管是企業(yè),行政部門等各個(gè)組織還是個(gè)人,都離不開數(shù)據(jù),數(shù)據(jù)的處理和安全越顯重要,并且各種數(shù)據(jù)的產(chǎn)生量都在急劇增長(zhǎng),面對(duì)如此快速增長(zhǎng)的海量數(shù)據(jù),我們必須尋求一個(gè)便捷的手段和方法來存儲(chǔ)和分析這些數(shù)據(jù)。
硬盤的容量逐年快速增長(zhǎng),然而,硬盤的訪問速度卻未能與時(shí)俱進(jìn)。數(shù)據(jù)的讀寫速度仍不夠快。從一個(gè)驅(qū)動(dòng)器上讀取所有的數(shù)據(jù)需要相當(dāng)長(zhǎng)的時(shí)間,當(dāng)然寫更慢。一個(gè)簡(jiǎn)單的提高讀寫速度的辦法是從多個(gè)硬盤上并行讀寫數(shù)據(jù)。但是這又出現(xiàn)了新的問題。因?yàn)橐环輸?shù)據(jù)分散的存儲(chǔ)在多個(gè)不同的硬盤上,如果有一個(gè)硬盤故障,便會(huì)導(dǎo)致整份數(shù)據(jù)的無法還原。一旦開始使用多個(gè)硬件設(shè)備,其中某個(gè)硬盤出現(xiàn)故障的概率是非常高的。為了避免單個(gè)硬件故障而導(dǎo)致數(shù)據(jù)丟失,常見的做法是冗余備份;通過系統(tǒng)保存的冗余副本,在故障發(fā)生時(shí),就可以使用此副本來確保數(shù)據(jù)的完整。這就是冗余磁盤陣列的工作方式。Hadoop分布式文件系統(tǒng)也是這種工作方式,可以在名字節(jié)點(diǎn)上設(shè)置文件需要保存的副本數(shù),然后存儲(chǔ)到多個(gè)數(shù)據(jù)節(jié)點(diǎn)上以保證存儲(chǔ)的安全可靠。
還有個(gè)問題是在讀取數(shù)據(jù)時(shí),如何保證數(shù)據(jù)的正確性,即讀取的數(shù)據(jù)和保存時(shí)的數(shù)據(jù)是完全一樣的。因?yàn)閿?shù)據(jù)保存在多個(gè)硬盤上,要讀取一個(gè)數(shù)據(jù),必須從多個(gè)硬盤上分別讀取出屬于的數(shù)據(jù)塊,然后再合并成完整的數(shù)據(jù)。在這個(gè)問題上,HDFS客戶端軟件實(shí)現(xiàn)了對(duì)HDFS文件內(nèi)容的校驗(yàn)和檢查。當(dāng)客戶端創(chuàng)建一個(gè)新的HDFS文件,會(huì)計(jì)算這個(gè)文件每個(gè)數(shù)據(jù)塊的校驗(yàn)和,并將校驗(yàn)和作為一個(gè)單獨(dú)的隱藏文件保存在同一個(gè)HDFS名字空間下。當(dāng)客戶端獲取文件內(nèi)容后,它會(huì)檢驗(yàn)從名字節(jié)點(diǎn)獲取的數(shù)據(jù)跟相應(yīng)的校驗(yàn)和文件中的檢驗(yàn)和是否匹配,如果不匹配,客戶端可以選擇從其他的數(shù)據(jù)節(jié)點(diǎn)上獲取該數(shù)據(jù)的副本塊。
總而言之,hadoop提供了一個(gè)穩(wěn)定的共享存儲(chǔ)和分析系統(tǒng)。
2.2 Hadoop的發(fā)展和現(xiàn)狀
Hadoop是Apache Lucene創(chuàng)始人Doug Cutting創(chuàng)建的,Lucene是一個(gè)廣泛使用的文本搜索系統(tǒng)庫。Hadoop起源于Apache Nutch,一個(gè)開源的網(wǎng)絡(luò)搜索引擎, 它本身也是Lucene項(xiàng)目的一部分。
Nutch項(xiàng)目始于2002年,一個(gè)可以運(yùn)行的網(wǎng)頁爬取工具和搜索引擎系統(tǒng)很快"浮出水面"。但后來,開發(fā)者認(rèn)為這一架構(gòu)可擴(kuò)展度不夠,不能解決數(shù)十億網(wǎng)頁的搜索問題。2003年發(fā)表的一篇論文為此提供了幫助,文中描述的是谷歌產(chǎn)品架構(gòu),該架構(gòu)稱為谷歌分布式文件系統(tǒng),簡(jiǎn)稱GFS。 GFS或類似的架構(gòu),可以解決他們?cè)诰W(wǎng)頁爬取和索引過程中產(chǎn)生的超大文件的存儲(chǔ)需求。特別關(guān)鍵的是,GFS能夠節(jié)省系統(tǒng)管理(如管理存儲(chǔ)節(jié)點(diǎn))所花的大量時(shí)間。在2004年,他們開始著手實(shí)現(xiàn)一個(gè)開源的實(shí)現(xiàn),即Nutch的分布式文件系統(tǒng)(NDFS)。
2004年,谷歌發(fā)表論文向全世界介紹他們的MapReduce系統(tǒng)。 2005年初,Nutch的開發(fā)人員在Nutch上實(shí)現(xiàn)了一個(gè)MapReduce系統(tǒng),到年中,Nutch的所有主要算法均完成移植,用MapReduce和NDFS來運(yùn)行。
Nutch的NDFS和MapReduce實(shí)現(xiàn)不只是適用于搜索領(lǐng)域。在2006年2月, 開發(fā)人員將NDFS和MapReduce移出Nutch形成Lucene的一個(gè)子項(xiàng)目,稱為 Hadoop。大約在同一時(shí)間, Doug Cutting加入雅虎,雅虎為此組織了一個(gè)專門的團(tuán)隊(duì)和資源,將Hadoop發(fā)展成一個(gè)能夠處理Web數(shù)據(jù)的系統(tǒng)。在2008年2月,Yahoo!宣布其搜索引擎使用的索引是在一個(gè)擁有1萬個(gè)內(nèi)核的Hadoop 集群上構(gòu)建的。
2008年1月,Hadoop已成為Apache的頂級(jí)項(xiàng)目,證明了它的成功、多樣化、活躍性。到目前為止,除Yahoo!之外,還有很多公司使用了Hadoop,例如Last.fm、 Facebook和《紐約時(shí)報(bào)》等[7]。
2008年4月,Hadoop打破世界紀(jì)錄,成為最快的TB級(jí)數(shù)據(jù)排序系統(tǒng)。通過一個(gè)910節(jié)點(diǎn)的群集,Hadoop在209 秒內(nèi)完成了對(duì)1 TB數(shù)據(jù)的排序,擊敗了前一年的297秒冠軍。同年11月,谷歌在報(bào)告中聲稱,它的MapReduce對(duì)1 TB數(shù)據(jù)排序只用了68秒。
以下是Hadoop大事記[7]:
2004年--由Doug Cutting 和Mike Cafarella實(shí)現(xiàn)了現(xiàn)在HDFS和MapReduce的最初版本。
2005年12月--Nutch移植到新框架,Hadoop在20 個(gè)節(jié)點(diǎn)上穩(wěn)定運(yùn)行。
2006年1月--Doug Cutting加入Yahoo!。
2006年2月--Apache Hadoop項(xiàng)目正式啟動(dòng)以支持MapReduce和HDFS的獨(dú)立發(fā)展。
2006年2月--Yahoo!的網(wǎng)格計(jì)算團(tuán)隊(duì)采用Hadoop。
2006年4月--在188個(gè)節(jié)點(diǎn)上(每個(gè)節(jié)點(diǎn)10 GB)運(yùn)行排序測(cè)試集需要47.9個(gè)小時(shí)。
2006年5月--Yahoo!建立了一個(gè)300個(gè)節(jié)點(diǎn)的Hadoop研究集群。
2006年5月--在500個(gè)節(jié)點(diǎn)上運(yùn)行排序測(cè)試集需要42個(gè)小時(shí)(硬件配置比4月的更好)。
2006年11月--研究集群增加到600個(gè)節(jié)點(diǎn)。
2006年12月--排序測(cè)試集在20個(gè)節(jié)點(diǎn)上運(yùn)行1.8個(gè)小時(shí),100個(gè)節(jié)點(diǎn)上運(yùn)行3.3小時(shí),500個(gè)節(jié)點(diǎn)上運(yùn)行5.2小時(shí),900個(gè)節(jié)點(diǎn)上運(yùn)行7.8個(gè)小時(shí)。
2007年1月--研究集群增加到900個(gè)節(jié)點(diǎn)。
2007年4月--研究集群增加到兩個(gè)1000個(gè)節(jié)點(diǎn)的集群。
2008年4月--在900個(gè)節(jié)點(diǎn)上運(yùn)行1 TB排序測(cè)試集僅需209秒,成為世界最快。
2008年10月--研究集群每天裝載10 TB的數(shù)據(jù)。
2009年3月--17個(gè)集群總共24 000臺(tái)機(jī)器。
2009年4月--贏得每分鐘排序,59 秒內(nèi)排序500 GB(在1400個(gè)節(jié)點(diǎn)上)和173分鐘內(nèi)排序100 TB 數(shù)據(jù)(在3400個(gè)節(jié)點(diǎn)上)。
可見,hadoop自發(fā)展以為以極快的速度在系統(tǒng)冗余節(jié)點(diǎn)數(shù)上,在海量數(shù)據(jù)的存儲(chǔ)量上以及數(shù)據(jù)的存取速度上都有了急速的增長(zhǎng)。越發(fā)體現(xiàn)出hadoop分布式文件系統(tǒng)的優(yōu)越性和潛在性能。
2.3 Hadoop在數(shù)據(jù)容災(zāi)的優(yōu)越性
Hadoop 是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,它在數(shù)據(jù)容災(zāi)方面的優(yōu)越性主要體現(xiàn)在Hadoop 它是以一種可靠、高效、可伸縮的方式進(jìn)行處理的。
1) Hadoop是可靠的,因?yàn)樗僭O(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。而且副本數(shù)可以通過配置來自己改變,這樣對(duì)于集中存儲(chǔ)具有高度重要性的文件系統(tǒng),可以配置更多的副本數(shù)以確保更大的安全性。
2) Hadoop 是高效的,因?yàn)樗圆⑿械姆绞焦ぷ,通過并行處理加快處理速度。運(yùn)行在HDFS上的應(yīng)用和普通的應(yīng)用不同,需要流式訪問它們的數(shù)據(jù)集。HDFS的設(shè)計(jì)中更多的考慮了數(shù)據(jù)批處理,而不是用戶交互處理。比數(shù)據(jù)訪問的低延遲問題,更關(guān)鍵的在于數(shù)據(jù)訪問的高吞吐量。而且HDFS為應(yīng)用數(shù)據(jù)的計(jì)算提供了將它們自己移動(dòng)到數(shù)據(jù)附近的接口。一個(gè)應(yīng)用請(qǐng)求的計(jì)算,離它的數(shù)據(jù)越近就越高效,在海量數(shù)據(jù)的處理面前更是如此,把計(jì)算移到數(shù)據(jù)附近,再把計(jì)算結(jié)果返回給用戶,相對(duì)與傳輸用戶需要的大量數(shù)據(jù)給用戶再進(jìn)行運(yùn)算,要高效非常多。這樣就能降低網(wǎng)絡(luò)阻塞的影響,提高系統(tǒng)數(shù)據(jù)的高吞吐量。
3) Hadoop 還是可伸縮的,能夠處理 PB 級(jí)數(shù)據(jù)。HDFS上的一個(gè)典型文件大小一般都在G字節(jié)至T字節(jié)。因此,HDFS被調(diào)節(jié)以支持大文件存儲(chǔ)。它應(yīng)該能提供整體上高的數(shù)據(jù)傳輸帶寬,能在一個(gè)集群里擴(kuò)展到數(shù)百個(gè)節(jié)點(diǎn)。
4) Hadoop 依賴于社區(qū)服務(wù)器,因此它的成本比較低,任何人都可以使用。而且HDFS被設(shè)計(jì)成具有平臺(tái)的可移植性。這種特性方便了HDFS作為大規(guī)模數(shù)據(jù)應(yīng)用平臺(tái)的推廣。
2.4 Hadoop分布式文件系統(tǒng)
2.4.1 HDFS的設(shè)計(jì)
HDFS是以流式數(shù)據(jù)訪問模式存儲(chǔ)超大文件而設(shè)計(jì)的文件系統(tǒng),在廉價(jià)的商用硬件集群上運(yùn)行。超大文件是指幾百M(fèi)B,幾百GB或者幾百TB大小的文件。HDFS的流式數(shù)據(jù)訪問模式旨在一次寫入,多次訪問,一個(gè)數(shù)據(jù)集通常由數(shù)據(jù)源生成或復(fù)制,接著在此基礎(chǔ)上進(jìn)行各種各樣的分析,每個(gè)分析至少都會(huì)涉及數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù),因此讀取整個(gè)數(shù)據(jù)集的時(shí)間比讀取第一條記錄的延遲更為重要。Hadoop不需要運(yùn)行在昂貴并且高可靠性的硬件上。它被設(shè)計(jì)成運(yùn)行在低廉的商用硬件集群上,它以眾多的數(shù)據(jù)節(jié)點(diǎn)來實(shí)現(xiàn)可靠性,因此允許集群中多個(gè)節(jié)點(diǎn)的故障,但仍能保證系統(tǒng)的正常運(yùn)行。HDFS是針對(duì)海量數(shù)據(jù)的處理的,因此需要達(dá)到高的數(shù)據(jù)吞吐量,雖然這可能會(huì)一提高數(shù)據(jù)的傳輸延遲為代價(jià),但還是值得的。
2.4.2 數(shù)據(jù)塊
HDFS將每個(gè)文件存儲(chǔ)成一系列的數(shù)據(jù)塊,除了最后一個(gè),所有的數(shù)據(jù)塊都是同樣大小的,默認(rèn)每個(gè)塊的大小是64MB,每個(gè)分塊作為單獨(dú)的單元進(jìn)行存儲(chǔ)。使用塊為單元的好處在于,第一,hadoop是處理海量數(shù)據(jù)的,可能存在超大文件使得集群中單個(gè)磁盤裝不下的,這樣通過分塊,便能夠把此超大文件分塊存儲(chǔ)在多個(gè)磁盤上,而且它們能夠利用集群上任意一個(gè)磁盤。第二,數(shù)據(jù)塊很適合于為提供容錯(cuò)和實(shí)用性而做的的復(fù)制操作。為了應(yīng)對(duì)損壞的塊以及磁盤或機(jī)器的故障,每個(gè)塊都在少數(shù)其他分散的機(jī)器進(jìn)行復(fù)制。如果一個(gè)塊損壞了,系統(tǒng)會(huì)在其他地方讀取另一個(gè)副本,而這個(gè)過程對(duì)用戶是透明的。一個(gè)因損壞或機(jī)器故障而丟失的塊會(huì)從其他的候選地點(diǎn)復(fù)制到正常運(yùn)行的機(jī)器上,以保證副本的數(shù)量回到正常水平 。
2.4.3 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)
HDFS采用的是Master/Slave結(jié)構(gòu)。集群中存在兩種節(jié)點(diǎn),NameNode名字節(jié)點(diǎn)和DataNode數(shù)據(jù)節(jié)點(diǎn)。名字節(jié)點(diǎn)只有一個(gè),它是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間以及客戶端對(duì)文件的訪問,它維護(hù)集群內(nèi)的元數(shù)據(jù),維護(hù)著整個(gè)文件系統(tǒng)樹以及在這個(gè)樹內(nèi)多有的文件和索引目錄。對(duì)外提供創(chuàng)建,打開,刪除和重命名文件或目錄的功能。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體數(shù)據(jù)節(jié)點(diǎn)的映射。名子節(jié)點(diǎn)是非常重要的,如果沒有名字節(jié)點(diǎn),文件系統(tǒng)將無法使用。為了提高系統(tǒng)的可靠性,使得再名字節(jié)點(diǎn)出現(xiàn)故障時(shí),仍能保證系統(tǒng)快速恢復(fù)和數(shù)據(jù)的安全,這里可以采用運(yùn)行一個(gè)二級(jí)名字節(jié)點(diǎn)。
數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),并負(fù)責(zé)處理數(shù)據(jù)的讀寫請(qǐng)求。在名字節(jié)點(diǎn)的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建,刪除和復(fù)制。數(shù)據(jù)節(jié)點(diǎn)定期向名字節(jié)點(diǎn)上報(bào)心跳,名字節(jié)點(diǎn)通過響應(yīng)心跳來控制數(shù)據(jù)節(jié)點(diǎn)。數(shù)據(jù)節(jié)點(diǎn)有多個(gè)進(jìn)行冗余備份,因此允許某個(gè)數(shù)據(jù)節(jié)點(diǎn)的故障,保證系統(tǒng)的正常運(yùn)行。
2.5命令行接口
我們可以通過很多接口來與HDFS進(jìn)行交互,而其中最簡(jiǎn)單的便是通過命令行接口。直接在終端下通過命令來進(jìn)行文件的操作。首先需要先進(jìn)入hadoop安裝目錄的bin目錄下,個(gè)文件或目錄的操作命令如下:
Hadoop dfs -mkdir /newdir ;在hdfs中建立一個(gè)名為newdir的目錄;
Hadoop dfs –ls /newdir 查看一個(gè)目錄下的文件列表,通過這個(gè)命令我們可以看到該目錄下所有的文件,及其各文件的狀態(tài)信息,如文件格式,讀寫權(quán)限,所設(shè)置的副本數(shù),屬于那個(gè)用戶或組別,文件大小及文件的最近更新日期等;
Hadoopd fs –put 本地文件路徑 目標(biāo)路徑。指定路徑將指定本地文件拷貝到hdfs中,當(dāng)執(zhí)行一個(gè)"put"操作時(shí),它的結(jié)果是要么全做,要么全不做。上傳文件的時(shí)候,文件首先被拷貝到DataNode節(jié)點(diǎn)上。當(dāng)所有的 DataNode都接收完數(shù)據(jù)的時(shí)候,文件句柄被關(guān)閉,這個(gè)文件才真正的上傳完。根據(jù)"put"命令的返回值,我們可以知道這個(gè)操作是成功了,還是完全失敗了。文件不可能會(huì)只被上傳一半。如果文件上傳到一半時(shí),上傳操作被中斷了,那么hdfs就會(huì)當(dāng)作什么事情也沒有發(fā)生一樣。
Hadoop dfs –cat 文件路徑。從hdfs系統(tǒng)中導(dǎo)出指定文件的數(shù)據(jù),將一個(gè)文件的內(nèi)容輸出到標(biāo)準(zhǔn)輸出上。
Hadoop dfs –get hdfs路徑 本地路徑。Get命令和Put命令的功能是相反的。將指定hdfs系統(tǒng)上的文件下載到指定本地路徑上。
Hadoop dfs的命令行接口還有很多,以上只先介紹寫常用的基本命令操作,這些可以讓我們開始使用HDFS了,后面還將介紹更多的接口應(yīng)用。如果想了解更多的命令,可以通過執(zhí)行不帶任何參數(shù)的hadoop dfs命令,它會(huì)列出所有的hdfs命令。同時(shí)如果你不明白某些命令是怎么用的,你還可以輸入hadoop dfs –help 命令名字,它會(huì)幫你指出該命令的具體用法指南。
2.6 Hadoop文件系統(tǒng)
名字節(jié)點(diǎn)存儲(chǔ)HDFS的元數(shù)據(jù)。對(duì)于任何對(duì)文件元數(shù)據(jù)產(chǎn)生修改的操作,名字節(jié)點(diǎn)都使用一個(gè)稱為Editlog的事務(wù)日志記錄下來。例如,在HDFS中創(chuàng)建一個(gè)文件,名字節(jié)點(diǎn)就會(huì)在Editlog中插入一條記錄來表示;同樣,修改文件的replication因子也將往 Editlog插入一條記錄。名字節(jié)點(diǎn)在本地OS的文件系統(tǒng)中存儲(chǔ)這個(gè)Editlog。整個(gè)文件系統(tǒng)的名字空間,包括數(shù)據(jù)塊到文件的映射、文件的屬性,都存儲(chǔ)在稱為FsImage的文件中,這個(gè)文件也是放在名字節(jié)點(diǎn)所在系統(tǒng)的文件系統(tǒng)上。
名字節(jié)點(diǎn)在內(nèi)存中保存著整個(gè)文件系統(tǒng)名字空間和文件塊的映像。這個(gè)關(guān)鍵的元數(shù)據(jù)設(shè)計(jì)得很緊湊,因而一個(gè)帶有4G內(nèi)存的 名字節(jié)點(diǎn)足夠支撐海量的文件和目錄。當(dāng)名字節(jié)點(diǎn)啟動(dòng)時(shí),它從硬盤中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用(apply)在內(nèi)存中的FsImage ,并將這個(gè)新版本的FsImage從內(nèi)存中flush到硬盤上,然后再truncate這個(gè)舊的Editlog,因?yàn)檫@個(gè)舊的Editlog的事務(wù)都已經(jīng)作用在FsImage上了。這個(gè)過程稱為檢查點(diǎn)。在當(dāng)前實(shí)現(xiàn)中,檢查點(diǎn)只發(fā)生在名字節(jié)點(diǎn)啟動(dòng)時(shí),在不久的將來我們將實(shí)現(xiàn)支持周期性的檢查點(diǎn)。
數(shù)據(jù)節(jié)點(diǎn)節(jié)點(diǎn)并不知道關(guān)于文件的任何東西,除了將文件中的數(shù)據(jù)保存在本地的文件系統(tǒng)上。它把每個(gè)HDFS數(shù)據(jù)塊存儲(chǔ)在本地文件系統(tǒng)上隔離的文件中。 數(shù)據(jù)節(jié)點(diǎn)節(jié)點(diǎn)并不在同一個(gè)目錄創(chuàng)建所有的文件,相反,它用啟發(fā)式地方法來確定每個(gè)目錄的最佳文件數(shù)目,并且在適當(dāng)?shù)臅r(shí)候創(chuàng)建子目錄。在同一個(gè)目錄創(chuàng)建所有的文件不是最優(yōu)的選擇,因?yàn)楸镜匚募到y(tǒng)可能無法高效地在單一目錄中支持大量的文件。當(dāng)一個(gè)數(shù)據(jù)節(jié)點(diǎn)節(jié)點(diǎn)啟動(dòng)時(shí),它掃描本地文件系統(tǒng),對(duì)這些本地文件產(chǎn)生相應(yīng)的一個(gè)所有HDFS數(shù)據(jù)塊的列表,然后發(fā)送報(bào)告到名字節(jié)點(diǎn),這個(gè)報(bào)告就是塊狀態(tài)報(bào)告。
Hadoop的整體架構(gòu)圖如下:
圖2.1 HDFS架構(gòu)
3 構(gòu)建Hadoop集群
3.1 集群說明
Hadoop集群,可分為兩大類角色Master和Slave,前者主要配置名字節(jié)點(diǎn)和JobTracker的角色,負(fù)責(zé)總管分布式數(shù)據(jù)和分解任務(wù)的執(zhí)行,后者配置數(shù)據(jù)節(jié)點(diǎn)和TaskTracker的角色,負(fù)責(zé)分布式數(shù)據(jù)存儲(chǔ)以及任務(wù)的執(zhí)行[6]。
因?yàn)閔adoop是要在Linu*環(huán)境下配置的,這里我選擇了ubuntu系統(tǒng),通過vmware創(chuàng)建3臺(tái)虛擬機(jī),一臺(tái)作為名字節(jié)點(diǎn)服務(wù)器,兩臺(tái)作為數(shù)據(jù)節(jié)點(diǎn)服務(wù)器。在3臺(tái)虛擬機(jī)上都安裝好ubuntu系統(tǒng),考慮到宿主電腦要同時(shí)運(yùn)行三臺(tái)虛擬機(jī),這里對(duì)虛擬機(jī)的內(nèi)存設(shè)置為:作為名字節(jié)點(diǎn)的虛擬機(jī)分配了800MB的內(nèi)存空間,而兩臺(tái)數(shù)據(jù)節(jié)點(diǎn)都分配400M的空間。
3.2 Linu*上集群的建立和安裝
3.2.1 Linu*系統(tǒng)的安裝
首先在三臺(tái)虛擬機(jī)上安裝好ubuntu系統(tǒng),配置名字節(jié)點(diǎn)有800M內(nèi)存,兩臺(tái)數(shù)據(jù)節(jié)點(diǎn)有400M內(nèi)存。上網(wǎng)方式選擇NAT,IP地址參照宿主本地主機(jī)的IP網(wǎng)段設(shè)置為同一網(wǎng)段的,并且設(shè)置相同的網(wǎng)關(guān)和域名服務(wù)地址。這樣就能保證虛擬機(jī)也能正常上網(wǎng)。因?yàn)楹罄m(xù)的一些服務(wù)的安裝需要通過命令行接口實(shí)現(xiàn)在線的下載與安裝,所以必須保證虛擬機(jī)可以正常上網(wǎng)。在這里我配置的IP地址如下:
名字節(jié)點(diǎn):10.5.40.10/24
數(shù)據(jù)節(jié)點(diǎn)1:10.5.40.11/24
數(shù)據(jù)節(jié)點(diǎn)2:10.5.40.12/24
在配置虛擬機(jī)的上網(wǎng)方式時(shí),曾出現(xiàn)一點(diǎn)錯(cuò)誤讓我無法正常上網(wǎng)。這里提下vmware虛擬網(wǎng)卡的基礎(chǔ)知識(shí):vmware默認(rèn)有3個(gè)虛擬網(wǎng)卡:VMnet0,它是負(fù)責(zé)橋接的,把虛擬機(jī)網(wǎng)卡通過vmnet0橋接到主機(jī)的本地連接上;VMnet1,提供的網(wǎng)絡(luò)連接方式是host-only,就是虛擬機(jī)和主機(jī)處在一個(gè)私有網(wǎng)絡(luò)中,此方式下,虛擬機(jī)只能與主機(jī)通訊,不能上外網(wǎng);VMnet8,提供的網(wǎng)絡(luò)連接方式是NAT,就是讓虛擬機(jī)共享主機(jī)的IP地址,只要主機(jī)能上網(wǎng)虛擬機(jī)便能上網(wǎng)。當(dāng)時(shí),我配置了虛擬機(jī)的網(wǎng)卡連接方式為NAT但是虛擬機(jī)就是無法上網(wǎng)。錯(cuò)誤在于之前的其他實(shí)驗(yàn)當(dāng)中,我把VMnet8的連接方式修改過了,改成了host-only,所以即使網(wǎng)卡連接方式我已經(jīng)設(shè)為了NAT,但是負(fù)責(zé)NAT功能的VMnet8已不再具有NAT功能了。這里還是需要注意下的。
為了方便宿主主機(jī)本地文件到虛擬機(jī)上的交互:復(fù)制粘貼。我們還需要安裝VMtools,使得能夠通過簡(jiǎn)單的復(fù)制粘貼快捷鍵或簡(jiǎn)單的鼠標(biāo)拖動(dòng)就能在主機(jī)與虛擬機(jī)上移動(dòng)文件?傊,安裝VMtools會(huì)給我們對(duì)虛擬機(jī)的操作帶來很多的方便。下面介紹下VMtools的具體安裝。
1)點(diǎn)擊VMware菜單的——虛擬機(jī)——安裝VMware Tools,在彈出的對(duì)話框中選擇“安裝”。這時(shí),在Ubuntu下會(huì)自動(dòng)加載Linu*版的VMware Tools的安裝光盤鏡像。你會(huì)看到虛擬機(jī)的桌面上出現(xiàn)了一個(gè)名為VMware Tools的光盤圖標(biāo),并且被自動(dòng)打開。其中包括VMwareTools-5.3.3-34685-i386.rpm和VMwareTools- 5.3.3-34685.tar.gz兩個(gè)文件。
2)通過鼠標(biāo)右鍵解壓VMwareTools- 5.3.3-34685.tar.gz這個(gè)文件到指定目錄下,這里我是直接解壓到桌面上的。
3)點(diǎn)擊Ubuntu桌面左上角的Applications——附件——終端,在終端界面中,首先用cd 命令進(jìn)入到解壓縮后的那個(gè)文件夾中,然后再用命令$ sudo ./vmware-install.pl進(jìn)行vmtools的安裝,回車后會(huì)提示輸入你的密碼,表明你將以更高級(jí)權(quán)限執(zhí)行一個(gè)動(dòng)作——安裝軟件;再次回車后安裝開始,后續(xù)一直回車確定,直到最后出現(xiàn)“Enjoy——the VMware team”的字樣后,就表示VMwareTools終于安裝完成了。這時(shí)必須重新啟動(dòng)虛擬機(jī),才會(huì)使vmware-tools的功能生效。
這樣,ubuntu系統(tǒng)就基本安裝好且方便操作了,可以進(jìn)行下一個(gè)的工作了。
3.2.2 開啟SSH服務(wù)并實(shí)現(xiàn)無密碼登錄
正如前面所說的,有些服務(wù)的開啟需要在線的下載和安裝,所以需要虛擬機(jī)能夠上網(wǎng)。這里的ssh服務(wù)的開啟就是其一。打開終端,輸入命令:sudo apt –get install openssh-server 然后它便會(huì)自己下載和安裝,安裝完成后可以通過在終端中輸入命令:ssh 虛擬機(jī)自身IP,來檢測(cè)ssh服務(wù)是否已經(jīng)正常安裝。如果沒有安裝成功則會(huì)有ssh服務(wù)沒有開啟的錯(cuò)誤報(bào)告,正常安裝后則會(huì)提示輸入密碼以進(jìn)行ssh登錄。各個(gè)節(jié)點(diǎn)都必須開啟ssh服務(wù)。
安裝好ssh服務(wù)后,還要保證3臺(tái)虛擬機(jī)之間能夠?qū)崿F(xiàn)互相進(jìn)行無密碼登錄,這是進(jìn)行后續(xù)工作的前提,ssh是linu*傳遞文件的保障,只有能夠互相ssh我們各個(gè)機(jī)器之間傳遞的信息才是安全的,所以一定要保證各個(gè)機(jī)器之間能夠ssh通暢。
首先,在每個(gè)節(jié)點(diǎn)上通過ssh-keygen-t rsa命令,創(chuàng)建各個(gè)節(jié)點(diǎn)的公鑰和私鑰,期間會(huì)要求輸入一些信息,直接按回車就可以了,這樣在默認(rèn)路徑 (我的路徑是/home/zgj/.ssh)目錄下便創(chuàng)建了私鑰id_rsa和一個(gè)公鑰id_rsa.pub。
然后兩個(gè)數(shù)據(jù)節(jié)點(diǎn)要把自己的公鑰發(fā)送到名 ……(未完,全文共60632字,當(dāng)前僅顯示10905字,請(qǐng)閱讀下面提示信息。
收藏《畢業(yè)論文:基于HDFS的云災(zāi)備存儲(chǔ)系統(tǒng)——可靠存儲(chǔ)及負(fù)載均衡方法研究》)