⑴ hbase scan的startRow和endRow
舉一個場數扮罩景,安全領域的溯源分析,查詢維度包括ip,時間戳,埠,協議,可能根據前兩的維度的一個或者幾個進行原始日誌查詢,我們可以把原始日誌存儲到hbase中,而前面提到的幾個維度可以分別作為key的一部分。
首先我們應該考慮的是rowkey的設置,第一:散列或者反轉,保證數據會隨機分布到不同的region當中。第二:預分區,先對數據做一個基本的統計,比如我們預分十個區,我們可以統計一下每個區的startrow和endrow,這樣保證每個區的數據相當,另外這樣的好處是當我們根據rowkey查詢的時候,可以保證直接定位到某個分區。我們線上的數據就是採用薯鬧的第二種方式。
然後我們應該考慮rowkey的組成。分兩種情況,第一種情況:維度不是特別多,我們完全可以把各個維度分別作為rowkey的一部分,比如上文提到的需求,就是採用的這種方式,因為一共四個維度,相對來說比較少。第二種情況:維度過多,如果都作為rowkey的一部分的話長度太大,此時建議考慮二級索引,舉個例子:比如對於上面提到的四個維度,如果現在進行擴展,ip,埠,協議需要定位到源和目的,這樣的話,整個維度提升到了七個,此時就建議採用二級索引。
目前我們已經確定了hbase存儲,並且採用預分區的方式並且採用rowkey進行過濾查詢,那麼現在考慮rowkey的設計。從技術角度考慮,預分區的方式時間戳不能作為第一部分,這樣一定會出現數據傾斜的現象;從業務角度考慮,我們定位日誌的時候,首先需要定位ip,然後是埠,最後才是協議,也就是說我們的用戶去定位日誌的時候,如果定位到埠,那必須先定位ip,如果定位協議的話,必須先定位ip和埠。
綜上所述,我們的rowkey設計為ip+timestamp+port+prot
設計搞定之後,我們再考慮查詢的問題。我們知缺此道對於hbase的查詢,最快的方式就是get,這樣的話,可以迅速定位到一條數據。而get查詢其實就是scan的特殊情況,只是startRow和endRow一樣。所以此時我們可以採用scan+startRow+endRow的方式進行操作。
e.g
這樣的話就可以吧該范圍的數據查出來,當然我們可以再在內存中進行過濾
當著startRow和endRow需要注意一些情況。
請參考:https://www.cnblogs.com/llphhl/p/5719119.html
⑵ HBase是什麼呢,都有哪些特點呢
Hbase是一種NoSQL資料庫,這意味著它不像傳統的RDBMS資料庫那樣支持SQL作為查詢語言。Hbase是一種分布式存儲的資料庫,技術上來講,它更像是分布式存儲而不是分布式資料庫,它缺少很多RDBMS系統的特性,比如列類型,輔助索引,觸發器,和高級查詢語言等待
那Hbase有什麼特性呢?如下:
強讀寫一致,但是不是「最終一致性」的數據存儲,這使得它非常適合高速的計算聚合
自動分片,通過Region分散在集群中,當行數增長的時候,Region也會自動的切分和再分配
自動的故障轉移
Hadoop/HDFS集成,和HDFS開箱即用,不用太麻煩的銜接
豐富的「簡潔,高效」API,Thrift/REST API,Java API
塊緩存,布隆過濾器,可以高效的列查詢優化
操作管理,Hbase提供了內置的web界面來操作,還可以監控JMX指標
什麼時候用Hbase?
Hbase不適合解決所有的問題:
首先資料庫量要足夠多,如果有十億及百億行數據,那麼Hbase是一個很好的選項,如果只有幾百萬行甚至不到的數據量,RDBMS是一個很好的選擇。因為數據量小的話,真正能工作的機器量少,剩餘的機器都處於空閑的狀態
其次,如果你不需要輔助索引,靜態類型的列,事務等特性,一個已經用RDBMS的系統想要切換到Hbase,則需要重新設計系統。
最後,保證硬體資源足夠,每個HDFS集群在少於5個節點的時候,都不能表現的很好。因為HDFS默認的復制數量是3,再加上一個NameNode。
Hbase在單機環境也能運行,但是請在開發環境的時候使用。
內部應用
存儲業務數據:車輛GPS信息,司機點位信息,用戶操作信息,設備訪問信息。。。
存儲日誌數據:架構監控數據(登錄日誌,中間件訪問日誌,推送日誌,簡訊郵件發送記錄。。。),業務操作日誌信息
存儲業務附件:UDFS系統存儲圖像,視頻,文檔等附件信息
不過在公司使用的時候,一般不使用原生的Hbase API,使用原生的API會導致訪問不可監控,影響系統穩定性,以致於版本升級的不可控。
HFile
HFile是Hbase在HDFS中存儲數據的格式,它包含多層的索引,這樣在Hbase檢索數據的時候就不用完全的載入整個文件。索引的大小(keys的大小,數據量的大小)影響block的大小,在大數據集的情況下,block的大小設置為每個RegionServer 1GB也是常見的。
探討資料庫的數據存儲方式,其實就是探討數據如何在磁碟上進行有效的組織。因為我們通常以如何高效讀取和消費數據為目的,而不是數據存儲本身。
Hfile生成方式
起初,HFile中並沒有任何Block,數據還存在於MemStore中。
Flush發生時,創建HFile Writer,第一個空的Data Block出現,初始化後的Data Block中為Header部分預留了空間,Header部分用來存放一個Data Block的元數據信息。
而後,位於MemStore中的KeyValues被一個個append到位於內存中的第一個Data Block中:
註:如果配置了Data Block Encoding,則會在Append KeyValue的時候進行同步編碼,編碼後的數據不再是單純的KeyValue模式。Data Block Encoding是HBase為了降低KeyValue結構性膨脹而提供的內部編碼機制。
⑶ hbase存在哪些問題
Hbase 近幾年發展迅速,應用面越來越廣,但是它存在的問題不容忽視。
原生HBase不支持索引專,而屬NoSql資料庫都把索引的支持作為基礎功能來處理。查詢方式單一,只支持基於主鍵的數據讀寫和范圍查詢,對非主鍵列的數據篩選只能通過過濾器的低效處理方式來完成,如果用戶從客戶端建立索引,則需要自己維護索引表,HBase也不支持跨行或跨表事務,操作沖突導致失敗時數據回滾這些復雜邏輯都需要用戶自己完成!
⑷ 銆怘Base銆慔Base 鑷鍔ㄦ媶鍒嗗拰棰勫垎鍖
[TOC]
HBase 涓錛岃〃浼氳鍒掑垎涓1...n 涓 Region錛岃鎵樼″湪 RegionServer 涓銆
Region 浜屼釜閲嶈佺殑灞炴э細StartKey 涓 EndKey 琛ㄧず榪欎釜 Region 緇存姢鐨 RowKey 鑼冨洿錛屽綋璇/鍐欐暟鎹鏃訛紝濡傛灉 RowKey 钀藉湪鏌愪釜 start-end key 鑼冨洿鍐咃紝閭d箞灝變細瀹氫綅鍒扮洰鏍噐egion騫朵笖璇/鍐欏埌鐩稿叧鐨勬暟鎹銆
榛樿わ紝HBase 鍦ㄥ壋寤鴻〃鐨勬椂鍊欙紝浼氳嚜鍔ㄤ負琛ㄥ垎閰嶄竴涓 Region錛屾e勪簬娣鋒矊鏃舵湡錛宻tart-end key 鏃犺竟鐣岋紝鎵鏈 RowKey 閮藉線榪欎釜 Region閲屽垎閰嶃
褰撴暟鎹瓚婃潵瓚婂氾紝Region 鐨 size 瓚婃潵瓚婂ぇ鏃訛紝杈懼埌榛樿ょ殑闃堝兼椂錛堟牴鎹涓嶅悓鐨勬媶鍒嗙瓥鐣ユ湁涓嶅悓鐨勯槇鍊礆級錛孒Base 涓璇 Region 灝嗕細榪涜 split錛屼細鎵懼埌涓涓 MidKey 灝 Region 涓鍒嗕負浜岋紝鎴愪負 2 涓 Region銆傝 MidKey 鍒欎負榪欎簩涓 Region 鐨勪復鐣岋紝宸︿負 N 鏃犱笅鐣岋紝鍙充負 M 鏃犱笂鐣屻< MidKey 琚鍒嗛厤鍒 N 鍖猴紝> MidKey 鍒欎細琚鍒嗛厤鍒 M 鍖恆
闅忕潃鏁版嵁閲忚繘涓姝ユ墿澶э紝鍒嗚傜殑涓や釜 Region 杈懼埌涓寸晫鍚庡皢閲嶅嶅墠闈㈢殑榪囩▼錛屽垎瑁傚嚭鏇村氱殑 Region銆
Region 鐨勫垎鍓叉搷浣滄槸涓嶅彲瑙佺殑錛孧aster 涓嶄細鍙備笌鍏朵腑銆俁egionServer 鎷嗗垎 Region鐨勬ラゆ槸錛氬厛灝嗚 Region 涓嬬嚎錛岀劧鍚庢媶鍒嗭紝灝嗗叾瀛 Region 鍔犲叆鍒 META 鍏冧俊鎮涓錛屽啀灝嗕粬浠鍔犲叆鍒板師鏈鐨 RegionServer 涓錛屾渶鍚庢眹鎶 Master銆
鎵ц split 鐨勭嚎紼嬫槸 CompactSplitThread銆
鍦 2.0.5 鐗堟湰涓錛孒Base 鎻愪緵浜 7 縐嶈嚜鍔ㄦ媶鍒嗙瓥鐣ワ細
浠栦滑涔嬮棿鐨勭戶鎵垮叧緋誨備笅錛
鏈変笁縐嶉厤緗鏂規硶錛
0.94.0 涔嬪墠鐨勯粯璁ゆ媶鍒嗙瓥鐣ワ紝榪欑嶇瓥鐣ラ潪甯哥畝鍗曪紝鍙瑕 Region 涓鐨勪換浣曚竴涓 StoreFile 鐨勫ぇ灝忚揪鍒頒簡 hbase.hregion.max.filesize 鎵瀹氫箟鐨勫ぇ灝 錛屽氨榪涜屾媶鍒嗐
1錛夌浉鍏沖弬鏁幫細
hbase.hregion.max.filesize
2錛夐儴鍒嗘簮鐮 錛
鎷嗗垎鐨勯槇鍊煎ぇ灝忓彲鍦ㄥ壋寤鴻〃鐨勬椂鍊欒劇疆錛屽傛灉娌℃湁璁劇疆錛屽氨鍙 hbase.hregion.max.filesize 榪欎釜閰嶇疆瀹氫箟鐨勫礆紝濡傛灉榪欎釜閰嶇疆涔熸病鏈夊畾涔夛紝鍙栭粯璁ゅ 10G銆
3錛夋媶鍒嗘晥鏋滐細
緇忚繃榪欑嶇瓥鐣ョ殑鎷嗗垎鍚庯紝Region 鐨勫ぇ灝忔槸鍧囧寑鐨勶紝渚嬪備竴涓 10G 鐨凴egion錛屾媶鍒嗕負涓や釜 Region 鍚庯紝榪欎袱涓鏂扮殑 Region 鐨勫ぇ灝忔槸鐩稿樊涓嶅ぇ鐨勶紝鐞嗘兂鐘舵佹槸姣忎釜閮芥槸5G銆
**ConstantSizeRegionSplitPolicy **鍒囧垎絳栫暐瀵逛簬澶ц〃鍜屽皬琛ㄦ病鏈夋槑鏄劇殑鍖哄垎錛岄槇鍊礆紙hbase.hregion.max.filesize錛夛細
4錛夊壋寤鴻〃鏃墮厤緗錛
璇ョ瓥鐣ョ戶鎵胯嚜 ConstantSizeRegionSplitPolicy錛屾槸 0.94.0 鍒 2.0.0 鐗堟湰鐨勯粯璁ょ瓥鐣ワ紝鍏 浼樺寲浜嗗師鏉 ConstantSizeRegionSplitPolicy 鍙鏄鍗曚竴鎸夌収 Region 鏂囦歡澶у皬鐨勬媶鍒嗙瓥鐣ワ紝澧炲姞浜嗗瑰綋鍓嶈〃鐨勫垎鐗囨暟浣滀負鍒ゆ柇鍥犲瓙 銆傚綋Region涓鏌愪釜 Store Size 杈懼埌 sizeToCheck 闃鍊兼椂榪涜屾媶鍒嗭紝sizeToCheck 璁$畻濡備笅錛
濡傛灉琛ㄧ殑鍒嗙墖鏁頒負 0 鎴栬呭ぇ浜 100錛屽垯鍒囧垎澶у皬榪樻槸浠ヨ劇疆鐨勫崟涓 Region 鏂囦歡澶у皬涓烘爣鍑嗐傚傛灉鍒嗙墖鏁板湪 1~99 涔嬮棿錛屽垯鐢 min(鍗曚竴 Region 澶у皬錛 Region 澧炲姞絳栫暐鐨勫垵濮嬪寲澶у皬 * 褰撳墠 Table Region 鏁扮殑3嬈℃柟) 鍐沖畾 銆
Region 澧炲姞絳栫暐鐨勫垵濮嬪寲澶у皬璁$畻濡備笅錛
1錛夌浉鍏沖弬鏁幫細
hbase.hregion.max.filesize
hbase.increasing.policy.initial.size
hbase.hregion.memstore.flush.size
2錛夐儴鍒嗘簮鐮侊細
鍦ㄩ粯璁ゆ儏鍐碉紝浣跨敤 絳栫暐鎷嗗垎 Region 鐨勮繃紼嬫槸:
3錛夋媶鍒嗘晥鏋滐細
鍜 ConstantSizeRegionSplitPolicy 涓鏍鳳紝涔熸槸鍧囧寑鎷嗗垎銆
涓嶅悓鐨勬槸錛 鍒囧垎絳栫暐寮ヨˉ浜咰onstantSizeRegionSplitPolicy 鐨勭煭鏉匡紝鑳藉熻嚜閫傚簲澶ц〃鍜屽皬琛錛屽苟涓斿湪澶ч泦緹ゆ潯浠朵笅瀵逛簬寰堝氬ぇ琛ㄦ潵璇磋〃鐜板緢浼樼銆
浣嗗苟涓嶅畬緹庯紝榪欑嶇瓥鐣ヤ笅寰堝氬皬琛ㄤ細鍦ㄥぇ闆嗙兢涓浜х敓澶ч噺灝 Region錛屽垎鏁e湪鏁翠釜闆嗙兢涓銆傝屼笖鍦ㄥ彂鐢 Region 榪佺Щ鏃朵篃鍙鑳戒細瑙﹀彂 Region 鍒嗚傘
4錛夊壋寤鴻〃鏃墮厤緗錛
2.0 鐗堟湰榛樿ゅ垏鍒嗙瓥鐣ャ係teppingSplitPolicy 鏄疘 鐨勫瓙綾伙紝鍏跺 Region 鎷嗗垎鏂囦歡澶у皬鍋氫簡浼樺寲錛屽傛灉鍙鏈1涓 Region 鐨勬儏鍐典笅錛岄偅絎1嬈$殑鎷嗗垎灝辨槸 256M錛屽悗緇鍒欐寜閰嶇疆鐨勬媶鍒嗘枃浠跺ぇ灝忥紙10G錛夊仛涓烘媶鍒嗘爣鍑嗐
1錛夌浉鍏沖弬鏁幫細
鍚 銆
2錛夊叏閮ㄦ簮鐮侊細
瀹冪殑婧愮爜鍙鏈変竴涓鏂規硶錛屼紭鍖栦簡 getSizeToCheck 鏂規硶錛屽叾浠栭兘鏄緇ф壙 鑷狪 綾匯
3錛夋媶鍒嗘晥鏋滐細
鍦 絳栫暐涓錛岄拡瀵瑰ぇ琛ㄧ殑鎷嗗垎琛ㄧ幇寰堜笉閿欙紝浣嗘槸閽堝瑰皬琛ㄤ細浜х敓榪囧氱殑 Region錛孲teppingSplitPolicy 鍒欏皢灝忚〃鐨 Region 鎺у埗鍦ㄤ竴涓鍚堢悊鐨勮寖鍥達紝瀵瑰ぇ琛ㄧ殑鎷嗗垎涔熶笉褰卞搷銆
4錛夊壋寤鴻〃鏃墮厤緗錛
KeyPrefixRegionSplitPolicy 鏄 鐨勫瓙綾伙紝璇ョ瓥鐣ラ櫎浜嗗叿澶囧叾鐖剁被鑷鍔ㄨ皟鏁 Region 鎷嗗垎闃堝煎ぇ灝忋侀傚簲澶у皬琛ㄧ殑鐗圭偣澶栵紝澧炲姞浜嗗規媶鍒嗙偣(splitPoint錛屾媶鍒嗙偣灝辨槸 Region 琚鎷嗗垎澶勭殑 RowKey)鐨勫畾涔夛紝鍙浠ヤ繚璇佹湁鐩稿悓鍓嶇紑鐨 RowKey涓嶄細琚鎷嗗垎鍒頒袱涓涓嶅悓鐨 Region 閲岄潰銆
1錛夌浉鍏沖弬鏁幫細
鍦 鐨勯厤緗涔嬩笂澧炲姞浜嗕竴涓鍙傛暟銆
KeyPrefixRegionSplitPolicy.prefix_length
2錛夐儴鍒嗘簮鐮侊細
鍏堜粠鐖剁被鑾峰彇鎷嗗垎鐐癸紝濡傛灉璁劇疆浜 prefixLength > 0錛屽氨浠庣埗綾繪媶鍒嗙偣涓鎴鍙栭渶瑕佺殑鍓嶇紑浣滀負鏂扮殑鎷嗗垎鐐硅繑鍥炪
3錛夋媶鍒嗘晥鏋滐細
KeyPrefixRegionSplitPolicy 錛圫teppingSplitPolicy銆丏銆丅usyRegionSplitPolicy (HBase-2.x Only)錛夋寜鐓 RowKey 鐨勫墠緙鍘繪媶鍒 Region錛屼絾鏄浠涔堟椂鍊欐媶鍒嗭紝鍘 Region 瀹歸噺鐨勬渶澶у兼槸澶氬皯榪樻槸闇瑕佷嬌鐢 鐨勬柟娉曞幓璁$畻 銆
濡傛灉鎵鏈夋暟鎹閮藉彧鏈変竴涓や釜鍓嶇紑錛岄偅涔堥噰鐢ㄩ粯璁ょ殑絳栫暐杈冨ソ銆 濡傛灉鍓嶇紑鍒掑垎鐨勬瘮杈冪粏錛屾煡璇㈠氨姣旇緝瀹規槗鍙戠敓璺 Region 鏌ヨ㈢殑鎯呭喌錛屾ゆ椂閲囩敤KeyPrefixRegionSplitPolicy 杈冨ソ銆
鎵浠ヨ繖涓絳栫暐閫傜敤鐨勫満鏅鏄錛
4錛夊壋寤鴻〃鏃墮厤緗錛
緇ф壙鑷 錛屼篃鏄鏍規嵁 RowKey 鍓嶇紑鏉ヨ繘琛屾媶鍒嗙殑銆備笉鍚屽氨鏄錛欿eyPrefixRegionSplitPolicy 鏄鏍規嵁 RowKey 鐨勫滻瀹氬墠鍑犱綅瀛楃︽潵榪涜屽垽鏂錛岃 D 鏄鏍規嵁鍒嗛殧絎︽潵鍒ゆ柇鐨勩
1錛夌浉鍏沖弬鏁幫細
鍦 鐨勯厤緗涔嬩笂澧炲姞浜嗕竴涓鍙傛暟銆
D.delimiter
2錛夐儴鍒嗘簮鐮侊細
鍏堟壘鍒板垎闅旂︿笅鏍囦綅緗錛岀劧鍚庝粠鐖剁被鐨勬媶鍒嗙偣鎴鍙栧嚭鏉ャ
3錛夋媶鍒嗘晥鏋滐細
D 鏍規嵁 RowKey 涓鎸囧畾鍒嗛殧瀛楃﹀仛涓烘媶鍒嗭紝鏄懼緱鏇村姞鐏墊椿錛屽 RowKey 鐨勫間負鈥渦serid_eventtype_eventid鈥濓紝userId 涓嶆槸瀹氶暱鐨勶紝鍒 D 鍙浠ュ彇 RowKey 鍊間腑浠庡乏寰鍙充笖絎涓涓鍒嗛殧瀛楃︿覆涔嬪墠鐨勫瓧絎﹀仛涓烘媶鍒嗕覆錛屽湪璇ョず渚嬩腑灝辨槸鈥渦serid鈥濄
4錛夊壋寤鴻〃鏃墮厤緗錛
涔嬪墠鐨勭瓥鐣ラ兘鏈鑰冭檻 Region 鐑鐐歸棶棰橈紝鑰冭檻鏌愪簺 Region 鍙鑳借棰戠箒璁塊棶錛岃礋鑽峰緢澶э紝BusyRegionSplitPolicy 絳栫暐鍚屾牱緇ф壙鑷 錛屼絾涓昏侀拡瀵 Region 闂棰橈紝鏄鍦 2.x 涓鏂板炲姞鐨勬媶鍒嗙瓥鐣ャ
1錛夌浉鍏沖弬鏁幫細
鍦 鐨勯厤緗涔嬩笂澧炲姞浜嗗備笅鍙傛暟錛
hbase.busy.policy.blockedRequests
hbase.busy.policy.minAge
hbase.busy.policy.aggWindow
2錛夐儴鍒嗘簮鐮侊細
鍦ㄥ垽鏂鏄鍚﹂渶瑕佽繘琛屾媶鍒嗙殑鏃跺欙紝鍏堣皟鐢ㄧ埗綾葷殑 shouldSplit 鏂規硶媯楠岋紝濡傛灉闇瑕佸垯鐩存帴榪斿洖 true錛屽惁鍒欓渶瑕佸垽鏂褰撳墠鏃墮棿鏄鍚︽瘮寮濮嬫椂闂村ぇ浜 minAge 鍊礆紝濡傛灉鏄鐨勶紝鍒欒$畻璇鋒眰闃誨炵巼 blockedReqRate錛屽傛灉闃誨炵巼澶т簬璁懼畾鐨勯槇鍊礆紝鍒欒繘琛屾媶鍒嗐
闃誨炵巼鐨勮$畻濡備笅錛
涓昏佺殑璁$畻閫昏緫鏄錛氳鋒眰鐨勮闃誨炵巼(aggBlockedRate) = curTime - prevTime 鏃墮棿鍐呮柊澧炵殑闃誨炶鋒眰 / 榪欐墊椂闂寸殑鎬昏鋒眰銆
3錛夋媶鍒嗘晥鏋滐細
濡傛灉緋葷粺甯稿父浼氬嚭鐜扮儹鐐 Region錛屽張瀵規ц兘鏈夊緢楂樼殑榪芥眰錛岄偅涔堣繖縐嶇瓥鐣ュ彲鑳戒細姣旇緝閫傚悎銆
瀹冧細閫氳繃鎷嗗垎鐑鐐 Region 鏉ョ紦瑙g儹鐐 Region 鐨勫帇鍔涳紝浣嗘槸鏍規嵁鐑鐐規潵鎷嗗垎Region 涔熶細甯︽潵寰堝氫笉紜瀹氭у洜緔狅紝鍥犱負涓嶈兘紜瀹氫笅涓涓琚鎷嗗垎鐨 Region 鏄鍝涓銆
4錛夊壋寤鴻〃鏃墮厤緗錛
DisabledRegionSplitPolicy 灝辨槸涓嶄嬌鐢 Region 鎷嗗垎絳栫暐錛屽皢鎵鏈夌殑鏁版嵁閮藉啓鍒板悓涓涓 Region 涓銆
1錛夊叏閮ㄦ簮鐮侊細
婧愮爜寰堢畝鍗曪紝灝辨槸鐩存帴榪斿洖 false銆
2錛夋媶鍒嗘晥鏋滐細
榪欎釜絳栫暐鏋佸皯浣跨敤銆
鍗充嬌鍦ㄥ緩琛ㄧ殑鏃跺欏悎鐞嗙殑榪涜屼簡棰勬媶鍒嗭紝榪樻病鏈夊啓鍏ョ殑鏁版嵁鐨勬椂鍊欏氨宸茬粡鎵嬪姩鍒嗗ソ浜 Region錛屼絾鏄闅忕潃鏁版嵁鐨勬寔緇鍐欏叆錛屾垜棰勫厛鍒嗗ソ鐨 Region 鐨勫ぇ灝忎篃浼氳揪鍒伴槇鍊礆紝閭f椂鍊欒繕鏄瑕佷緷闈 HBase 鐨勮嚜鍔ㄦ媶鍒嗙瓥鐣ュ幓鎷嗗垎 Region銆
浣嗚繖縐嶇瓥鐣ヤ篃鏈夊畠鐨勭敤閫旓細
鍋囧傛湁涓鎵歸潤鎬佹暟鎹錛屼竴嬈″瓨鍏ヤ互鍚庝笉浼氬啀鍔犲叆鏂版暟鎹錛屼笖榪欐壒鏁版嵁涓昏佹槸鐢ㄤ簬鏌ヨ錛屼負浜嗘ц兘濂戒竴浜涳紝鍙浠ュ厛榪涜岄勫垎鍖哄悗錛屽悇涓 Region 鏁版嵁閲忕浉宸涓嶅氾紝鐒跺悗璁劇疆鎷嗗垎絳栫暐涓虹佹㈡媶鍒嗭紝鏈鍚庡煎叆鏁版嵁鍗沖彲銆
3錛夊壋寤鴻〃鏃墮厤緗錛
宸茬粡鏈夎嚜鍔ㄥ垎鍖轟簡錛屼負浠涔堣繕闇瑕侀勫垎鍖猴紵
HBase 鍦ㄥ壋寤鴻〃鐨勬椂鍊欙紝浼氳嚜鍔ㄤ負琛ㄥ垎閰嶄竴涓猂egion錛屽綋涓涓 Region 杈懼埌鎷嗗垎鏉′歡鏃訛紙shouldSplit 涓 true錛夛紝HBase 涓璇 Region 灝嗕細榪涜 split錛屽垎瑁備負2涓 Region錛屼互姝ょ被鎺ㄣ傝〃鍦ㄨ繘琛 split 鐨勬椂鍊欙紝浼氳楄垂寰堝氱殑璧勬簮錛屾湁澶ч噺鐨 io 鎿嶄綔錛岄戠箒鐨勫垎鍖哄 HBase 鐨勬ц兘鏈夊緢澶х殑褰卞搷銆
鎵浠ワ紝HBase 鎻愪緵浜嗛勫垎鍖哄姛鑳斤紝璁╃敤鎴峰彲浠ュ湪鍒涘緩琛ㄧ殑鏃跺欏硅〃鎸夌収涓瀹氱殑瑙勫垯鍒嗗尯銆
鍋囪懼垵濮 10 涓 Region錛岄偅涔堝煎叆澶ч噺鏁版嵁鐨勬椂鍊欙紝灝變細鍧囪鍒 10 涓 Region 閲岄潰錛屾樉鐒舵瘮鍒濆 1 涓 Region 瑕佸ソ寰堝氾紝 鍚堢悊鐨勯勫垎鍖哄彲浠ュ噺灝 Region 鐑鐐歸棶棰橈紝鎻愬崌鍐欐暟鎹鐨勬ц兘鍜岄熷害錛岃屼笖涔熻兘鍑忓皯鍚庣畫鐨 split 鎿嶄綔 銆
棣栧厛瑕佹槑鐧芥暟鎹鐨 RowKey 鏄濡備綍鍒嗗竷鐨勶紝鐒跺悗鏍規嵁 RowKey 鐨勭壒鐐硅勫垝瑕佸垎鎴愬氬皯 Region錛屾瘡涓 Region 鐨 startKey 鍜 endKey 鏄澶氬皯錛屾帴鐫灝卞彲浠ラ勫垎鍖轟簡銆
姣斿傦紝RowKey 鐨勫墠鍑犱綅瀛楃︿覆閮芥槸浠 0001~0010 鐨勬暟瀛楋紝榪欐牱鍙浠ュ垎鎴10涓猂egion錛
絎涓琛屼負絎涓涓 Region 鐨 stopKey銆備負浠涔堝悗闈浼氳窡鐫涓涓"|"錛屾槸鍥犱負鍦ˋSCII鐮佷腑錛"|"鐨勫兼槸124錛屽ぇ浜庢墍鏈夌殑鏁板瓧鍜屽瓧姣嶇瓑絎﹀彿銆
shell涓寤哄垎鍖鴻〃
涔熷彲浠ラ氳繃鎸囧畾 SPLITS_FILE 鐨勫兼寚瀹氬垎鍖烘枃浠訛紝浠庢枃浠朵腑璇誨彇鍒嗗尯鍊礆紝鏂囦歡鏍煎紡濡備笂榪頒緥瀛愭墍紺猴細
棰勫垎鍖哄悗錛屽彲浠ヤ粠 HBase ui 欏甸潰瑙傚療鍒幫細
HBase API 寤洪勫垎鍖鴻〃
涓洪槻姝㈢儹鐐歸棶棰橈紝鍚屾椂閬垮厤 Region Split 鍚庯紝閮ㄥ垎 Region 涓嶅啀鍐欐暟鎹鎴栬呭緢灝戝啓鏁版嵁銆備篃涓轟簡寰楀埌鏇村ソ鐨勫苟琛屾э紝甯屾湜鏈夊ソ鐨 load blance錛岃╂瘡涓鑺傜偣鎻愪緵鐨勮鋒眰澶勭悊閮芥槸鍧囩瓑鐨勶紝騫朵笖 Region 涓嶈佺粡甯 split錛屽洜涓 split 浼氫嬌 server 鏈変竴孌墊椂闂寸殑鍋滈】錛岄殢鏈烘暎鍒楀姞涓婇勫垎鍖烘槸姣旇緝濂界殑瑙e喅鏂瑰紡銆
棰勫垎鍖轟竴寮濮嬪氨棰勫緩濂戒簡涓閮ㄥ垎 Region錛岃繖浜 Region 閮界淮鎶ょ潃鑷宸茬殑 start-end keys錛屽啀閰嶅悎涓婇殢鏈烘暎鍒楋紝鍐欐暟鎹鑳藉潎絳夊湴鍛戒腑榪欎簺棰勫緩鐨 Region錛屽氨鑳介氳繃鑹濂界殑璐熻澆錛屾彁鍗囧苟琛岋紝澶уぇ鍦版彁楂樹簡鎬ц兘銆
hash + 棰勫垎鍖
鍦 RowKey 鐨勫墠闈㈡嫾鎺ラ氳繃 hash 鐢熸垚鐨勯殢鏈哄瓧絎︿覆錛屽彲浠ョ敓鎴愯寖鍥存瘮杈冮殢鏈虹殑 RowKey錛屽彲浠ユ瘮杈冨潎琛″垎鏁e埌涓嶅悓鐨 Region 涓錛岄偅涔堝氨鍙浠ヨВ鍐沖啓鐑鐐歸棶棰樸
鍋囪 RowKey 鍘熸湰鏄鑷澧為暱鐨 long 鍨嬶紝鍙浠ュ皢 RowKey 鍏堣繘琛 hash錛屽姞涓婃湰韜 id 錛岀粍鎴恟owkey錛岃繖鏍峰氨鐢熸垚姣旇緝闅忔満鐨 RowKey 銆
閭d箞瀵逛簬榪欑嶆柟寮忕殑 RowKey 璁捐★紝濡備綍鍘昏繘琛岄勫垎鍖猴紵
partition + 棰勫垎鍖
partition 欏懼悕鎬濅箟灝辨槸鍒嗗尯寮忥紝榪欑嶅垎鍖烘湁鐐圭被浼間簬 maprece 涓鐨 partitioner錛屽皢鍖哄煙鐢ㄩ暱鏁存暟浣滀負鍒嗗尯鍙鳳紝姣忎釜 Region 綆$悊鐫鐩稿簲鐨勫尯鍩熸暟鎹錛屽湪 RowKey 鐢熸垚鏃訛紝灝 id 鍙栨ā鍚庯紝鐒跺悗鎷間笂 id 鏁翠綋浣滀負 RowKey 銆
1. HBase Region 鑷鍔ㄦ媶鍒嗙瓥鐣
2. hbase棰勫垎鍖