<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    HBase一些tip

    1,row是有序的,可以看做RDBMS的一級索引

    2,一個列簇CF的所有列存儲在一個HFile里

    3,CF要在建表時定義,少變化,更不要建太多

    4,version和timestamp是對應的,每個cell有不同的版本,就說明是在不同的timestamp存儲的,如果重復的timestamp,那么就說明是一個版本

    5,定位一個數據,需要rowkey,column和timestamp,即SortedMap<RowKey,List<SortedMap<Column,List<Value,Timestamp>>>>

    6,初始一個region,之后自動sharding,一臺server大概10-1000個region,每個region大小為1-2GB

    7,每一個HFile有一個block index,可以只用一次disk seek完成查詢

    8,數據更新時要寫commit log即常說的WAL——write-ahead-log,每次操作都會記錄在內存memstore,當memstore滿了以后自動flush到HFile的disk,在做flush時,reader和writer不被阻塞,可以繼續服務(這是因為,flush做的是一個滾動操作,老的滿的數據flush到磁盤,而完成后的新的空的memstore繼續服務,因為memstore已經是按key的順序排好的,所以不需要額外操作,只要寫和flush就行)

    9,刪除操作是邏輯的,因為存儲文件不可變,所以會放置一個刪除標記到每個鍵值對

    10,通過compaction將小的hfile合并為大的,compaction有兩種類型:minor和major,前者通過多路歸并完成多個小文件到少量大文件的合并;后者重寫整個CF到一個新的文件,在做compaction的時候可以把之前標記過delete的kv pair放棄,即不寫到新的文件

    11,HBase由客戶端庫,一臺master server和多臺region server組成,master負責regions的負載均衡,master不存儲數據,只做調度

    12,掃表scan是線性時間的,查詢是對數時間的,而極端情況的查詢是常數時間的(使用bloom filter)

    13,在put時,要注意flush的時間,沒有flush的數據是不會被get到的,從源碼可以了解到,flush有兩種情況,一是顯示調用flushCommits();另外就是到了client端的writebuffer上限觸發,hbase默認client的writebuffer size是2M,可以通過配置去修改

    14,HBase的client里,caching針對行模式(返回多少行),而batching針對列模式(返回多少列),都是在scan時提高效率(減少RPC)的方法

    15,用HBase的接口時,通過Filter的使用可以減少網絡傳輸的數據量,從而減輕在客戶端使用的時間成本,get或scan你想要的東西,不要的東西直接在server通過filter過濾到

    16,在重用Configuration時,要記得每次都會增加一個引用數,因此在使用完后最好調用close方法將connection釋放掉

    17,HBase的block size和hdfs的block size是不一樣的,前者是指處理block操作時的數據大小,默認是64KB,而后者是用來分布式存儲文件,默認大小是64MB

    18,RDBMS和Hbase的區別:存儲結構b樹或b+樹,Hbase采用類似LSM樹的做法(Log-Structured Merge Trees),LSMT的簡單過程描述是,數據首先被順序存儲到一個log file里,在寫滿后將這些數據更新到in memory store,然后flush有序key value pair到磁盤,生成一個文件。磁盤文件的組織形式類似B樹,但是對于磁盤順序訪問做了優化,其中每個文件都被完全填充為單頁或多頁的block,而這些文件的update本身是rolling merge策略,即系統在直到block寫滿的時候才將in memory的數據打包。因為flush是經常進行的,導致系統中會有很多的文件,一個后臺進程在不斷的合并小文件到大文件從而將磁盤seek縮減到少量的文件范圍。于此同時,磁盤的樹也可以進行分裂操作,將大文件分割為若干文件以便擴展更新。而所有的存儲都是key有序的。

    19,Hbase查詢時,先到in memory里查,再到on disk里查,這樣的行為可以保證了一致性;刪除時是邏輯刪除,先將delete標志打上,后期在異步重寫的時候,標記了delete的key會被最終物理刪除。

    20,HBase有兩類文件,一類用于WAL的log,另一類用于數據存儲。

    21,一般HBase的訪問流程是:先到zookeeper quorum取row key,通過從zk中查詢-ROOT-里的服務器名字實現;接著拿著取到的服務器名字去region server查詢持有.META. 表region并且包含了rowkey的server名字;最后查詢.META.服務器,獲取到包含對應rowkey region的server name。一旦獲取這些信息,客戶端將其緩存起來,以后就知道如何到哪里去查找并且直接和region server聯系了。

    22,在源碼級別,HMaster負責分配HRegionServer,HRegionServer維護一個HRegion,當HRegion建立時,為每張表的每個HColumnFamily建立一個Store,每個Store包含一個或者多個StoreFile(輕量級的HFile包裝),一個Store同時也有一個MemStore,還有一個HRegionServer共享的HLog。

    23,在做put操作時,region server先檢查本次put是否需要寫WAL,一旦數據寫入WAL,那么它就進入MemStore,同時檢查MemStore是否滿,如果是,做一次flush,寫到一個HFile里存到HDFS,同時維護一個最后一次寫入的序列號,以便系統知道到目前為止的持久數據信息。

    24,在HFile被持久化后,log文件就不再有用了,這時自動從.log目錄移動到.oldlog目錄(當然也有配置可以配置滾動周期),默認10分鐘后由HBase自動刪除。

    25,每個table有一個目錄,在這個目錄里,每個列族有一個自己的目錄。

    26,region split發生在當一個region的存儲文件大小達到配置的hbase.hregion.max.filesize時進行。具體過程就是:系統為新的region創建兩個原region的索引文件,每個各持有原來一半的數據,region server在父region創建一個splits目錄,接著關閉region拒絕新請求,然后再splits目錄里構建必要的新的region目錄文件結構存放剛才的兩個half 大小的文件。成功后,系統將兩個新的region目錄添加到表目錄,更新.META.表以表明父region做了split,同時表明新的兩個region是什么。

    27,HFile基于Hadoop的TFile類型,模仿了BigTable的SSTable格式;文件是變長的,其中定長的部分是file info 和trailer,而數據以keyvalue存入data塊,默認大小64KB,而HDFS默認塊大小是64MB,兩者沒有關系。結構類似:

    YYYY~H0S6~ALGP4DPBEO6DS

    28,KeyValue在HFile中就是一個簡單的字節序列,結構類似

    A[BN}2`4~5B]F7@$83%Z@3S

    29,WAL是容災的重要武器,類似mysql的binlog,記錄了所有的變化,這就可以保證在數據進入memstore后而沒有持久這段時間因為突發原因導致數據丟失時候的容災。流程如下:

    8D`N7YP]%WQ}Y9LO3H0}$CL

    30,在上面這圖中,有LogSyncer和LogRoller,前者是默認關閉的,如果開啟后,那么每次寫入都會觸發一次sync,將update同步到其他的server,而且還是pipeline形式的順序寫,不是多路復寫;后者負責滾動記錄log,可以設置時間間隔每隔一定時間來滾動日志,也可以根據大小來滾動,這個都可以配置。

    31,容災恢復數據的一項重要措施是replay日志,也就是重放WAL;日志回放有兩種觸發條件:一是集群啟動時,二是服務器fail時;當master啟動時,檢查.log目錄里是否有log文件,有的話則做log splitting——讀入log然后根據記錄的region將其分配到新文件。

    32,get和scan在近幾個版本中實現等價,因為對于特定行和列沒有索引的概念,而最小的訪問單元是block,因此如果要請求數據,那么一定會加載一個RegionServer的實例的block然后掃描它,Get其實就是一個確定了row的scan。

    33,在查詢時,一個周期是這樣的:因為客戶端緩存region的,所以,會先到自己的cache中查找對應region,找到的話則直接訪問(1次網絡請求即可),如果找不到,則到region server的.META.中去取(3次),如果再找不到,則到-ROOT-找.META.信息(5次),再找不到,只好去zk中取(7次)(這是第21條tip的逆過程) 。

    34,region有9種狀態(offline,pending open,opening,open,pending close,closing,closed,splitting,split),狀態轉移可以再master做,也可以在持有region的region server上做。集群通過zk來跟蹤狀態變化。

    35,Hbase的復制策略為容災提供了高可用,基本模式是:master-push,因為WAL的存在,跟蹤復制變得很容易;一個master cluster可以復制到任意數量的slave clusters,region server負責自己的復制。

    F9{B6EB`L4ASJ[W5(9D1WZP

    posted on 2012-12-28 13:59 changedi 閱讀(2413) 評論(0)  編輯  收藏 所屬分類: Java技術

    主站蜘蛛池模板: 亚洲综合色视频在线观看| 67194国产精品免费观看| 四虎永久在线精品免费网址| 亚洲视频国产视频| 亚洲AV午夜成人影院老师机影院| 91精品视频在线免费观看| 亚洲精品无码不卡在线播放HE | 亚洲欧洲日产国码av系列天堂| 男女猛烈xx00免费视频试看| sss在线观看免费高清| 亚洲国产精品一区二区第一页免| 欧洲乱码伦视频免费国产| 亚洲AV无码成H人在线观看| 日本一区二区三区在线视频观看免费| 免费a级毛片大学生免费观看| 黄页网址在线免费观看| 久久国产成人精品国产成人亚洲| 巨胸狂喷奶水视频www网站免费| 亚洲国产精品无码久久SM| 亚洲精品免费在线| 亚洲人成网站在线播放2019| 免费国产a国产片高清网站| WWW免费视频在线观看播放| 亚洲午夜精品一区二区| 无人影院手机版在线观看免费| 亚洲丁香婷婷综合久久| 国产黄色一级毛片亚洲黄片大全 | 香港一级毛片免费看| 亚洲午夜AV无码专区在线播放| 你是我的城池营垒免费看| 亚洲精品无码久久久久久久 | 国产成年无码久久久免费| 亚洲国产精品成人综合久久久 | 亚洲大香人伊一本线| 午夜a级成人免费毛片| 国产区在线免费观看| 亚洲制服丝袜在线播放| 亚洲成人高清在线| 99久久免费中文字幕精品| 九九精品国产亚洲AV日韩| 久久亚洲国产视频|