Hbase分析報告模版_第1頁
Hbase分析報告模版_第2頁
Hbase分析報告模版_第3頁
Hbase分析報告模版_第4頁
Hbase分析報告模版_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Hbase分析報告本文基于環(huán)境hadoop-0.16.4和hbase-0.1.3編寫Hbase是一個分布式開源數(shù)據(jù)庫,基于Hadoop分布式文件系統(tǒng),仿照并供給了基于Google文件系統(tǒng)的Bigtable數(shù)據(jù)庫的全部功能。Hbaes10億行數(shù)據(jù),并且有數(shù)百萬列元素組成的數(shù)據(jù)表。Hbase可以直接使用本地文件系統(tǒng)或者Hadoop作為數(shù)據(jù)存儲方式,不過為了提高數(shù)據(jù)牢靠性和系統(tǒng)的強健性,發(fā)揮Hbase處理大數(shù)據(jù)量等功能,需要使用Hadoop作為文件系統(tǒng),那么我們就先要了解Hadoop文件系統(tǒng)的根本特性和原理Hbase的工作方式。Hadoop文件系統(tǒng)Hadoop文件系統(tǒng)是一個能夠兼容一般硬件環(huán)境的分布式文件系統(tǒng),和現(xiàn)有的分布式文件系統(tǒng)不同的地方是Hadoop甚至直接利用現(xiàn)有機器就實現(xiàn)大流量和大數(shù)據(jù)量的讀取。Hadoop使用了POSIX()的設(shè)計來實現(xiàn)對文件系統(tǒng)文件流的讀取。HDFS〔HadoopFileSystem〕原來是ApacheNutch搜尋引擎〔從Lucene進展而來〕開發(fā)的一個局部,后來獨立出來作為一個Apache子工程。Hadoop的假設(shè)與目標1Hadoop假設(shè)硬件出錯是一種正常的狀況,而不是特別,為的就是在硬件出錯的狀況下盡量保證數(shù)據(jù)完整性HDFS并且可以快速檢測出硬件錯誤和快速進展數(shù)據(jù)的自動恢復。2Hadoop是為了程序批量處理數(shù)據(jù)而設(shè)計的,而不是與用戶的交互或者隨機讀寫,所以POSIX對程序增加了很多硬性限制,程序必需使用流讀取來提高數(shù)據(jù)吞吐率。3HDFSGBTB計算的,而且一個數(shù)百臺機器組成的集群里面可以支持過千萬這樣的文件。4HDFS上面的文件模型格外簡潔,就是一次寫入屢次讀取的模型,文件一旦創(chuàng)立,寫入并關(guān)閉了,之后就再也不會被轉(zhuǎn)變了,只能被讀取,這種模型剛好符合搜尋引擎的需求,以后可能會實現(xiàn)追加寫入數(shù)據(jù)這樣的功能。5java不高,只要是jdk支持的平臺都可以兼容。Hadoop體系構(gòu)造和數(shù)據(jù)節(jié)點〔DataNodes〕Hadoop文件系統(tǒng)是主從架構(gòu),一個Hadoop文件系統(tǒng)由唯一一個名目節(jié)點和數(shù)個數(shù)據(jù)節(jié)點組成。Hadoop文件系統(tǒng)對外表現(xiàn)為一個一般的文件系統(tǒng),用戶可以用文件名去存儲和訪問文件,而實際上文件是被分成不同的數(shù)據(jù)塊,這些數(shù)據(jù)塊就是存儲在數(shù)據(jù)節(jié)點上面。系,客戶端需要訪問名目節(jié)點才能知道一個文件的全部數(shù)據(jù)塊都保存在哪些數(shù)據(jù)節(jié)點上。的命令創(chuàng)立、刪除數(shù)據(jù)塊,和冗余復制。一個典型的Hadoop文件系統(tǒng)集群部署,是由一臺性能較好的機器運行名目節(jié)點,而集群里名目節(jié)點和數(shù)據(jù)節(jié)點一起運行,不過這種模式在正式的應(yīng)用部署中很少使用。Hadoop文件系統(tǒng)里面全部元數(shù)據(jù)的仲裁和存儲。這樣的設(shè)計使數(shù)據(jù)不會脫離名目節(jié)點的掌握。Hadoop文件系統(tǒng)命名空間HadoopHadoop允許用戶創(chuàng)立、刪除文件,在名目間轉(zhuǎn)移文件,重命名文件等,但是還沒有實現(xiàn)磁盤配額和文件訪問權(quán)限等功能,也不支持文件的硬連接和軟連接〔快捷方式,這些功能在短期內(nèi)不會實現(xiàn)。名目節(jié)點負責存儲和治理整個文件系統(tǒng)的命名空間,應(yīng)用程序可以指定某一個文件需要在Hadoop文件系統(tǒng)中冗余多少份,這個在Hadoop中稱為冗余因素,保存在名目節(jié)點里面。Hadoop存儲原理冗余數(shù)據(jù)保存Hadoop文件系統(tǒng)是為了大文件的牢靠保存而設(shè)計的,一個文件被劃分成一連串的數(shù)據(jù)塊,Hadoop這個文件。名目節(jié)點是依據(jù)數(shù)據(jù)塊的冗余狀況來作出處理決策的,數(shù)據(jù)節(jié)點會定期發(fā)送一個存在信號〔Heartbeat〕和數(shù)據(jù)塊列表給名目節(jié)點,存在信號使名目節(jié)點認為該數(shù)據(jù)節(jié)點還是有效的,而數(shù)據(jù)塊列表包括了該數(shù)據(jù)節(jié)點上面的全部數(shù)據(jù)塊編號。數(shù)據(jù)存取策略hadoop文件系統(tǒng)最核心的局部hadoop和其它分布式文件系統(tǒng)的最大區(qū)分就是可以調(diào)整冗余數(shù)據(jù)的位置,這個特性需要很多時間去優(yōu)化和調(diào)整。一、數(shù)據(jù)存放目前hadoop承受以機柜為根底的數(shù)據(jù)存放策略,這樣做的目的是提高數(shù)據(jù)牢靠性和充分利用網(wǎng)絡(luò)帶寬。當前具體實現(xiàn)了的策略只是這個方向的嘗試,hadoop短期的爭論目標之一就是在實際產(chǎn)品環(huán)境中觀看系統(tǒng)讀寫的行為,測試性能和爭論更深入的規(guī)章。一個大的hadoop集群常常橫跨多個機柜,而不同機柜之間的數(shù)據(jù)通訊同經(jīng)過交換機或者路由,所以同一個機柜中不同機器的通訊帶寬是比不同機柜之間機器通訊時候的大。Hadoopapiid,當文件系統(tǒng)啟動的時候,數(shù)據(jù)機就把自己所屬的機柜id發(fā)給名目機,然后名目機治理這些分組。Hadoop默認是每個數(shù)據(jù)機都是在不同的機柜上面,這種方法沒有做任何性能優(yōu)化,但是也有不少優(yōu)點:123缺點就是寫入數(shù)據(jù)的時候并不能完全利用同一機柜里面機器的帶寬。在默認的配置下,hadoop3,意思就是每一塊文件數(shù)據(jù)一共有3個地方存放,hadooprackid的不同機器上面,另外一個放rackid1/3的冗余數(shù)據(jù)在一個機柜里面,2/3的冗余數(shù)據(jù)在另外一個機柜里面,這樣既可以防止機柜特別時候的數(shù)據(jù)恢復,又可以提高讀寫性能。上面所說的策略目前還是在測試優(yōu)化階段。二、數(shù)據(jù)讀取數(shù)據(jù)讀取策略,依據(jù)前面所說的數(shù)據(jù)存放策略,數(shù)據(jù)讀取的時候,客戶端也有api確定自己的機柜id,讀取的時候,假設(shè)有塊數(shù)據(jù)和客戶端的機柜id一樣,就優(yōu)先選擇該數(shù)據(jù)節(jié)點,客戶端直接和數(shù)據(jù)節(jié)點建立連接,讀取數(shù)據(jù)。假設(shè)沒有,就隨機選取一個數(shù)據(jù)節(jié)點。三、數(shù)據(jù)復制主要是在數(shù)據(jù)寫入和數(shù)據(jù)恢復的時候發(fā)生,數(shù)據(jù)復制是使用流水線復制的策略。hadoop上面寫一個文件,首先它先把這個文件寫在本地,然后對文件進展分64m一塊,每塊數(shù)據(jù)都對hadoop名目效勞器懇求,名目效勞器選擇一個數(shù)據(jù)機列表,返回給客戶端,然后客戶端就把數(shù)據(jù)寫入第一臺數(shù)據(jù)機,并且把列表傳給數(shù)據(jù)機,當4k數(shù)據(jù)的時候,寫入本地并且發(fā)起連接到下一臺數(shù)據(jù)機,把這個4k傳過去,形成一條流水線。勢。通訊協(xié)議hadooptcp/ipClientProtocol和名目效勞器通訊,數(shù)據(jù)機使用DatanodeProtocol和名目效勞器通訊,而名目效勞器一般只是應(yīng)答客戶端和數(shù)據(jù)機的懇求,不會主動發(fā)起通訊。數(shù)據(jù)錯誤和特別hadoop文件系統(tǒng)的主要目標就是在硬件出錯的時候保證數(shù)據(jù)的完整性,它把磁盤錯誤作為器錯誤,數(shù)據(jù)機錯誤,和網(wǎng)絡(luò)傳輸特別。1、數(shù)據(jù)機出錯,每個數(shù)據(jù)時機定時發(fā)送一個心跳信息給名目效勞器,說明自己仍舊存活,io據(jù)塊也會標記為不行讀。這個時候某些數(shù)據(jù)塊的冗余份數(shù)有可能就低于它的冗余因子了,名目效勞器會定期檢查每一個數(shù)據(jù)塊,看看它是否需要進展數(shù)據(jù)冗余復制。2客戶端實現(xiàn)對數(shù)據(jù)塊的校驗,用md5sha1進展校驗,客戶端在創(chuàng)立文件的時候,會對每一個文件塊進展信息摘錄,并把這些信息寫入到同一個路徑的隱蔽文件里面。當客戶端讀取文件的時候,會先讀取該信息文件,然后對每個讀取的數(shù)據(jù)塊進展校驗,假設(shè)校驗出錯,客戶端就會懇求到另外一個數(shù)據(jù)機讀取該文件塊,并且報告給名目效勞器這個文件塊有錯誤,名目效勞器就會定期檢查,并且重復制這個塊。3FsImage和Editlog是名目效勞器上面兩個最核心的數(shù)據(jù)構(gòu)造,假設(shè)其中一個文件出錯的話,會造成名目效勞器不起作用,由于這兩個文件如此重要,所以名目效勞器上面可以設(shè)置多個備份文件和關(guān)心效勞器,當這兩個文件有轉(zhuǎn)變的時候,名目效勞器就會發(fā)起同步操作,雖然這樣增加了系統(tǒng)的負擔,但是在目前這個架構(gòu)上面為了實現(xiàn)數(shù)據(jù)的牢靠性,這個同步操作是格外必要的。Hadoop文件系統(tǒng)尚未實現(xiàn)的功能總結(jié):1數(shù)據(jù)效勞器死機或者名目效勞器死機,會引起文件喪失,并且不行后續(xù)恢復寫入。23、集群負載均衡,均衡策略臨時沒有實現(xiàn),有幾個策略格外有用,比方在某臺數(shù)據(jù)機可能磁盤過低的時候,把該數(shù)據(jù)機上面的一些數(shù)據(jù)轉(zhuǎn)移到還有很多空間剩余的數(shù)據(jù)機上;當某個文件突然被大量讀寫的時候,動態(tài)增加該文件的冗余因子,并且數(shù)據(jù)塊復制到更多的數(shù)據(jù)機上面,以提高讀取性能。45、訪問權(quán)限,現(xiàn)在是無限制訪問的,沒有訪問權(quán)限掌握。Hadoop文件系統(tǒng)性能分析由于沒方法建立大型的Hadoop文件系統(tǒng),只能節(jié)選一些網(wǎng)上的性能分析,以表示一二。1KosmosFilesystem的比較,KosmosFilesystemGoogle文件系統(tǒng)的Hadoop具有比較的意義。KFS是用c++編寫的,在代碼執(zhí)行效率上java好不少。數(shù)據(jù)插入測試:測試環(huán)境:11.8GHzDual-coreOpteronProcessor22104GBRAM47200RPMSATAdrives(mountedJBOD)測試使用Hypertable,這也是一個類似Googlebigtable的具體實現(xiàn),可以使用KFS和HDFS75,274,825715測試結(jié)果:KFS根本大幅度勝出。HDFS(noflush)Elapsedtime:170.66sAvgvaluesiz:e15.25bytesTotal

bytes1792158.6bytes1482527986869.7insersElapsedtime:167.44sAvgvaluesiz:e15.26bytesTotal

bytes1871062.7bytes1518534990690.8insersElapsedtime:179.91sAvgvaluesiz:e15.20bytesTotal

7.03bytes1737888.1bytes1520831084532.6insersElapsedtime:169.57sAvgvaluesiz:e15.22bytesTotalKFS(noflush)

7.11bytes1831688.5bytes1508092688937.4insersElapsedtime:125.51sAvgvaluesiz:e15.25bytesTotal

bytes2436864.8bytes14825279118120.0insersElapsedtime:126.25sAvgvaluesiz:e15.26bytesTotal

bytes2481447.5bytes15185349120276.3insersElapsedtime:135.51sAvgvaluesiz:e15.20bytesTotal

7.03bytes2307335.2bytes15208310112231.1insersElapsedtime:127.66sAvgvaluesiz:e15.22bytesTotal

7.11bytes2433069.6bytes15080926118137.4insers2Hadoophadoop自帶的FileBench1ghadoop文件系統(tǒng)的比較,好很多。本地文件系統(tǒng)測試:java -classpathhadoop-0.16.4-test.jar:hadoop-0.16.5-dev-core.jar:lib/commons-logging-api-1.0.4.jar:lib/log4j-1.2.13.jar:lib/commons-logging-1.0.4.jar:lib/commons-cli-2.0-SNAPSHOT.jarorg.apache.hadoop.io.FileBench-dir/home/ssmax/test-nolzo-nozipDIR:file:/home/ssmax/testWSEQ_PLN:42secondsWTXT_PLN:31secondsRSEQ_PLN:25secondsRTXT_PLN:21seconds取。Hadoopjava -classpathbuild/hadoop-0.16.5-dev-test.jar:hadoop-0.16.5-dev-core.jar:lib/commons-logging-api-1.0.4.jar:lib/log4j-1.2.13.jar:lib/commons-logging-1.0.4.jar:lib/commons-cli-2.0-SNAPSHOT.jar org.apache.hadoop.io.FileBench -dir“hdfs://38:9000/user/ssmax“-now-nolzo-nozipDIR:hdfs://38:9000/user/ssmaxWSEQ_PLN:437secondsWTXT_PLN:439secondsRSEQ_PLN:>15RTXT_PLN:>15分鐘數(shù)據(jù)機做讀操作,讀取速度會大大提高。java -classpathhadoop-0.16.5-dev-test.jar:hadoop-0.16.5-dev-core.jar:lib/commons-logging-api-1.0.4.jar:lib/log4j-1.2.13.jar:lib/commons-logging-1.0.4.jar:lib/commons-cli-2.0-SNAPSHOT.jar org.apache.hadoop.io.FileBench -dir“hdfs://38:9000/user/ssmax“-now-nolzo-nozip DIR:hdfs://38:9000/user/ssmaxRSEQ_PLN:80secondsRTXT_PLN:63secondsrackidHadoopHbaseHadoopHypertableKFSBigtableGFSc++實現(xiàn)的,這里先記錄一下,以后再做爭論。Hypertable:HypertableHBaseHypertableBigtable〔InfoQHBaseJimKellermanHadoopHBaseJava,C+HypertableHbase數(shù)據(jù)模型Hbase是一個類似BigtableBigtable一個稀疏的,長期存儲的{存在硬盤上,多維度的,排序的映射表。這張表的索引是行關(guān)鍵字,列關(guān)鍵字和時間戳。每個值是一個不解釋的字符數(shù)組,數(shù)據(jù)都是字符串,沒類型。用戶在表格中存儲數(shù)據(jù),每一行都有一個可排序的主鍵和任意多的列。由于是稀疏存儲的,所以同一張表里面的每一行數(shù)據(jù)都可以有截然不同的列。列名字的格式是“<family>:<label>“,都是由字符串組成,每一張表有一個family集合,這個集合是固定不變的,相當于表的構(gòu)造,只能通過轉(zhuǎn)變表構(gòu)造來轉(zhuǎn)變。但是label值相對于每一行來說都是可以轉(zhuǎn)變的。Hbase把同一個family里面的數(shù)據(jù)存儲在同一個名目底下,而Hbase的寫操作是鎖行的,每一行都是一個原子元素,都可以加鎖。全部數(shù)據(jù)庫的更都有一個時間戳標記,每個更都是一個的版本,而hbase會保存肯定一次獵取全部版本。概念視圖:RowKeyTimeColumnStampRowKeyTimeColumnStamp“contents:“Column“anchor:“Column“mime:““n.www“ t9“anchor:cnnsi““CNN“t8“anchor:my.look.ca““CNN“t6“<html>...““text/html“t5“<html>...“t3“<html>...“上圖是一個存儲Web網(wǎng)頁的范例列表片斷UR{即n.wwcontents列族{原文用family,譯為族,詳見列族}存放網(wǎng)頁內(nèi)容,anchor列族存放引用該網(wǎng)頁的CNN的主頁被SportsIllustrater{SI,CNN的王牌體育節(jié)目MY-look的主頁引用,因此該行包含了名叫“anchor:cnnsi”和“anchhor:my.look.ca”的列。每個錨鏈接只有一個版本{由時間戳標識,如t,t;而contents列則有三個版本,分別由時間t3,t5,和t6標識。物理視圖雖然從概念視圖來看每個表格是由很多行組成它是依據(jù)列來保存的,這點在數(shù)據(jù)設(shè)計和程序開發(fā)的時候必需牢記。上面的概念視圖在物理存儲的時候應(yīng)當表現(xiàn)成下面那樣子:RowRowKeyTimeStampColumn“contents:““n.www“t6“<html>...“t5“<html>...“t3“<html>...“RowKey TimeStamp“n.www“ t9t8

Column“anchor:““anchor:cnnsi“ “CNN““anchor:my.look.ca““CNN“RowRowKeyTimeStampColumn“mime:““n.www“t6“text/html“空白的單元格的時候,會返回null儲的時候,數(shù)據(jù)會依據(jù)時間戳排序。例子:9row[0-9],先寫入anchor:foo列,再寫入anchor:bar列,最終重復寫入anchor:foo列,由于是同一個列族,寫到同一個映射文件里面,最終寫到文件里面是這個樣子的:row=row0,column=anchor:bar,timestamp=1174184619081row=row0,column=anchor:foo,timestamp=1174184620720row=row0,column=anchor:foo,timestamp=1174184617161row=row1,column=anchor:bar,timestamp=1174184619081row=row1,column=anchor:foo,timestamp=1174184620721row=row1,column=anchor:foo,timestamp=1174184617167row=row2,column=anchor:bar,timestamp=1174184619081row=row2,column=anchor:foo,timestamp=1174184620724row=row2,column=anchor:foo,timestamp=1174184617167row=row3,column=anchor:bar,timestamp=1174184619081row=row3,column=anchor:foo,timestamp=1174184620724row=row3,column=anchor:foo,timestamp=1174184617168row=row4,column=anchor:bar,timestamp=1174184619081row=row4,column=anchor:foo,timestamp=1174184620724row=row4,column=anchor:foo,timestamp=1174184617168row=row5,column=anchor:bar,timestamp=1174184619082row=row5,column=anchor:foo,timestamp=1174184620725row=row5,column=anchor:foo,timestamp=1174184617168row=row6,column=anchor:bar,timestamp=1174184619082row=row6,column=anchor:foo,timestamp=1174184620725row=row6,column=anchor:foo,timestamp=1174184617168row=row7,column=anchor:bar,timestamp=1174184619082row=row7,column=anchor:foo,timestamp=1174184620725row=row7,column=anchor:foo,timestamp=1174184617168row=row8,column=anchor:bar,timestamp=1174184619082row=row8,column=anchor:foo,timestamp=1174184620725row=row8,column=anchor:foo,timestamp=1174184617169row=row9,column=anchor:bar,timestamp=1174184619083row=row9,column=anchor:foo,timestamp=1174184620725row=row9,column=anchor:foo,timestamp=1174184617169其中anchor:foo被保存了兩次,由于時間戳不同,是兩個不同的版本,而最的數(shù)據(jù)排在前面,所以最那次更會先被找到。分布式數(shù)據(jù)庫體系構(gòu)造Hbase的效勞器體系構(gòu)造也是遵從簡潔的主從效勞器架構(gòu),由Hregion效勞器群和HBaseMaster主效勞器構(gòu)成。Hregion效勞器對用戶來說,每個表是一堆數(shù)據(jù)的集合,靠主鍵來區(qū)分。物理上,一張表是被拆分成多塊,每一塊就稱呼為一個Hregion+開頭/Hregion,一個HregionHregion上面的。全部的數(shù)據(jù)庫數(shù)據(jù)一般是保存在Hadoop分布式文件系統(tǒng)上面,用戶通過一系列Hregion效勞器獵取這些數(shù)據(jù),一般一臺機器上面運行一個Hregion效勞器,而每一個區(qū)段Hregion只會被一個Hregion效勞器維護。當用戶需要更數(shù)據(jù)的時候,他會被安排到對應(yīng)的Hregion效勞器提交修改,這些修改先是被寫到Hmemcache緩存和效勞器的Hlog文件里面,Hmemcache是在內(nèi)存中的緩存,保存最近更的數(shù)據(jù),Hlog是磁盤上面的記錄文件,它記錄著全部的更操作,當操作寫Hlog之后,commit調(diào)用才會返回給客戶端。Hregion效勞器會先訪問Hmemcache才回到HstoresHstoreHstore集合包含很多HstoreFiles具體文件,這些文件都是B樹構(gòu)造的,便利快速讀取。定期HRegion.flushcache把緩存里面的內(nèi)容寫到文件中,一般這樣會增加一個的HstoreFile文件,而此時高速緩存就會被清空,并且寫入一個標記到Hlog,表示上面的內(nèi)容已經(jīng)被寫入到文件中保存。在啟動的時候,每個Hregion效勞器都會檢查自己的Hlog文件,看看最近一次執(zhí)行flushcache件中了;假設(shè)有更,效勞器就會先把這些更寫入高速緩存,然后調(diào)用flushcache寫入到文件。最終效勞器會刪除舊的Hlog文件,并開頭給用戶訪問數(shù)據(jù)。因此,為了節(jié)約時間可以很少調(diào)用flushcacheflushcache而且Hlogflushcache的時候會造成系統(tǒng)負載瞬間增加。Hlog會被定期回滾,回滾的時候是依據(jù)時間備份文件,每當回滾的時候,系統(tǒng)會刪除那些已經(jīng)被寫到文件的更,回滾Hlog只會占用很少的時間,建議常?;貪L以削減文件尺寸。每一次調(diào)用flushcache會生成一個的HstoreFileHstore里面獵取一個值都需要訪問全部的HstoreFile文件,這樣格外耗時,所以我們要定期把這些分散的文件合并到一個大文件里面,HStorepact資源的,當HstoreFile文件的數(shù)量超過一個設(shè)定值的時候才會觸發(fā)。Google的BigtableHbase面兩點就可以了:1、flushcache會建立一個的HstoreFile里面,flushcache之后,log的重建次數(shù)會清零。2compact會把全部HstoreFile文件合并成一個大文件。3、和Bigtable不同的是,Hbase每個更假設(shè)是被正確提交了,commit沒有返回錯誤的話,它就肯定是被寫到記錄文件里面了,這樣不會造成數(shù)據(jù)喪失。兩個Hregion可以通過調(diào)用HRegion.closeAndMerge合并成一個的Hregion,當前版本這個操作是需要兩臺Hregion都停機才能操作。當一個Hregion變得太過巨大的時候,超過了設(shè)定的閾值, HRegion效勞器會調(diào)用HRegion.closeAndSplit,這個Hregion會被拆分為兩個并且報告給主效勞器讓它打算由哪個Hregion效勞器來存放的Hregion。這個拆分過程是格外快速的,由于兩個的Hregion最初只是保存原來HregionFile文件的引用,而這個時候舊的Hregion會處于停頓效勞的狀態(tài),當?shù)腍region合并完成并且把引用刪除了以后,舊的Hregion才會刪除。最終總結(jié)幾點:1、客戶端以表格的形式讀取數(shù)據(jù)2、一張表是被劃分成多個Hregion區(qū)域3、Hregion是被Hregion效勞器治理的,當客戶端需要訪問某行數(shù)據(jù)的時候,需要訪問Hregion效勞器。4、Hregions效勞器里面有三種方式保存數(shù)據(jù):AHmemcache高速緩存,保存是最寫入的數(shù)據(jù)B、Hlog記錄文件,保存的是提交成功了,但未被寫入文件的數(shù)據(jù)Hstores文件,數(shù)據(jù)的物理存放形式。Hbase主效勞器HregionHmaster效勞器通訊,Hmaster的主要任務(wù)就是要告知每個Hregion效勞器它要維護哪些Hregion。Hmaster效勞器會和每個Hregion效勞器保持一個長連接導致:A、Hregion效勞器自動重啟。B、Hmaster認為HregionHregion安排到其它Hregion效勞器。和Google的BigtableBigtable的TabletServer和主效勞器通訊中斷的狀況下,HbaseHbase沒有Bigtable那樣額外的加鎖系統(tǒng),BigtableTabletServerHbase只有唯一一個接入點,就是Hmaster效勞器。當一個的Hregion效勞器登陸到Hmaster效勞器,Hmaster會告知它先等待安排數(shù)據(jù)。而當一個Hregion死機的時候,Hmaster會把它負責的Hregion安排到其它Hregion效勞器。元數(shù)據(jù)表之前我們說過Hregion正好在執(zhí)行這些操作的過程中消滅死機,這個就要通過Hbase的元數(shù)據(jù)信息來區(qū)分哪一份才是正確的數(shù)據(jù)文件了,為了區(qū)分這樣的狀況,每個Hregion都有一個”regionId”來標識它的唯一性。所以一個Hregion的表達符最終是表名+開頭主鍵+唯一id〔tablename+startkey+regionId〕舉個例子:hbaserepository,w-nk5YNZ8TBb2uWFIRJo7V==,6890601455914043877我們可以用這個識別符來區(qū)分不同的Hregion,這些數(shù)據(jù)就稱呼為元數(shù)據(jù),而元數(shù)據(jù)本身也是被保存在HregionHregion標識符和實際Hregion效勞器的映射關(guān)系。元數(shù)據(jù)表本身也會增長,并且可能被分割為幾個Hregion,為了定位這些Hregion,有一個ROOTtabl只存在一個Hregion。在Hbase啟動的時候,主效勞器先去掃描根數(shù)據(jù)表,由于這個表只會有一個Hregion,所以這個Hregion的名字是被寫死的Hregion效勞器需要肯定的時間。后把元數(shù)據(jù)表安排到不同的Hregion效勞器。最終就是掃描元數(shù)據(jù)表,找到全部Hregion區(qū)域的信息,然后把它們安排給不同的Hregion效勞器。主效勞器在內(nèi)存中保存著當前活潑的Hregion效勞器的數(shù)據(jù),因此假設(shè)主效勞器死機的話,整個系統(tǒng)也就無法訪問了,而效勞器的信息也沒有必要保存到文件里面。元數(shù)據(jù)表和根數(shù)據(jù)表的每一行都包含一個列族,info列族:info:regioninfoHregionInfo對象。info:server保存了一個字符串,是效勞器地址HServerAddress.toStringinfo:startcode一個長整型的數(shù)字的字符串,是Hregion效勞器啟動的時候傳給主效勞器的,讓主效勞器打算這個Hregion效勞器的信息有沒有更改。因此,當一個客戶端拿到根數(shù)據(jù)表地址以后,就沒有必要再連接主效勞器了。主效勞器的負載相對就小了很多,它只會處理超時的Hregion效勞器,在啟動的時候掃描根數(shù)據(jù)表和元數(shù)據(jù)表,和返回根數(shù)據(jù)表的Hregion效勞器地址。因此Hbase的客戶端是格外簡單的,它常常需要掃瞄元數(shù)據(jù)表和根數(shù)據(jù)表,在查詢表格的時候,假設(shè)一個Hregion端保存的映射關(guān)系并不會始終正確的。這里的機制還需要進一步完善。總結(jié):1、HregionHregion訪問,一個HregionHregion效勞器上面。2Hregion會注冊到主效勞器上面。34Hregion效勞器列表只有主效勞器知道。5HregionHregion效勞器的對應(yīng)關(guān)系保存在兩個特別的Hregion里面,它們像Hregion一樣被安排到不同的效勞器。6〔在程序中寫死〕7客戶端需要自己掃瞄這些表,來找到數(shù)據(jù)在哪里。Hbase和傳統(tǒng)關(guān)系數(shù)據(jù)庫的比照分析HbaseBigtable來開發(fā)的,套用一個Bigtable的定義就是:ABigtableisasparse,distributed,persistentmultidimensionalsortedmap.BigtableHbase就是這樣一個基于列模式的映射數(shù)據(jù)庫,它只能表示很簡潔的鍵-數(shù)據(jù)的映射關(guān)系,它大大簡化了傳統(tǒng)的關(guān)系數(shù)據(jù)庫。1、數(shù)據(jù)類型,Hbase只有簡潔的字符串類型,全部類型都是交由用戶自己處理,它只保存字符串。而關(guān)系數(shù)據(jù)庫有豐富的類型選擇和存儲方式。2、數(shù)據(jù)操作,Hbase沒有簡單的表和表之間的關(guān)系,所以也不能也沒有必要實現(xiàn)表和表之間的關(guān)聯(lián)等操作。而傳統(tǒng)的關(guān)系數(shù)據(jù)通常有各種各樣的函數(shù)、連接操作。Hbasealter Altercolumnfamilyschema;passtablenameandadictionaryspecifyingnewcolumnfamilyschema.DictionariesaredescribedbelowintheGENERALNOTESsection.Dictionarymustincludenameofcolumnfamilytoalter.Forexample,tochangethe”f1”columnfamilyintable”t1”fromdefaultstoinsteadkeepamaximumof5cellVERSIONS,do:hbase>alter”t1”,{NAME=>”f1”,VERSIONS=>5}count Countthenumberofrowsinatable.ThisoperationmaytakeaLONGtime(Run”$HADOOP_HOME/bin/hadoopjarhbase.jarrowcount”torunacountingmapreducejob).Currentcountisshownevery1000rowsbydefault.Countintervalmaybeoptionallyspecified.Examples:hbase>count”t1”hbase>count”t1”,100000create Createtable;passtablename,adictionaryofspecificationspercolumnfamily,andoptionallyadictionaryoftableconfiguration.DictionariesaredescribedbelowintheGENERALNOTESsection.Examples:hbase>create”t1”,{NAME=>”f1”,VERSIONS=>5}hbase>create”t1”,{NAME=>”f1”},{NAME=>”f2”},{NAME=>”f3”}hbase>#Theaboveinshorthandwouldbethefollowing:hbase>create”t1”,”f1”,”f2”,”f3”hbase>create”t1”,{NAME=>”f1”,VERSIONS=>1,TTL=>2592000,\BLOCKCACHE=>true}describeDescribethenamedtable:e.g.“hbase>describe”t1”“delete Putadeletecellvalueatspecifiedtable/row/columnandoptionallytimestampcoordinates.Deletesmustmatchthedeletedcell”scoordinatesexactly.Whenscanning,adeletecellsuppressesolderversions.Takesargumentslikethe”put”commanddescribedbelowdeleteallDeleteallcellsinagivenrow;passatablename,row,andoptionallyacolumnandtimestampdisable Disablethenamedtable:e.g.“hbase>disable”t1”“drop Dropthenamedtable.Tablemustfirstbedisabledenable Enablethenamedtableexists Doesthenamedtableexist?e.g.“hbase>exists”t1”“exit Type“hbase>exit“toleavetheHBaseShellget Getroworcellcontents;passtablename,row,andoptionallyadictionaryofcolumn(s),timestampandversions.Examples:hbase>get”t1”,”r1”hbase>get”t1”,”r1”,{COLUMN=>”c1”}hbase>get”t1”,”r1”,{COLUMN=>[”c1”,”c2”,”c3”]}hbase>get”t1”,”r1”,{COLUMN=>”c1”,TIMESTAMP=>ts1}hbase>get”t1”,”r1”,{COLUMN=>”c1”,TIMESTAMP=>ts1,VERSIONS=4}list Listalltablesinhbaseput Putacell”value”atspecifiedtable/row/columnandoptionallytimestampcoordinates.Toputacellvalueintotable”t1”atrow”r1”undercolumn”c1”markedwiththetime”ts1”,do:hbase>put”t1”,”r1”,”c1”,”value”,ts1scan Scanatable;passtablenameandoptionallyanarrayofcolumnnamesORanarrayofcolumnnamesANDadictionaryofscannerspecifications.Ifyouwishtoincludescannerspecifications,youmustalsoincludeanarrayofcolumns.Scannerspecificationsmayincludeoneormoreofthefollowing:LIMIT,STARTROW,STOPROW,orTIMESTAMP.Toscanallmembersofacolumnfamily,leavethequalifieremptyasin”col_family:”.Examples:hbase>scan”.META.”hbase>scan”.META.”,[”info:regioninfo”]hbase>scan”t1”,[”c1”,”c2”],{LIMIT=>10,STARTROW=>”xyz”}version OutputthisHBaseversion3、存儲模式,Hbase是基于列存儲的,每個列族都有幾個文件保存,不同列族的文件是分別的。傳統(tǒng)的關(guān)系數(shù)據(jù)庫是基于表格構(gòu)造和行模式保存的。4Hbase而它舊有的版本仍舊會保存,所以它實際上是插入了的數(shù)據(jù),而不是傳統(tǒng)關(guān)系數(shù)據(jù)庫里面的替換修改。5Hbase和Bigtable夠輕易的增加或者削減〔在硬件錯誤的時候〕硬件數(shù)量,而且對錯誤的兼容性比較高。而傳統(tǒng)的關(guān)系數(shù)據(jù)庫通常需要增加中間層才能實現(xiàn)類似的功能。當前的關(guān)系數(shù)據(jù)庫根本都是從上世紀70年月進展而來的,它們根本都有一下的體系特點:1234log而Bigtable和Hbase用就是以字符為根底的,Bigtable和Hbase由于其中的時間戳特性,Bigtable和Hbase與生俱來就特別適合于開發(fā)wiki、archiveorg之類的效勞,而HbaseBigtableGoogle1GoogleAnalytics網(wǎng)站流量分析(analytics.google)〔cookie判定〕,另外一個就是頁面掃瞄量〔View〕,網(wǎng)站治理員只要在每一個需要統(tǒng)計的頁面加上google供給javascript代碼,就可以每天在后臺看到相關(guān)的統(tǒng)計信息了。這個效勞的數(shù)據(jù)保存主要由兩個打表實現(xiàn):第一個是原始點擊表,記錄了用戶點擊頁面的原始數(shù)據(jù),這個表的列包括:網(wǎng)站名稱,url和用戶點擊時間、ip等資料,按用戶點擊時間排序,大小掌握在200TB左右,定期需要做壓縮備份等操作。其次個表就是統(tǒng)計數(shù)據(jù)表,這個表是從原始點擊表中計算而來,定期運行批量計算任務(wù)生成數(shù)據(jù)〔使用Map/Reduce程序〕,20TB左右。2GoogleEarth地圖(maps.google)這個效勞包括網(wǎng)頁版的google地圖和客戶端版的google地球。用戶通過這些效勞,能選擇不同的區(qū)分率掃瞄地圖、衛(wèi)星照片等數(shù)據(jù)。這個系統(tǒng)主要包括一個數(shù)據(jù)處理表,和一系列的數(shù)據(jù)效勞表〔用戶讀取時候用〕。原始的圖片信息通過程序批量輸入到數(shù)據(jù)處理表,形成格式化數(shù)據(jù)。這個數(shù)據(jù)處理表的每一行表示了物理地圖上面的每一塊,而鍵值的命名確保這些地理塊是連續(xù)的,由于地理的信息很多,所以有很多列族,根本上每個列族都有圖片數(shù)據(jù),多列族確保數(shù)據(jù)是稀疏的,單個存儲文件不會太大。后臺處理程序定期處理這些數(shù)據(jù),把它們整理并錄入數(shù)據(jù)效勞表,并清空處理過的原始數(shù)據(jù)。需要遍歷全部數(shù)據(jù)表。3、網(wǎng)絡(luò)歷史記錄 (“://google/psearch)“google/psearch)主要功能:查看并搜尋您過去曾訪問過的網(wǎng)頁,包括Google的搜尋記錄。查找有關(guān)網(wǎng)絡(luò)活動的搜尋趨勢,如最常訪問的網(wǎng)站和熱門搜尋等。依據(jù)您搜尋的內(nèi)容以及曾訪問過的網(wǎng)站,獵取更具共性化的搜尋結(jié)果。這個效勞中的網(wǎng)絡(luò)歷史記錄是需要安裝Google工具欄并在掃瞄器中啟用才能搜集數(shù)據(jù)。id,而每種類型的操作〔搜尋關(guān)鍵字、掃瞄網(wǎng)頁等〕都有一個不同列族,用戶搜尋記錄是通過后臺程序從搜尋引擎端批量生成并插入的,而網(wǎng)頁掃瞄記錄是通過用戶的Google工具欄定期上傳數(shù)據(jù)并插入的。同地區(qū)的用戶再建立多個大表集群,讓用戶可以就近訪問,加快傳輸速度。為了保證用戶之間的共享不會占用太多資源,我們?yōu)槊總€用戶加上了簡潔的配額機制,分別在客戶端和大表集群上面實現(xiàn)。結(jié)論:Hbase由于Hbase頭開頭就使用HbaseHbaseapiHbaseJDBC而且最重要的一點是當前hbaseapi裝的時候是hbase-0.1.3,一個月后版本進展到hbase-0.2.0,全部API根本都轉(zhuǎn)變了,連HQLhbase要同時升級hadoop,這樣升級所需要的維護工作量太大。固然,據(jù)聞HbaseHypertable的目的就是在web應(yīng)用市場上面取代Mysql。1測試環(huán)境:3臺效勞器組成的hadoop由一臺單獨的機器單機模擬Hbase由一臺機器單機測試Mysql測試規(guī)模:50萬條記錄以上,單線程、多線程測試測試結(jié)果:插入100條記錄插入1000條記錄

HBase155ms/154ms740ms/884ms

Mysql243ms/198ms1506ms/1554ms單線程

插入10000條記錄 8304ms/6610ms插入100000條記錄43090ms/64715ms讀取500000

14110ms/12839m108082ms/110664ms條記錄插入100條記錄1001000條記錄讀取500000條記錄插入100條記錄1000程 讀取500000左右的條記錄

640ms/721ms5929ms/3825ms/4134ms35684ms/52677ms/34208ms最快的1104ms/最慢的110897ms325907ms/322465ms/342163ms最快的717ms

2779ms/2794ms?15352ms/12912ms/12853ms135839ms/161711ms/119909ms假設(shè)不加limit,數(shù)據(jù)庫連接超時17455ms/18953ms/15169ms假設(shè)不加limit,數(shù)據(jù)庫連接超時HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合于非構(gòu)造化數(shù)據(jù)存儲的數(shù)據(jù)庫.另一個不同HBasechar).上面兩種特性,導致HBase關(guān)聯(lián),正由于這樣在查詢的時候效率格外高HBase數(shù)據(jù)表的性能選項:MAX_VERSIONS:每一個單元保存多少版本的數(shù)據(jù)(默認是3)MAX_LENGTH:每個單元中的版本能夠保存多少字節(jié)的數(shù)據(jù)〔默認字節(jié)數(shù)是32位有符號整數(shù)最大值〕COMPRESSION:數(shù)據(jù)壓縮,有BLOCK壓縮和RECORDIN_MEMORYHDFS的備份BLOOMFILTER:假設(shè)這個列組支持布隆過濾器(BLOOMFILTER),那么在內(nèi)存中有個索引來快速IO果在這個列組你擁有大量的列,每一個列的數(shù)據(jù)包含的數(shù)據(jù)格外小,你可能需要在這個列組中應(yīng)用布隆過濾器〔BLOOMFILTER〕2測試目標:測試列族增長對性能的影響10005000任意一列。測試結(jié)果:單機集群列族數(shù)量101005001000建表時間12.319.245.9Timeout每秒寫入164323419Timeout每秒讀取99139122Timeout5機器集群列族數(shù)量101005001000建表時間12.218.746.4Timeout每秒寫入29153376Timeout每秒讀取119111120Timeout測試結(jié)論:Hbase建表時間過長,對大列族的時候支持不好寫入速度在多機集群的時候提高較快3測試目標:Hbase的行排序是依據(jù)主鍵排序,測試動態(tài)或者反序插入時候的性能。測試數(shù)據(jù):動態(tài)生成字母數(shù)據(jù),zzzzz-aaaaa,還有隨機插入測試結(jié)果:單機集群〔每秒多少行〕寫入行10,000100,0001,000,000挨次485432334反序451477354隨機4624213345機集群〔每秒多少行〕寫入行10,000100,0001,000,000挨次488440346反序522387343隨機468441370測試結(jié)論:承受B樹存儲和寫入緩存,寫入數(shù)量和挨次對速度影響并不大,應(yīng)當只是cpu占用的不同。主要瓶頸還是在網(wǎng)絡(luò)傳輸速度上。4測試目標:測試大表下的讀取性能測試數(shù)據(jù):在肯定規(guī)模的表中隨機讀取5000條記錄的時間測試數(shù)據(jù):單機集群〔每秒多少行〕規(guī)?!残小?0,000100,0001,000,000讀取9542245機集群〔每秒多少行〕規(guī)?!残小?0,000100,0001,000,000讀取953435測試結(jié)論:讀取速度隨著表規(guī)模的增加而降低,集群模式下面讀取表現(xiàn)比較優(yōu)秀。估量假設(shè)加上數(shù)據(jù)合并以后集群的讀取力量會更加強勁。總結(jié):Hypertable和Hbase但是照這個方向進展下去在web應(yīng)用端有很好的前景。Hadoop文件系統(tǒng)相對較穩(wěn)定,可以考慮在產(chǎn)品中試驗。參考文獻:TheHadoopDistributedFileSystem:ArchitectureandDesign“:///core/docs/r0.16.4/hdfs_design.html“:///core/docs/r0.16.4/hdfs_design.htmlHDFSUndertheHoodPresentation1“

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論