<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 閱讀(2414) 評論(0)  編輯  收藏 所屬分類: Java技術

    主站蜘蛛池模板: 亚洲国产成人久久综合区| 亚洲人成网站免费播放| 亚洲AV无码久久寂寞少妇| 亚洲a∨无码精品色午夜| 国产一区二区三区免费| 精品亚洲视频在线观看| 一区二区三区免费精品视频| 国产成人免费手机在线观看视频| 91亚洲自偷在线观看国产馆| 免费成人在线电影| 国产97视频人人做人人爱免费| 国产v亚洲v天堂无码网站| 久久国产精品萌白酱免费| 亚洲卡一卡2卡三卡4麻豆| 亚洲最新视频在线观看| 1000部禁片黄的免费看| 亚洲性一级理论片在线观看| 中文字幕乱码免费视频| 色欲aⅴ亚洲情无码AV| 亚洲AV午夜成人影院老师机影院| 亚洲中文久久精品无码| 131美女爱做免费毛片| 无码人妻一区二区三区免费 | 亚洲国产综合精品中文第一区| 色片在线免费观看| 免费激情视频网站| 最新久久免费视频| 欧洲亚洲国产精华液| 丰满少妇作爱视频免费观看| 中文字幕无码免费久久| 国产成人高清精品免费观看| 日韩精品人妻系列无码专区免费| 一区二区三区在线免费| 久久精品中文字幕免费| 国产一区二区三区免费看| 永久免费av无码不卡在线观看| 免费午夜爽爽爽WWW视频十八禁| 久久精品免费一区二区喷潮| 亚洲视频免费在线播放| 免费欧洲毛片A级视频无风险| 亚洲网站在线免费观看|