版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Hadoop體系介紹目錄TOC\o"1-5"\h\z\o"CurrentDocument"一、背景 4\o"CurrentDocument"二、什么是Hadoop 4\o"CurrentDocument"apachehadoop項目 4\o"CurrentDocument"hadoop的優(yōu)點 5\o"CurrentDocument"Hadoop的使用場景 6\o"CurrentDocument"三、Hadoop發(fā)展?fàn)顩r及國內(nèi)外應(yīng)用情況 6\o"CurrentDocument"四、Hadoop文件系統(tǒng)HDFS 7\o"CurrentDocument"HDFS設(shè)計目標(biāo) 7\o"CurrentDocument"HDFS體系結(jié)構(gòu) 8\o"CurrentDocument"HDFS命名空間 9\o"CurrentDocument"HDFS存儲原理 9\o"CurrentDocument"數(shù)據(jù)存取策略 10通訊協(xié)議 12數(shù)據(jù)錯誤和異常 12HDFS尚未實現(xiàn)的功能總結(jié) 13\o"CurrentDocument"五、MapReduce、hive和pig 14\o"CurrentDocument"MapReduce 14\o"CurrentDocument"Hive 15\o"CurrentDocument"Pig 16\o"CurrentDocument"Mapreduce、hive和pig對比分析 17\o"CurrentDocument"hadoop、hive和pig的性能測試 17\o"CurrentDocument"Hive和Pig對比 21\o"CurrentDocument"六、HBASE 22\o"CurrentDocument"HBASE數(shù)據(jù)模型 22\o"CurrentDocument"HBASE概念視圖 23\o"CurrentDocument"HBASE物理視圖 24\o"CurrentDocument"HBASE分布式體系結(jié)構(gòu) 25Hbase和傳統(tǒng)關(guān)系數(shù)據(jù)庫的對比分析 26七、關(guān)于Hadoop使用總結(jié) 27HDFS 27[在此處鍵入]TOC\o"1-5"\h\z\o"CurrentDocument"MapReduce、HIVE和PIG 27\o"CurrentDocument"HBASE 28\o"CurrentDocument"八、關(guān)于研究Hadoop的考慮 28九、參考文獻(xiàn) 錯誤!未定義書簽。一、背景云計算已經(jīng)被看作IT業(yè)的新趨勢,分布式計算開源框架Hadoop作為構(gòu)建云計算平臺的技術(shù)之一而被廣為關(guān)注。在公司,目前Hadoop已經(jīng)在很多項目中用作海量數(shù)據(jù)存儲、數(shù)據(jù)檢索和統(tǒng)計分析技術(shù)。順應(yīng)技術(shù)發(fā)展趨勢,掌握熱門的新技術(shù)為公司關(guān)鍵項目提供技術(shù)保障,研究hadoop勢在必行。二、什么是Hadoopapachehadoop項目Hadoop是Apache開源組織的一個分布式計算開源框架,基于Hadoop可以輕松地編寫可處理海量數(shù)據(jù)的分布式并行程序,并將其運行于由成百上千個結(jié)點組成的大規(guī)模計算機(jī)集群上。Hadoop由DougCutting(道格?卡廷)在2004年開始開發(fā)并于2005年秋天作為Nutch的一部分被正式引入到Apache。Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成員組成。其中,HDFS和MapReduce是兩個最基礎(chǔ)最核心的成員,其結(jié)構(gòu)如下圖所示:PigChukwaHiveM叩ReduceHDFSZooIfeeperCoreAvro圖2-1Hadoop子項目組成>Core:一系列分布式文件系統(tǒng)和通用I/O的組件和接口(序列化、JavaRPC和持久化數(shù)據(jù)結(jié)構(gòu)),2009年7月core被更名為common。Avro:一種提供高效、跨語言RPC的數(shù)據(jù)序列系統(tǒng),持久化數(shù)據(jù)存儲。MapReduce:分布式數(shù)據(jù)處理模式和執(zhí)行環(huán)境,運行于大型商用機(jī)集群。HDFS:分布式文件系統(tǒng),運行于大型商用機(jī)集群。Pig:一種數(shù)據(jù)流語言和運行環(huán)境,用以檢索非常大的數(shù)據(jù)集。Pig運行在MapReduce和HDFS的集群上。Hbase:一個分布式的、列存儲數(shù)據(jù)庫。HBase使用HDFS作為底層存儲,同時支持MapReduce的批量式計算和點查詢(隨機(jī)讀取)。ZooKeeper:一個分布式的、高可用性的協(xié)調(diào)服務(wù)。ZooKeeper提供分布式鎖之類的基本服務(wù)用于構(gòu)建分布式應(yīng)用。Hive:分布式數(shù)據(jù)倉庫。Hive管理HDFS中存儲的數(shù)據(jù),并提供基于SQL的查詢語言(由運行時引擎翻譯成MapReduce作業(yè))用以查詢數(shù)據(jù)。Chukwa:分布式數(shù)據(jù)收集和分析系統(tǒng)。Chukwa運行HDFS中存儲數(shù)據(jù)的收集器,它使用MapReduce來生成報告。hadoop的優(yōu)點可擴(kuò)展:不論是存儲的可擴(kuò)展還是計算的可擴(kuò)展都是Hadoop的設(shè)計根本。經(jīng)濟(jì):框架可以運行在任何普通的PC上。[在此處鍵入]>可靠:分布式文件系統(tǒng)的備份恢復(fù)機(jī)制以及MapReduce的任務(wù)監(jiān)控保證了分布式處理的可靠性。高效:分布式文件系統(tǒng)的高效數(shù)據(jù)交互實現(xiàn)以及MapReduce結(jié)合LocalData處理的模式,為高效處理海量的信息作了基礎(chǔ)準(zhǔn)備。Hadoop的使用場景Google最早提出MapReduce是為了海量數(shù)據(jù)分析,作為googleMapReduce的開源實現(xiàn)HadoopMapReduce的最佳使用場景也是海量數(shù)據(jù)分析。海量數(shù)據(jù)存儲于HDFS中被分割于多個節(jié)點,然后由每一個節(jié)點并行計算,將得出的結(jié)果歸并到輸出。同時第一階段的輸出又可以作為下一階段計算的輸入,因此可以想象到一個樹狀結(jié)構(gòu)的分布式計算圖,在不同階段都有不同產(chǎn)出,同時并行和串行結(jié)合的計算也可以很好地在分布式集群的資源下得以高效的處理。三、Hadoop發(fā)展?fàn)顩r及國內(nèi)外應(yīng)用情況Hadoop開源項目的主要支持者和貢獻(xiàn)者是yahoo和facebook等國外的互聯(lián)網(wǎng)公司,在國內(nèi)也有淘寶、百度、騰訊、中移動等公司在研究使用,同時Hadoop也受到了學(xué)術(shù)界的普遍關(guān)注,國內(nèi)的高校和科研院所基于Hadoop在數(shù)據(jù)存儲、資源管理、作業(yè)調(diào)度、性能優(yōu)化、系統(tǒng)高可用性和安全性方面進(jìn)行研究,相關(guān)研究成果多以開源形式貢獻(xiàn)給Hadoop社區(qū)。Hadoop目前最穩(wěn)定的版本為0.20.0,這個版本還不能稱為1.0。盡管如此,Hadoop在國內(nèi)外得到了廣泛的應(yīng)用:>在Hadoop項目官方統(tǒng)計中國外有超過40家公司都在使用Hadoop,其中包括yahoo、facebook、adobe、ebay、MySpace和Amazon等。在國內(nèi)的大公司中也開始使用hadoop:百度用Hadoop每天處理1PB的數(shù)據(jù),進(jìn)行搜索日志分析和網(wǎng)頁數(shù)據(jù)挖掘工作;中移動研究院基于Hadoop開發(fā)了“大云”(BigCloud)系統(tǒng),不但用于相關(guān)數(shù)據(jù)分析,還對外提供服務(wù);淘寶的Hadoop系統(tǒng)用于存儲并處理電子商務(wù)的交易相關(guān)數(shù)據(jù)。四、Hadoop文件系統(tǒng)HDFSHDFS是一個能夠兼容普通硬件環(huán)境的分布式文件系統(tǒng),和現(xiàn)有的分布式文件系統(tǒng)不同的地方是HDFS更注重容錯性和兼容廉價的硬件設(shè)備,這樣做是為了用很小的預(yù)算甚至直接利用現(xiàn)有機(jī)器就實現(xiàn)大流量和大數(shù)據(jù)量的讀取。HDFS設(shè)計目標(biāo).防止硬件出錯導(dǎo)致數(shù)據(jù)丟失,硬件出錯是一種正常的情況而不是異常,為的就是在硬件出錯的情況下盡量保證數(shù)據(jù)完整性,HDFS設(shè)計的目標(biāo)是在成百上千臺服務(wù)器中存儲數(shù)據(jù),并且可以快速檢測出硬件錯誤和快速進(jìn)行數(shù)據(jù)的自動恢復(fù)。.提供流數(shù)據(jù)讀寫,不同于普通的文件系統(tǒng),HDFS是為了程序批量處理數(shù)據(jù)而設(shè)計的,而不是與用戶的交互或者隨機(jī)讀寫,所以POSIX對程序增加了許多硬性限制,程序必須使用流讀取來提高數(shù)據(jù)吞吐率。.大數(shù)據(jù)集,HDFS上面一個典型的文件一般是用GB或者TB計算的,而且一個數(shù)百臺機(jī)器組成的集群里面可以支持過千萬這樣的文件。.簡單的文件模型,HDFS上面的文件模型十分簡單,就是一次寫入多次讀取的模型,文件一旦創(chuàng)建,寫入并關(guān)閉了,之后就再也不會被改變了,只能被讀取,這種模型剛好符合搜索引擎的需求,以后可能會實現(xiàn)追加寫入數(shù)據(jù)這樣的功能。.強(qiáng)大的跨平臺兼容性,由于是基于java的實現(xiàn),無論是硬件平臺或者是軟件平臺要求都不高,只要是jdk支持的平臺都可以兼容。HDFS體系結(jié)構(gòu)HDFS采用的是主從架構(gòu),由唯一一個NameNode和數(shù)個DataNode組成。HDFS對外表現(xiàn)為一個普通的文件系統(tǒng),用戶可以用文件名去存儲和訪問文件,而實際上文件是被分成不同的數(shù)據(jù)塊,這些數(shù)據(jù)塊就是存儲在DataNode上面。NameNode是集群里面的主節(jié)點,負(fù)責(zé)文件名的維護(hù)管理,也是客戶端訪問文件的入口。文件名的維護(hù)包括文件和目錄的創(chuàng)建、刪除、重命名等。同時也管理數(shù)據(jù)塊和數(shù)據(jù)節(jié)點的映射關(guān)系,客戶端需要訪問目錄節(jié)點才能知道一個文件的所有數(shù)據(jù)塊都保存在哪些數(shù)據(jù)節(jié)點上。DataNode一般就是集群里面的一臺機(jī)器,負(fù)責(zé)數(shù)據(jù)的存儲和讀取。在寫入時,由NameNode分配數(shù)據(jù)塊的保存,然后客戶端直接寫到對應(yīng)的數(shù)據(jù)節(jié)點。在讀取時,當(dāng)客戶端從NameNode獲得數(shù)據(jù)塊的映射關(guān)系后,就會直接到對應(yīng)的DataNode讀取數(shù)據(jù)。數(shù)據(jù)節(jié)點也要根據(jù)NameNode的命令創(chuàng)建、刪除數(shù)據(jù)塊,和冗余復(fù)制。一個典型的HDFS集群部署,是由一臺性能較好的機(jī)器運行NameNode,而集群里面的其它機(jī)器每臺上面運行一個NameNode。當(dāng)然一個機(jī)器可以運行任意多個DataNode,甚至NameNode和DataNode一起運行,不過這種模式在正式的應(yīng)用部署中很少使用。唯一的NameNode的設(shè)計大大簡化了整個體系結(jié)構(gòu),NameNode負(fù)責(zé)HDFS里面所有元數(shù)據(jù)的仲裁和存儲。這樣的設(shè)計使數(shù)據(jù)不會脫離NameNode的控制。HDFS體系結(jié)構(gòu)如下圖所示:HDFSArchitecture< -xMetadata(Name;replicas,...):. /Narnenode*/home/foo/data,3,...Metadata.ops|namenogg 11'.r BlockopsReidDatanodes \DatanodesHDFS命名空間HDFS使用的是傳統(tǒng)的分級文件體系,客戶端程序可以創(chuàng)建目錄并且在目錄里面保存文件,類似與現(xiàn)在一般的文件系統(tǒng)。HDFS允許用戶創(chuàng)建、刪除文件,在目錄間轉(zhuǎn)移文件,重命名文件等,但是還沒有實現(xiàn)磁盤配額和文件訪問權(quán)限等功能,也不支持文件的硬連接和軟連接(快捷方式),這些功能在短期內(nèi)不會實現(xiàn)。NameNode負(fù)責(zé)存儲和管理整個文件系統(tǒng)的命名空間,應(yīng)用程序可以指定某一個文件需要在HDFS中冗余多少份,這個在HDFS中稱為冗余因素,保存在NameNode里面。HDFS存儲原理HDFS是為了大文件的可靠保存而設(shè)計的,一個文件被劃分成一連串的數(shù)據(jù)塊,除了文件的最后一塊以外其它所有的數(shù)據(jù)塊都是固定大小的,為了數(shù)據(jù)容錯性,每一個數(shù)據(jù)塊都會被冗余存儲起來,而每個文件的塊大小和冗余因素都是可以設(shè)置的,程序可以設(shè)置文件的數(shù)據(jù)塊要被復(fù)制多少份,而且這個冗余因素除了可以在創(chuàng)建的時候指定,還可以在之后改變。[在此處鍵入]在HDFS里面文件只會被寫入一次,并且任何時間只會有一個程序在寫入這個文件。NameNode是根據(jù)數(shù)據(jù)塊的冗余狀況來作出處理決策的,DataNode會定期發(fā)送一個存在信號(Heartbeat)和數(shù)據(jù)塊列表給NameNode,存在信號使NameNode認(rèn)為該DataNode還是有效的,而數(shù)據(jù)塊列表包括了該DataNode上面的所有數(shù)據(jù)塊編號。BlockReplicationNamenode(Filename,numReplicas,block-ids,...)/□sers/sanrieerp/da(a/part-O,r:2,{1.3},.../user&f&ameerp/<iata/part-i,r;3,{2.4,5),...數(shù)據(jù)存取策略數(shù)據(jù)復(fù)制策略是HDFS最核心的部分,對讀寫性能影響很大,HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置,這個特性需要很多時間去優(yōu)化和調(diào)整。數(shù)據(jù)存放目前HDFS采用以機(jī)柜為基礎(chǔ)的數(shù)據(jù)存放策略,這樣做的目的是提高數(shù)據(jù)可靠性和充分利用網(wǎng)絡(luò)帶寬。當(dāng)前具體實現(xiàn)了的策略只是這個方向的嘗試,HDFS短期的研究目標(biāo)之一就是在實際產(chǎn)品環(huán)境中觀察系統(tǒng)讀寫的行為,測試性能和研究更深入的規(guī)則。一個大的HDFS集群經(jīng)常橫跨多個機(jī)柜,而不同機(jī)柜之間的數(shù)據(jù)通訊同經(jīng)過交換機(jī)或者路由,所以同一個機(jī)柜中不同機(jī)器的通訊帶寬是比不同機(jī)柜之間機(jī)器通訊時候的大。HDFS提供了一個api來決定DataNode所屬的機(jī)柜id,當(dāng)文件系統(tǒng)啟動的時候,DataNode就把自己所屬的機(jī)柜id發(fā)給目錄機(jī),然后目錄機(jī)管理這些分組。HDFS默認(rèn)是每個DataNode都是在不同的機(jī)柜上面,這種方法沒有做任何性能優(yōu)化,但是也有不少優(yōu)點:1、數(shù)據(jù)可靠性是最高的。因為這樣可以防止機(jī)柜出錯的時候數(shù)據(jù)丟失。2、在讀取數(shù)據(jù)的時候充分利用不同機(jī)柜之間的帶寬。3、而且這個策略可以很容易的完成負(fù)載平衡和錯誤處理。缺點就是寫入數(shù)據(jù)的時候并不能完全利用同一機(jī)柜里面機(jī)器的帶寬。在默認(rèn)的配置下,HDFS的冗余復(fù)制因子是3,意思就是每一塊文件數(shù)據(jù)一共有3個地方存放,hadoop目前的存放策略是其中兩份放在同一個rackid的不同機(jī)器上面,另外一個放在不同rackid的機(jī)器上面,簡單來說就是1/3的冗余數(shù)據(jù)在一個機(jī)柜里面,2/3的冗余數(shù)據(jù)在另外一個機(jī)柜里面,這樣既可以防止機(jī)柜異常時候的數(shù)據(jù)恢復(fù),又可以提高讀寫性能。上面所說的策略目前還是在測試優(yōu)化階段。數(shù)據(jù)讀取數(shù)據(jù)讀取策略,根據(jù)前面所說的數(shù)據(jù)存放策略,數(shù)據(jù)讀取的時候,客戶端也有api確定自己的機(jī)柜id,讀取的時候,如果有塊數(shù)據(jù)和客戶端的機(jī)柜id一樣,就優(yōu)先選擇該數(shù)據(jù)節(jié)點,客戶端直接和數(shù)據(jù)節(jié)點建立連接,讀取數(shù)據(jù)。如果沒有,就隨機(jī)選取一個數(shù)據(jù)節(jié)點。數(shù)據(jù)復(fù)制主要是在數(shù)據(jù)寫入和數(shù)據(jù)恢復(fù)的時候發(fā)生,數(shù)據(jù)復(fù)制是使用流水線復(fù)制的策略。當(dāng)客戶端要在hdfs上面寫一個文件,首先它先把這個文件寫在本地,然后對文件進(jìn)行分塊,默認(rèn)64m一塊,每塊數(shù)據(jù)都對HDFSNameNode請求,NameNode選擇一個DataNode列表,返回給客戶端,然后客戶端就把數(shù)據(jù)寫入第一臺DataNode,并且把列表傳給DataNode,當(dāng)DataNode接收至ij4k數(shù)據(jù)的時候,寫入本地并且發(fā)起連接到下一臺DataNode,把這個4k傳過去,形成一條流水線。當(dāng)最后文件寫完的時候,數(shù)據(jù)復(fù)制也同時完成,這個就是流水線處理的優(yōu)勢。通訊協(xié)議HDFS的通訊協(xié)議基本是在tcp/ip的基礎(chǔ)上開發(fā)的,客戶端使用ClientProtocol和NameNode通訊,DataNode使用DatanodeProtocol和NameNode通訊,而NameNode一般只是應(yīng)答客戶端和DataNode的請求,不會主動發(fā)起通訊。數(shù)據(jù)錯誤和異常HDFS的主要目標(biāo)就是在硬件出錯的時候保證數(shù)據(jù)的完整性,它把磁盤錯誤作為肯定會出現(xiàn)的情況來對待,而不是異常。一般數(shù)據(jù)存儲中出現(xiàn)的錯誤有幾種,分別是NameNode錯誤,DataNode錯誤,和網(wǎng)絡(luò)傳輸異常。1、DataNode出錯,每個DataNode會定時發(fā)送一個心跳信息給NameNode,表明自己仍然存活,網(wǎng)絡(luò)異??赡軙?dǎo)致一部分DataNode無法和NameNode通訊,這時候NameNode收不到心跳信息,就認(rèn)為這個DataNode已經(jīng)死機(jī),從有效io列表中清除,而該DataNode上面的所有數(shù)據(jù)塊也會標(biāo)記為不可讀。這個時候某些數(shù)據(jù)塊的冗余份數(shù)有可能就低于它的冗余因子了,NameNode會定期檢查每一個數(shù)據(jù)塊,看看它是否需要進(jìn)行數(shù)據(jù)冗余復(fù)制。2、出現(xiàn)數(shù)據(jù)異常,由于網(wǎng)絡(luò)傳輸和磁盤出錯的原因,從DataNode讀取的數(shù)據(jù)有可能出現(xiàn)異常,客戶端實現(xiàn)對數(shù)據(jù)塊的校驗,用md5和shal進(jìn)行校驗,客戶端在創(chuàng)建文件的時候,會對每一個文件塊進(jìn)行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面。當(dāng)客戶端讀取文件的時候,會先讀取該信息文件,然后對每個讀取的數(shù)據(jù)塊進(jìn)行校驗,如果校驗出錯,客戶端就會請求到另外一個DataNode讀取該文件塊,并且報告給NameNode這個文件塊有錯誤,NameNode就會定期檢查,并且重新復(fù)制這個塊。3、NameNode出錯,F(xiàn)sImage和Editlog是NameNode上面兩個最核心的數(shù)據(jù)結(jié)構(gòu),如果其中一個文件出錯的話,會造成NameNode不起作用,由于這兩個文件如此重要,所以NameNode上面可以設(shè)置多個備份文件和輔助服務(wù)器,當(dāng)這兩個文件有改變的時候,NameNode就會發(fā)起同步操作,雖然這樣增加了系統(tǒng)的負(fù)擔(dān),但是在目前這個架構(gòu)上面為了實現(xiàn)數(shù)據(jù)的可靠性,這個同步操作是非常必要的。4.7、HDFS尚未實現(xiàn)的功能總結(jié)1、文件追加寫入,這個功能近期內(nèi)不會實現(xiàn),沒有這個功能會引起當(dāng)文件尚未關(guān)閉的時候,數(shù)據(jù)服務(wù)器死機(jī)或者NameNode死機(jī),會引起文件文件丟失,并且不可后續(xù)恢復(fù)寫入。2、系統(tǒng)快照,一個全系統(tǒng)的快照功能,如果沒有這個功能就不能實現(xiàn)文件系統(tǒng)的回滾操作。3、集群負(fù)載均衡,均衡策略暫時沒有實現(xiàn),有幾個策略十分有用,比如在某臺DataNode可能磁盤過低的時候,把該DataNode上面的一些數(shù)據(jù)轉(zhuǎn)移到還有很多空間剩余的DataNode上;當(dāng)某個文件突然被大量讀寫的時候,動態(tài)增加該文件的冗余因子,并且數(shù)[在此處鍵入]據(jù)塊復(fù)制到更多的DataNode上面,以提高讀取性能。4、文件系統(tǒng)的用戶權(quán)限,這個也是近期內(nèi)不會實現(xiàn)的了。5、訪問權(quán)限,現(xiàn)在是無限制訪問的,沒有訪問權(quán)限控制。五、MapReduce、hive和pigMapReduceMapReduce是一種用于數(shù)據(jù)處理的編程模型,適合于大規(guī)模數(shù)據(jù)(TB級)的計算。Map和Reduce是它的主要思想,來源于函數(shù)式編程語言,它的原理如下圖所示:Map負(fù)責(zé)將數(shù)據(jù)打散,Reduce負(fù)責(zé)對數(shù)據(jù)進(jìn)行聚集,用戶只需要實map和reduce兩個接口,即可完成TB級數(shù)據(jù)的計算,常見的應(yīng)用包括:日志分析和數(shù)據(jù)挖掘等數(shù)據(jù)分析應(yīng)用。另外,還可用于科學(xué)數(shù)據(jù)計算,如圓周率PI的計算等。HadoopMapReduce的實現(xiàn)也采用了Master/Slave結(jié)構(gòu)。Master叫做JobTracker,而Slave叫做TaskTracker。用戶提交的計算叫做Job,每一個Job會被劃分成若干個Tasks。JobTracker負(fù)責(zé)Job和Tasks的調(diào)度,而TaskTracker負(fù)責(zé)執(zhí)行Tasks。HiveHive是一個分布式數(shù)據(jù)倉庫,可以管理HDFS中存儲的數(shù)據(jù),并提供基于SQL的查詢語言(由運行時引擎翻譯成MapReduce作業(yè))用以查詢數(shù)據(jù)。Hive的體系結(jié)構(gòu)如下圖所示:用戶接口用戶接口主要有三個:CLI,Client和亞5。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至HiveServer。在啟動Client模式的時候,需要指出HiveServer所在節(jié)點,并且在該節(jié)點啟動HiveServer。WUI是通過瀏覽器訪問Hive。>元數(shù)據(jù)存儲Hive的元數(shù)據(jù)存儲,通常是存儲在關(guān)系數(shù)據(jù)庫如mysql,derby中。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。解釋器、編譯器、優(yōu)化器、執(zhí)行器解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,并在隨后有MapReduce調(diào)用執(zhí)行。數(shù)據(jù)存儲首先,Hive沒有專門的數(shù)據(jù)存儲格式,也沒有為數(shù)據(jù)建立索引,用戶可以非常自由的組織Hive中的表,只需要在創(chuàng)建表的時候告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,Hive就可以解析數(shù)據(jù)。其次,Hive中所有的數(shù)據(jù)都存儲在HDFS中,Hive中包含以下數(shù)據(jù)模型:Table,ExternalTable,Partition,Bucket。HadoopHive構(gòu)建在Hadoop平臺之上,利用HDFS進(jìn)行存儲,利用MapReduce進(jìn)行計算。PigPig是這樣一個平臺,它能夠?qū)τ筛呒壵Z言編寫的數(shù)據(jù)分析程序組成的大型數(shù)據(jù)集進(jìn)行分析、評估。Pig程序最突出的優(yōu)勢是它的結(jié)構(gòu)能夠經(jīng)受得住高度并行化的檢驗,這個特性讓它能夠處理大型的數(shù)據(jù)集。Pig的底層由一個編譯器組成,它在運行的時候會產(chǎn)生一些Map-Reduce程序序列,并且這里大規(guī)模的并行執(zhí)行依然存在,Pig的語言層是由一叫做PigLatin的正文型語言組成,它有如下的特點:易于編程:對于那些簡單的并且不易并行的數(shù)據(jù)分析任務(wù)達(dá)并不需要實現(xiàn)并行執(zhí)行的目標(biāo)。多重關(guān)聯(lián)的數(shù)據(jù)轉(zhuǎn)換任務(wù)需要明確地被編碼成數(shù)據(jù)流序列,讓他們易于被書寫、理解和掌握。最優(yōu)化機(jī)會:任務(wù)被編碼的方式允許系統(tǒng)執(zhí)行的時候進(jìn)行自動地優(yōu)化,這就是說,用戶更需要注意的是程序語義的設(shè)計而不是效率。擴(kuò)展性:用戶能自定義函數(shù)來實現(xiàn)特殊的目的。Mapreduce、hive和pig對比分析在海量數(shù)據(jù)分析場景中面臨著hadoop(mapreduce)、hive和pig技術(shù)的選擇問題。hive和pig是基于hadoopmapreduce之上的高級語言,相對于直接編寫和調(diào)試mapreduce程序hive和pig在開發(fā)門檻和開發(fā)效率方面更有優(yōu)勢,除了需要關(guān)注開發(fā)方面的問題,程序運行的效率也是應(yīng)該重點關(guān)注的。下面引用facebook工程師對三者的測試結(jié)果和官方對hive和pig的對比來比較hadoop、hive和pig在數(shù)據(jù)分析場景中各自的優(yōu)勢,以供我們在技術(shù)選型時參考。hadoop、hive和pig的性能測試>軟件版本Hadoop:version0.18.32PIG:trunkversion786346Hive:trunkversion7863463>Hadoop集群配置采用11臺服務(wù)器搭建hadoop驗證環(huán)境,其中1臺服務(wù)器用作Namenode和jobtracker,其他10臺服務(wù)器都用作Datanode和tasktrackers,服務(wù)器的配置信息如下:CPU2Dual-CoreAMDOpteron(tm)280Processors,2.4GHz,cache1MBMemory8GBDisk4harddrives,total1.6TEthernet1GbpsLinux2.6.12-1.1398_FC4smpLzolib2.02>測試數(shù)據(jù)數(shù)據(jù)格式記錄數(shù)存儲空間
grep(keyVARCHAR(10),fieldVARCHAR(90))2columns500millionrows50GBrankings(pageRank INT, pageURLVARCHAR(100),avgDurationINT).3columns56.3millionrows3.3GBuservisits(sourceIPVARCHAR(16),destURLVARCHAR(100),visitDateDATE,adRevenueFLOAT,userAgentVARCHAR(64),countryCodeVARCHAR(3),languageCodeVARCHAR(6),searchWordVARCHAR(32),durationINT).9columns465millionrows60GB(scaleddownfrom200GB)測試場景場景名稱查詢語句Selectquery1SELECT*FROMgrepWHEREfieldlike'%XYZ%’;Selectquery2SELECTpageRank,pageURLFROMrankingsWHEREpageRank>10;
AggregationquerySELECTsourcelP,SUM(adRevenue)FROMuservisitsGROUPBYsourceIP;AggregationquerySELECTsourceIP,SUM(adRevenue)FROMuservisitsGROUPBYsourceIP;JoinquerySELECTINTOTempsourceIP,AVG(pageRank)asavgPageRank,SUM(adRevenue)astotalRevenueFROMrankingsASR,userVisitsASUVWHERER.pageURL=UV.destURLANDUV.visitDateBETWEENDate('1999-01-01')ANDDate('2000-01-01')GROUPBYUV.sourceIP;SELECTsourceIP,totalRevenue,avgPageRankFROMTempORDERBYtotalRevenueDESCLIMIT1;測試結(jié)果
結(jié)論從測試結(jié)果看4個場景中pig的效率最低,queryl和joinquery場景hive強(qiáng)于hadoop不過優(yōu)勢不明顯,query2和aggregationquery場景hadoop比hive效率高了30%多。Hive和Pig對比Hive和pig都是基于hadoopmapreduce的高級語言框架,兩者分別提供了類似sql和腳本語言的編程接口。下面引用官網(wǎng)對hive和pig特性的全面對比來分析兩者的優(yōu)勢和適合場景,兩者的特性對比如下表:FeatureHivePigLanguageSQL-likePigLatinSchemas/TypesYes(explicit)Yes(implicit)PartitionsYesNo
Server Optional(Thrift)NoUserDefinedFunctions(UDF)Yes(Java)Yes(Java)CustomSerializer/DeserializerYesYesDFSDirectAccessYes(implicit)Yes(explicit)Join/Order/SortYesYesShellYesYesStreamingYesYesWebInterfaceYesNoJDBC/ODBCYes(limited)Nohive和pig都能很的完成同一個統(tǒng)計分析任務(wù),兩者都降低了開發(fā)人員直接編寫MapReduce程序的工作復(fù)雜性。其中hive提供了類sql的編程接口,更適合于數(shù)據(jù)庫程序開發(fā)人員使用,而pig更適合于熟悉腳本開發(fā)人員使用。在數(shù)據(jù)存儲和組件方面hive提供了數(shù)據(jù)分區(qū)存儲、webui和server組件,使系統(tǒng)在架構(gòu)和開發(fā)方面更靈活。六、HBASEHBase是一個開源的、分布式的、面向列的存儲系統(tǒng),該技術(shù)來源于Google論文“Bigtable:一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)"。就像Bigtable利用了Googl文件系統(tǒng)(FileSystem)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBASE數(shù)據(jù)模型Hbase是一個類似Bigtable的分布式數(shù)據(jù)庫,大部分特性和Bigtable一樣,是一個稀疏的,長期存儲的{存在硬盤上},多維度的,排序的映射表。這張表的索引是行關(guān)鍵字,列關(guān)鍵字和時間戳。每個值是一個不解釋的字符數(shù)組,數(shù)據(jù)都是字符串,沒類型。用戶在表格中存儲數(shù)據(jù),每一行都有一個可排序的主鍵和任意多的列。由于是稀疏存儲的,所以同一張表里面的每一行數(shù)據(jù)都可以有截然不同的列。列名字的格式是"<family>:<label>",都是由字符串組成,每一張表有一個family集合,這個集合是固定不變的,相當(dāng)于表的結(jié)構(gòu),只能通過改變表結(jié)構(gòu)來改變。但是label值相對于每一行來說都是可以改變的。Hbase把同一個family里面的數(shù)據(jù)存儲在同一個目錄底下,而Hbase的寫操作是鎖行的,每一行都是一個原子元素,都可以加鎖。所有數(shù)據(jù)庫的更新都有一個時間戳標(biāo)記,每個更新都是一個新的版本,而hbase會保留一定數(shù)量的版本,這個值是可以設(shè)定的??蛻舳丝梢赃x擇獲取距離某個時間最近的版本,或者一次獲取所有版本。HBASE概念視圖一個表可以想象成一個大的映射關(guān)系,通過主鍵,或者主鍵+時間戳,可以定位一行數(shù)據(jù),由于是稀疏數(shù)據(jù),所以某些列可以是空白的,下面就是數(shù)據(jù)的概念視圖:RowKeyTimeStampColumn"contents:"Column"anchor:"Column"mime:""n.www"t9"anchor:""CNN"t8"anchor:my.look.ca""CNN.com"t6"<html>…”"text/html"t5"<html>…”
t3"<html>…”"cont&nts:""anehur:r“amjho『:my」L!oK.ca”n.wvA7ir*n.wvA7ir*—1i—iM'CNN"-011,:一Uh標(biāo)匕二上圖是一個存儲Web網(wǎng)頁的范例列表片斷。行名是一個反向URL{即n.www}。contents列族{原文用family,譯為族,詳見列族}存放網(wǎng)頁內(nèi)容,anchor列族存放引用該網(wǎng)頁的錨鏈接文本。CNN的主頁被SportsIllustrater{即所謂SI,CNN的王牌體育節(jié)目}和MY-look的主頁引用,因此該行包含了名叫“cnchor:”和“anchhor:my.look.ca”的列。每個錨鏈接只有一個版本{由時間戳標(biāo)識,如t9,t8};而contents列則有三個版本,分別由時間戳t3,t5,和t6標(biāo)識。HBASE物理視圖雖然從概念視圖來看每個表格是由很多行組成,但是在物理存儲上面,它是按照列來保存的,這點在數(shù)據(jù)設(shè)計和程序開發(fā)的時候必須牢記。上面的概念視圖在物理存儲的時候應(yīng)該表現(xiàn)成下面那樣子:RowKeyTimeStampColumn"contents:""n.www"t6"<html>…”t5"<html>…”t3"<html>…”RowKeyTimeStampColumn"anchor:""n.www"t9"anchor:""CNN"t8"anchor:my.look.ca""CNN.com"RowKeyTimeStampColumn"mime:""n.www"t6"text/html"需要注意的是在概念視圖上面有些列是空白的,這樣的列實際上并不會被存儲,當(dāng)請求這些空白的單元格的時候,會返回null值。如果在查詢的時候不提供時間戳,那么會返回距離現(xiàn)在最近的那一個版本的數(shù)據(jù)。因為在存儲的時候,數(shù)據(jù)會按照時間戳排序。HBASE分布式體系結(jié)構(gòu)Hbase的服務(wù)器體系結(jié)構(gòu)也是遵從簡單的主從服務(wù)器架構(gòu),由Hregion服務(wù)器群和HBaseMaster主服務(wù)器構(gòu)成。Hregion服務(wù)器對用戶來說,每個表是一堆數(shù)據(jù)的集合,靠主鍵來區(qū)分。物理上,一張表是被拆分成多塊,每一塊就稱呼為一個Hregion。用表名+開始/結(jié)束主鍵,來區(qū)分一個Hregion,一個Hregion會保存一個表里面某段連續(xù)的數(shù)據(jù),從開始主鍵到結(jié)束主鍵,一張完整的表格是保存在多個Hregion上面的。所有的數(shù)據(jù)庫數(shù)據(jù)一般是保存在HDFS上面,用戶通過一系列Hregion服務(wù)器獲取這些數(shù)據(jù),一般一臺機(jī)器上面運行一個Hregion服務(wù)器,而每一個區(qū)段Hregion只會被一個Hregion服務(wù)器維護(hù)。>Hbase主服務(wù)器每個Hregion服務(wù)器都會和Hmaster服務(wù)器通訊,Hmaster的主要任務(wù)就是要告訴每個Hregion服務(wù)器它要維護(hù)哪些Hregion。Hmaster服務(wù)器會和每個Hregion服務(wù)器保持一個長連接。Hbase和傳統(tǒng)關(guān)系數(shù)據(jù)庫的對比分析Hbase是不同于關(guān)系數(shù)據(jù)庫,它是一個稀疏的,分布的,持續(xù)多維度的排序映射數(shù)組。Hbase就是這樣一個基于列模式的映射數(shù)據(jù)庫,它只能表示很簡單的鍵-數(shù)據(jù)的映射關(guān)系,它大大簡化了傳統(tǒng)的關(guān)系數(shù)據(jù)庫。Hbase存在以下特點:數(shù)據(jù)類型:Hbase只有簡單的字符串類型,所有類型都是交由用戶自己處理,它只保存字符串。而關(guān)系數(shù)據(jù)庫有豐富的類型選擇和存儲方式。數(shù)據(jù)操作:Hbase操作只有很簡單的插入、查詢、刪除、清空等,表和表之間是分離的,沒有復(fù)雜的表和表之間的關(guān)系,所以也不能也沒有必要實現(xiàn)表和表之間的關(guān)聯(lián)等操作。而傳統(tǒng)的關(guān)系數(shù)據(jù)通常有各種各樣的函數(shù)、連接操作。存儲模式:Hbase是基于列存儲的,每個列族都有幾個文件保存,不同列族的文件是分離的。傳統(tǒng)的關(guān)系數(shù)據(jù)庫是基于表格結(jié)構(gòu)和行模式保存的。數(shù)據(jù)維護(hù):Hbase的更新正確來說應(yīng)該不叫更新,而且一個主鍵或者列對應(yīng)的新的版本,而它舊有的版本仍然會保留,所以它實際上是插入了新的數(shù)據(jù),而不是傳統(tǒng)關(guān)系數(shù)據(jù)庫里面的替換修改。可伸縮性:Hbase和Bigtable這類分布式數(shù)據(jù)庫就是直接為了這個目的開發(fā)出來的,能夠輕易的增加或者減少(在硬件錯誤的時候)硬件數(shù)量,而且對錯誤的兼容性比較高。而傳統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濰坊市普通高中2026屆生物高一第一學(xué)期期末達(dá)標(biāo)檢測試題含解析
- 罕見腫瘤的個體化治療治療策略優(yōu)化經(jīng)驗與個體化醫(yī)療
- 修改單位財務(wù)制度流程
- 2026新疆博州聯(lián)通小營盤營業(yè)廳招聘備考題庫完整參考答案詳解
- 收款付款財務(wù)制度
- 綜治協(xié)會財務(wù)制度
- 貿(mào)易類財務(wù)制度
- 豆制食品公司財務(wù)制度
- 招待費培訓(xùn)費財務(wù)制度
- 餐飲新公司財務(wù)制度
- 屋面防水施工質(zhì)量保證措施
- 國際消防安全系統(tǒng)規(guī)則
- 靜脈治療新理念
- 高中研究性學(xué)習(xí)指導(dǎo)課課件系列總結(jié)階段-學(xué)生如何開展研究活動
- 心內(nèi)介入治療護(hù)理
- 民辦職業(yè)培訓(xùn)方案模板
- 04S519小型排水構(gòu)筑物(含隔油池)圖集
- 旅居養(yǎng)老可行性方案
- 中國焦慮障礙防治指南
- 心包積液及心包填塞
- GB/T 42195-2022老年人能力評估規(guī)范
評論
0/150
提交評論