±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄ»ùÓÚÌṩµÄÑùÀýÊý¾Ý£¬½éÉÜÁËдÊý¾ÝµÄ½Ó¿Ú£¬RowKey
¶¨Ò壬Êý¾ÝÔÚ¿Í»§¶ËµÄ×é×°£¬Êý¾Ý·ÓÉ£¬´ò°ü·Ö·¢£¬ÒÔ¼°RegionServer ²à½«Êý¾ÝдÈëµ½
Region ÖеÄÈ«²¿Á÷³Ì¡£ |
|
ʾÀýÊý¾Ý
¸ø³öÒ»·ÝÎÒÃÇÈÕ³£¶¼¿ÉÒÔ½Ó´¥µ½µÄÊý¾ÝÑùÀý£¬Ïȼòµ¥¸ø³öʾÀýÊý¾ÝµÄ×ֶζ¨Ò壺

ʾÀýÊý¾Ý×ֶζ¨Òå
±¾ÎÄÁ¦Çó¼ò½à£¬½ö¸ø³öÁË×î¼òµ¥µÄ¼¸¸ö×ֶζ¨Òå¡£ÈçÏÂÊÇ¡±Ðé¹¹¡±µÄÑùÀýÊý¾Ý£º

ʾÀýÊý¾Ý
ÔÚ±¾ÎĴ󲿷ÖÄÚÈÝÖÐËùÉæ¼°µÄÒ»ÌõÊý¾Ý£¬ÊÇÉÏÃæ¼Ó´ÖµÄ×îºóÒ»ÐÐ"Mobile1"Ϊ"13400006666"ÕâÐмǼ¡£ÔÚÏÂÃæµÄÁ÷³ÌͼÖУ¬ÎÒÃÇʹÓÃÏÂÃæÕâÑùÒ»¸öºìɫСͼ±êÀ´±íʾ¸ÃÊý¾ÝËùÔÚµÄλÖãº

Êý¾ÝλÖñê¼Ç
¿ÉÑ¡½Ó¿Ú
HBaseÖÐÌṩÁËÈçϼ¸ÖÖÖ÷ÒªµÄ½Ó¿Ú£º
Java Client API
HBaseµÄ»ù´¡API£¬Ó¦ÓÃ×îΪ¹ã·º¡£
HBase Shell
»ùÓÚShellµÄÃüÁîÐвÙ×÷½Ó¿Ú£¬»ùÓÚJava Client APIʵÏÖ¡£
Restful API
Rest Server²à»ùÓÚJava Client APIʵÏÖ¡£
Thrift API
Thrift Server²à»ùÓÚJava Client APIʵÏÖ¡£
MapReduce Based Batch Manipulation API
»ùÓÚMapReduceµÄÅúÁ¿Êý¾Ý¶ÁдAPI¡£
³ýÁËÉÏÊöÖ÷ÒªµÄAPI£¬HBase»¹ÌṩÁË»ùÓÚSparkµÄÅúÁ¿²Ù×÷½Ó¿ÚÒÔ¼°C++ Client½Ó¿Ú£¬µ«ÕâÁ½¸öÌØÐÔ¶¼±»¹æ»®ÔÚÁË3.0°æ±¾ÖУ¬µ±Ç°ÉÐÔÚ¿ª·¢ÖС£
ÎÞÂÛÊÇHBase Shell/Restful API»¹ÊÇThrift API£¬¶¼ÊÇ»ùÓÚJava Client
APIʵÏֵġ£Òò´Ë£¬½ÓÏÂÀ´¹ØÓÚÁ÷³ÌµÄ½éÉÜ£¬¶¼ÊÇ»ùÓÚJava Client APIµÄµ÷ÓÃÁ÷³ÌÕ¹¿ªµÄ¡£
¹ØÓÚ±í·þÎñ½Ó¿ÚµÄ³éÏó
ͬ²½Á¬½ÓÓëÒì²½Á¬½Ó£¬·Ö±ðÌṩÁ˲»Í¬µÄ±í·þÎñ½Ó¿Ú³éÏó£º
Table ͬ²½Á¬½ÓÖеıí·þÎñ½Ó¿Ú¶¨Òå
AsyncTable Òì²½Á¬½ÓÖеıí·þÎñ½Ó¿Ú¶¨Òå
Òì²½Á¬½ÓAsyncConnection»ñÈ¡AsyncTableʵÀýµÄ½Ó¿ÚĬÈÏʵÏÖ£º

Create AsyncTable
ͬ²½Á¬½ÓClusterConnectionµÄʵÏÖÀàConnectionImplementationÖлñÈ¡TableʵÀýµÄ½Ó¿ÚʵÏÖ£º

Create Table
дÊý¾ÝµÄ¼¸ÖÖ·½Ê½
Single Put
µ¥Ìõ¼Ç¼µ¥Ìõ¼Ç¼µÄËæ»úput²Ù×÷¡£Single PutËù¶ÔÓ¦µÄ½Ó¿Ú¶¨ÒåÈçÏ£º
ÔÚAsyncTable½Ó¿ÚÖе͍Ò壺
CompletableFuture<Void> put(Put
put); |
ÔÚTable½Ó¿ÚÖе͍Ò壺
void put(Put put) throws IOException; |
Batch Put
»ã¾ÛÁ˼¸Ê®ÌõÉõÖÁÊǼ¸°ÙÉÏǧÌõ¼Ç¼֮ºóµÄСÅú´ÎËæ»úput²Ù×÷¡£
Batch PutÖ»ÊDZ¾ÎĶԸÃÀàÐͲÙ×÷µÄ³Æ·¨£¬Êµ¼ÊµÄ½Ó¿ÚÃû³ÆÈçÏÂËùʾ£º
ÔÚAsyncTable½Ó¿ÚÖе͍Ò壺
List<CompletableFuture<Void>>
put(List<Put> puts); |
ÔÚTable½Ó¿ÚÖе͍Ò壺
void put(List<Put> puts) throws
IOException; |
Bulkload
»ùÓÚMapReduce APIÌṩµÄÊý¾ÝÅúÁ¿µ¼ÈëÄÜÁ¦£¬µ¼ÈëÊý¾ÝÁ¿Í¨³£ÔÚGB¼¶±ðÒÔÉÏ£¬BulkloadÄܹ»ÈƹýJava
Client APIÖ±½ÓÉú³ÉHBaseµÄµ×²ãÊý¾ÝÎļþ(HFile)¡£
¹¹½¨Put¶ÔÏó
Éè¼ÆºÏÀíµÄRowKey
RowKeyͨ³£ÊÇÒ»¸ö»òÈô¸É¸ö×ֶεÄÖ±½Ó×éºÏ»ò¾Ò»¶¨´¦ÀíºóµÄÐÅÏ¢£¬ÒòΪһ¸ö±íÖÐËùÓеÄÊý¾Ý¶¼ÊÇ»ùÓÚRowKeyÅÅÐòµÄ£¬RowKeyµÄÉè¼Æ¶Ô¶Áд¶¼»áÓÐÖ±½ÓµÄÐÔÄÜÓ°Ïì¡£
ÎÒÃÇ»ùÓÚ±¾ÎĵÄÑùÀýÊý¾Ý£¬Ïȸø³öÁ½ÖÖRowKeyµÄÉè¼Æ£¬²¢¼òµ¥ÌÖÂÛ¸÷×ÔµÄÓÅȱµã£º
ÑùÀýÊý¾Ý£º

ʾÀýÊý¾Ý
RowKey Format 1£º Mobile1 + StartTime
ΪÁË·½±ã¶ÁÕßÀí½â£¬ÎÒÃÇÔÚÁ½¸ö×Ö¶ÎÖ®¼äÌí¼ÓÁËÁ¬½Ó·û¡±^¡±¡£ÈçÏÂÊÇRowKeyÒÔ¼°Ïà¹ØÅÅÐò½á¹û£º

RowKey Format 1
RowKey Format 2£º StartTime + Mobile1

RowKey Format 2
´ÓÉÏÃæÁ½¸ö±í¸ñ¿ÉÒÔ¿´³öÀ´£¬²»Í¬µÄ×Ö¶Î×éºÏ˳ÐòÉè¼Æ£¬´øÀ´½ØÈ»²»Í¬µÄÅÅÐò½á¹û£¬ÎÒÃǽ«RowKeyÖеĵÚÒ»¸ö×ֶγÆÖ®Îª¡°Ïȵ¼×ֶΡ±¡£µÚÒ»ÖÖÉè¼Æ£¬ÓÐÀûÓÚ²éѯ¡±ÊÖ»úºÅÂëXXXµÄÔÚijʱ¼ä·¶Î§ÄÚµÄÊý¾Ý¼Ç¼¡±£¬µ«²»ÀûÓÚ²éѯ¡±Ä³¶Îʱ¼ä·¶Î§ÄÚÓÐÄÄЩÊÖ»úºÅÂ벦³öÁ˵绰£¿¡±£¬¶øµÚ¶þÖÖÉè¼ÆÈ´Ç¡ºÃÏà·´¡£
ÉÏÃæÊÇÁ½ÖÖÉè¼Æ¶¼ÊÇÁ½¸ö×ֶεÄÖ±½Ó×éºÏ£¬ÕâÖÖÉè¼ÆÔÚʵ¼ÊÓ¦ÓÃÖУ¬»á´øÀ´¶ÁдÈȵãÎÊÌ⣬ÄÑÒÔ±£ÕÏÊý¾Ý¶ÁдÇëÇóÔÚËùÓÐRegionsÖ®¼äµÄ¸ºÔؾùºâ¡£±ÜÃâÈȵãµÄ³£¼û·½·¨ÓÐÈçϼ¸ÖÖ£º
Reversing
Èç¹ûÏȵ¼×ֶα¾Éí»á´øÀ´ÈȵãÎÊÌ⣬µ«¸Ã×Ö¶Îβ²¿µÄÐÅϢȴ¾ß±¸Á¼ºÃµÄËæ»úÐÔ£¬´Ëʱ£¬¿ÉÒÔ¿¼Âǽ«Ïȵ¼×Ö¶Î×ö·´×ª´¦Àí£¬½«Î²²¿¼¸Î»Ö±½ÓÌáǰµ½Ç°Ã棬»òÕßÖ±½Ó½«Õû¸ö×Ö¶ÎÍêÈ«·´×ª¡£
½«Ïȵ¼×Ö¶ÎMobile1·×ªºó£¬¾Í¾ß±¸·Ç³£ºÃµÄËæ»úÐÔ¡£
ÀýÈ磺
13400001111^201803010800
½«Ïȵ¼×Ö¶ÎMobile1·´×ªºóµÄRowKey±äΪ£º
11110000431^201803010800
Salting
SaltingµÄÔÀíÊÇÔÚRowKeyµÄÇ°ÃæÌí¼Ó¹Ì¶¨³¤¶ÈµÄËæ»úBytes£¬Ëæ»úBytesÄܱ£ÕÏÊý¾ÝÔÚËùÓÐRegions¼äµÄ¸ºÔؾùºâ¡£

RowKey With Salting
SaltingÄܺܺõı£ÕÏдÈëʱ½«Êý¾Ý¾ùÔÈ·ÖÉ¢µ½¸÷¸öRegionÖУ¬µ«¶ÔÓÚ¶ÁȡȴÊDz»ÓѺõģ¬ÀýÈ磬Èç¹û¶ÁÈ¡Mobile1Ϊ¡±13400001111¡åÔÚ20180301ÕâÒ»ÌìµÄÊý¾Ý¼Ç¼ʱ£¬ÒòΪSalting
BytesÐÅÏ¢ÊÇËæ»úÑ¡ÔñÌí¼ÓµÄ£¬²éѯʱ²¢²»ÖªµÀÇ°ÃæÌí¼ÓµÄSalting BytesÊÇ¡±A¡±£¬Òò´Ë{¡°A¡±,
¡°B¡±, ¡°C¡±}Ëù¹ØÁªµÄRegions¶¼µÃÈ¥²é¿´Ò»Ï¡£
Hashing
HashingÊǽ«Ò»¸öRowKeyͨ¹ýÒ»¸öHashº¯ÊýÉú³ÉÒ»×é¹Ì¶¨³¤¶ÈµÄbytes£¬Hashº¯ÊýÄܱ£ÕÏËùÉú³ÉµÄËæ»úbytes¾ß±¸Á¼ºÃµÄÀëÉ¢¶È£¬´Ó¶øÒ²Äܹ»¾ùÔÈ´òÉ¢µ½¸÷¸öRegionÖС£Hashing¼ÈÓÐÀûÓÚËæ»úдÈ룬ÓÖÀûÓÚ»ùÓÚÖªµÀRowKey¸÷×ֶεÄÈ·ÇÐÐÅÏ¢Ö®ºóµÄËæ»ú¶ÁÈ¡²Ù×÷£¬µ«Èç¹ûÊÇ»ùÓÚRowKey·¶Î§µÄScan»òÕßÊÇRowKeyµÄÄ£ºýÐÅÏ¢½øÐвéѯµÄ»°£¬¾Í»á´øÀ´ÏÔÖøµÄÐÔÄÜÎÊÌ⣬ÒòΪÔÀ´ÔÚ×Öµä˳ÐòÏàÁÚµÄRowKeyÁÐ±í£¬Í¨¹ýHashing´òÉ¢ºóµ¼ÖÂÕâЩÊý¾Ý±»·ÖÉ¢µ½Á˶à¸öRegionÖС£
Òò´Ë£¬RowKeyµÄÉè¼Æ£¬ÐèÒª³ä·Ö¿¼ÂÇÒµÎñµÄ¶ÁÐ´ÌØµã¡£
±¾ÎÄÄÚÈݼÙÉèRowKeyÉè¼Æ£ºreversing(Mobile1) +StartTime
Ò²¾ÍÊÇ˵£¬RowKeyÓÉ·´×ª´¦ÀíºóµÄMobile1ÓëStartTime×é³É¡£¶ÔÓÚÎÒÃÇËù¹Ø×¢µÄÕâÐÐÊý¾Ý£º

¹Ø×¢µÄÊý¾Ý¼Ç¼
RowKeyÓ¦¸ÃΪ£º 66660000431^201803011300
ÒòΪ´´½¨±íʱԤÉèµÄRegionÓëRowKeyÇ¿Ïà¹Ø£¬ÎÒÃÇÏÖÔڲſÉÒÔ¸ø³ö±¾ÎÄÑùÀýËùÐèÒª´´½¨µÄ±íµÄ¡±Region·Ö¸îµã¡°ÐÅÏ¢£º
¼ÙÉ裬Region·Ö¸îµãΪ¡°1,2,3,4,5,6,7,8,9¡±£¬»ùÓÚÕâ9¸ö·Ö¸îµã£¬¿ÉÒÔÔ¤ÏÈ´´½¨10¸öRegion£¬Õâ10¸öRegionµÄStartKeyºÍStopKeyÈçÏÂËùʾ£º

Region»®·ÖÐÅÏ¢
µÚÒ»¸öRegionµÄStartKeyΪ¿Õ£¬×îºóÒ»¸öRegionµÄStopKeyΪ¿Õ
ÿһ¸öRegionÇø¼ä£¬¶¼°üº¬StartKey±¾Éí£¬µ«²»°üº¬StopKey
ÓÉÓÚMobile1×ֶεÄ×îºóһλÊÇ0~9Ö®¼äµÄËæ»úÊý×Ö£¬Òò´Ë£¬¿ÉÒÔ¾ùÔÈ´òÉ¢µ½Õâ10¸öRegionÖÐ
¶¨ÒåÁÐ
ÿһ¸öÁÐÔÚHBaseÖÐÌåÏÖΪһ¸öKeyValue£¬¶øÃ¿Ò»¸öKeyValueÓµÓÐÌØ¶¨µÄ×é³É½á¹¹£¬ÕâÒ»µãÔÚÉÏһƪÎÄÕµÄÊý¾ÝÄ£ÐÍÕ½ÚÒѾÌáµ½¹ý¡£
ËùνµÄ¶¨ÒåÁУ¬¾ÍÊÇÐèÒª¶¨Òå³öÿһ¸öÁÐÒª´æ·ÅµÄÁÐ×å(Column Family)ÒÔ¼°Áбêʶ(Qualifier)ÐÅÏ¢¡£
ÎÒÃǼÙÉ裬´æ·ÅÑùÀýÊý¾ÝµÄÕâ¸ö±íÃû³ÆÎª¡±TelRecords¡± £¬ÎªÁ˼òµ¥Æð¼û£¬½ö½öÉèÖÃÁË1¸öÃûΪ¡±I¡±µÄÁÐ×å¡£

Column FamilyÒÔ¼°Áбêʶ¶¨Òå
ÒòΪMobile1ÓëStartTime¶¼ÒѾ±»°üº¬ÔÚRowKeyÖУ¬ËùÒÔ£¬²»ÐèÒªÔÙÔÚÁÐÖд洢һ·Ý¡£¹ØÓÚÁÐ×åÃû³ÆÓëÁбêʶÃû³Æ£¬½¨ÒéÓ¦¸Ã¼ò¶ÌһЩ£¬ÒòΪÕâЩÐÅÏ¢¶¼»á±»°üº¬ÔÚKeyValueÀïÃæ£¬¹ý³¤µÄÃû³Æ»áµ¼ÖÂÊý¾ÝÅòÕÍ¡£
»ùÓÚRowKeyºÍÁж¨ÒåÐÅÏ¢£¬¾Í¿ÉÒÔ×齨HBaseµÄPut¶ÔÏó£¬Ò»¸öPut¶ÔÏóÓÃÀ´ÃèÊö´ýдÈëµÄÒ»ÐÐÊý¾Ý£¬Ò»¸öPut¿ÉÒÔÀí½â³ÉÓëij¸öRowKey¹ØÁªµÄ1¸ö»ò¶à¸öKeyValueµÄ¼¯ºÏ¡£
ÖÁ´Ë£¬ÕâÌõÊý¾ÝÒѾת±ä³ÉÁËPut¶ÔÏó£¬ÈçÏÂͼËùʾ£º

Put
Êý¾Ý·ÓÉ
³õʼ»¯ZooKeeper Session
ÒòΪmeta Region´æ·ÅÓÚZooKeeperÖУ¬ÔÚµÚÒ»´Î´ÓZooKeeperÖжÁÈ¡META
RegionµÄµØÖ·Ê±£¬ÐèÒªÏȳõʼ»¯Ò»¸öZooKeeper Session¡£ZooKeeper SessionÊÇZooKeeper
ClientÓëZooKeeper Server¶ËËù½¨Á¢µÄÒ»¸ö»á»°£¬Í¨¹ýÐÄÌø»úÖÆ±£³Ö³¤Á¬½Ó¡£
»ñÈ¡Region·ÓÉÐÅÏ¢
ͨ¹ýÇ°Ãæ½¨Á¢µÄÁ¬½Ó£¬´ÓZooKeeperÖжÁÈ¡meta RegionËùÔÚµÄRegionServer£¬Õâ¸ö¶ÁÈ¡Á÷³Ì£¬µ±Ç°ÒѾÊÇÒì²½µÄ¡£»ñÈ¡ÁËmeta RegionµÄ·ÓÉÐÅÏ¢ÒÔºó£¬ÔÙ´Ómeta RegionÖж¨Î»Òª¶ÁдµÄRowKeyËù¹ØÁªµÄRegionÐÅÏ¢¡£ÈçÏÂͼËùʾ£º

Region Routing
ÒòΪÿһ¸öÓû§±íRegion¶¼ÊÇÒ»¸öRowKey Range£¬meta RegionÖмǼÁËÿһ¸öÓû§±íRegionµÄ·ÓÉÒÔ¼°×´Ì¬ÐÅÏ¢£¬ÒÔRegionName(°üº¬±íÃû£¬Region
StartKey£¬Region ID£¬¸±±¾IDµÈÐÅÏ¢)×÷ΪRowKey¡£»ùÓÚÒ»ÌõÓû§Êý¾ÝRowKey£¬¿ìËÙ²éѯ¸ÃRowKeyËùÊôµÄRegionµÄ·½·¨ÆäʵºÜ¼òµ¥£ºÖ»ÐèÒª»ùÓÚ±íÃûÒÔ¼°¸ÃÓû§Êý¾ÝRowKey£¬¹¹½¨Ò»¸öÐéÄâµÄRegion
Key£¬È»ºóͨ¹ýReverse ScanµÄ·½Ê½£¬¶Áµ½µÄµÚÒ»ÌõRegion¼Ç¼¾ÍÊǸÃÊý¾ÝËù¹ØÁªµÄRegion¡£ÈçÏÂͼËùʾ£º

Location User Region
RegionÖ»Òª²»±»Ç¨ÒÆ£¬ÄÇô»ñÈ¡µÄ¸ÃRegionµÄ·ÓÉÐÅÏ¢¾ÍÊÇÒ»Ö±ÓÐЧµÄ£¬Òò´Ë£¬HBase ClientÓÐÒ»¸öCache»úÖÆÀ´»º´æRegionµÄ·ÓÉÐÅÏ¢£¬±ÜÃâÿ´Î¶Áд¶¼ÒªÈ¥·ÃÎÊZooKeeper»òÕßmeta
Region¡£
½ø½×ÄÚÈÝ1£ºmeta Region¾¿¾¹ÔÚÄÄÀ
meta RegionµÄ·ÓÉÐÅÏ¢´æ·ÅÔÚZooKeeperÖУ¬µ«meta Region¾¿¾¹ÔÚÄĸöRegionServerÖÐÌṩ¶Áд·þÎñ£¿
ÔÚ1.0°æ±¾ÖУ¬ÒýÈëÁËÒ»¸öÐÂÌØÐÔ£¬Ê¹µÃMaster¿ÉÒÔ¡±¼æÈΡ±Ò»¸öRegionServer½ÇÉ«(¿É²Î¿¼HBASE-5487,
HBASE-10569)£¬´Ó¶ø¿ÉÒÔ½«Ò»Ð©ÏµÍ³±íµÄRegion·ÖÅäµ½MasterµÄÕâ¸öRegionServerÖУ¬ÕâÖÖÉè¼ÆµÄ³õÖÔÊÇΪÁ˼ò»¯/ÓÅ»¯Region
AssignµÄÁ÷³Ì£¬µ«ÕâÒÀÈ»´øÀ´ÁËһϵÁи´ÔÓµÄÎÊÌ⣬ÓÈÆäÊÇMaster³õʼ»¯ºÍRegionServer³õʼ»¯Ö®¼äµÄRace£¬Òò´Ë£¬ÔÚ2.0°æ±¾Öн«Õâ¸öÌØÐÔÔÝʱ¹Ø±ÕÁË¡£ÏêϸÐÅÏ¢¿ÉÒԲο¼£ºHBASE-16367£¬HBASE-18511£¬HBASE-19694£¬HBASE-19785£¬HBASE-19828
¿Í»§¶Ë²àµÄÊý¾Ý·Ö×é¡°´ò°ü¡±
Èç¹ûÕâÌõ´ýдÈëµÄÊý¾Ý²ÉÓõÄÊÇSingle PutµÄ·½Ê½£¬ÄÇô£¬¸Ã²½Öè¿ÉÒÔÂÔ¹ý£¨ÊÂʵÉÏ£¬µ¥ÌõPut²Ù×÷µÄÁ÷³ÌÏà¶Ô¼òµ¥£¬¾ÍÊÇÏȶ¨Î»¸ÃRowKeyËù¶ÔÓ¦µÄRegionÒÔ¼°RegionServerÐÅÏ¢ºó£¬ClientÖ±½Ó·¢ËÍдÇëÇóµ½RegionServer²à¼´¿É£©¡£
µ«Èç¹ûÕâÌõÊý¾Ý±»»ìÔÓÔÚÆäËüµÄÊý¾ÝÁбíÖУ¬²ÉÓÃBatch PutµÄ·½Ê½£¬ÄÇô£¬¿Í»§¶ËÔÚ½«ËùÓеÄÊý¾Ýдµ½¶ÔÓ¦µÄRegionServer֮ǰ£¬»áÏÈ·Ö×顱´ò°ü¡±£¬Á÷³ÌÈçÏ£º
°´Region·Ö×飺±éÀúÿһÌõÊý¾ÝµÄRowKey£¬È»ºó£¬ÒÀ¾Ýmeta±íÖмǼµÄRegionÐÅÏ¢£¬È·¶¨Ã¿Ò»ÌõÊý¾ÝËùÊôµÄRegion¡£´Ë²½Öè¿ÉÒÔ»ñÈ¡µ½Regionµ½RowKeyÁбíµÄÓ³Éä¹ØÏµ¡£
°´RegionServer¡±´ò°ü¡±£ºÒòΪRegionÒ»¶¨¹éÊôÓÚijһ¸öRegionServer£¨×¢£º±¾ÎÄÄÚÈÝÖÐÈçÎÞÌØÊâ˵Ã÷£¬¶¼Î´¿¼ÂÇRegion
ReplicaÌØÐÔ£©£¬ÄÇÊôÓÚͬһ¸öRegionServerµÄ¶à¸öRegionsµÄдÈëÇëÇ󣬱»´ò°ü³ÉÒ»¸öMultiAction¶ÔÏó£¬ÕâÑù¿ÉÒÔÒ»²¢·¢Ë͵½Ã¿Ò»¸öRegionServerÖС£

Êý¾Ý·Ö×éÓë´ò°ü
Client·¢ËÍдÊý¾ÝÇëÇóµ½RegionServer
ÀàËÆÓÚClient·¢Ëͽ¨±íµ½MasterµÄÁ÷³Ì£¬Client·¢ËÍдÊý¾ÝÇëÇóµ½RegionServer£¬Ò²ÊÇͨ¹ýRPCµÄ·½Ê½¡£Ö»ÊÇ£¬Clientµ½MasterÒÔ¼°Clientµ½RegionServer£¬²ÉÓÃÁ˲»Í¬µÄRPC·þÎñ½Ó¿Ú¡£

Client Send Request
To RegionServer
single putÇëÇóÓëbatch putÇëÇó£¬Á½ÕßËùµ÷ÓõÄRPC·þÎñ½Ó¿Ú·½·¨ÊDz»Í¬µÄ£¬ÈçÏÂÊÇClient.protoÖе͍Ò壺

Client Proto¶¨Òå
°²È«·ÃÎÊ¿ØÖÆ
ÈçºÎ±£ÕÏUserAÖ»ÄÜдÊý¾Ýµ½UserAµÄ±íÖУ¬ÒÔ¼°½ûÖ¹UserA¸ÄдÆäËüUserµÄ±íµÄÊý¾Ý£¬HBaseÌṩÁËACL»úÖÆ¡£ACLͨ³£ÐèÒªÓëKerberosÈÏÖ¤ÅäºÏÒ»ÆðʹÓã¬KerberosÄܹ»È·±£Ò»¸öÓû§µÄºÏ·¨ÐÔ£¬¶øACLÈ·±£¸ÃÓû§½öÄÜÖ´ÐÐȨÏÞ·¶Î§ÄڵIJÙ×÷¡£
HBase½«È¨ÏÞ·ÖΪÈçϼ¸Àࣺ
READ(¡®R¡¯)
WRITE(¡®W¡¯)
EXEC(¡®X¡¯)
CREATE(¡®C¡¯)
ADMIN(¡®A¡¯)
¿ÉÒÔΪһ¸öÓû§/Óû§×鶨ÒåÕû¿â¼¶±ðµÄȨÏÞ¼¯ºÏ£¬Ò²¿ÉÒÔ¶¨ÒåNamespace¡¢±í¡¢ÁÐ×åÉõÖÁÊÇÁм¶±ðµÄȨÏÞ¼¯ºÏ¡£
RegionServer¶Ë´¦Àí£ºRegion·Ö·¢
RegionServerµÄRPC Server²à£¬½ÓÊÕµ½À´×ÔClient¶ËµÄRPCÇëÇóÒԺ󣬽«¸ÃÇëÇ󽻸øHandlerÏ̴߳¦Àí¡£
Èç¹ûÊÇsingle put£¬Ôò¸Ã²½Öè±È½Ï¼òµ¥£¬ÒòΪÔÚ·¢Ë͹ýÀ´µÄÇëÇó²ÎÊýMutateRequestÖУ¬ÒѾЯ´øÁËÕâÌõ¼Ç¼Ëù¹ØÁªµÄRegion£¬ÄÇôֱ½Ó½«¸ÃÇëÇóת·¢¸ø¶ÔÓ¦µÄRegion¼´¿É¡£
Èç¹ûÊÇbatch puts£¬Ôò½ÓÊÕµ½µÄÇëÇó²ÎÊýΪMultiRequest£¬ÔÚMultiRequestÖУ¬»ìºÏÁËÕâ¸öRegionServerËù³ÖÓеĶà¸öRegionµÄдÈëÇëÇó£¬Ã¿Ò»¸öRegionµÄдÈëÇëÇó¶¼±»°ü×°³ÉÁËÒ»¸öRegionAction¶ÔÏó¡£RegionServer½ÓÊÕµ½MultiRequestÇëÇóÒԺ󣬱éÀúËùÓеÄRegionAction£¬¶øºóдÈ뵽ÿһ¸öRegionÖУ¬´Ë¹ý³ÌÊÇ´®ÐеÄ:

Write Per Region
´ÓÕâÀï¿ÉÒÔ¿´³öÀ´£¬²¢²»ÊÇÒ»¸öbatchÔ½´óÔ½ºÃ£¬´óµÄbatch sizeÉõÖÁ¿ÉÄܵ¼ÖÂÍÌÍÂÁ¿Ï½µ¡£
RegionÄÚ²¿´¦Àí£ºÐ´WAL
HBaseÒ²²ÉÓÃÁËLSM-TreeµÄ¼Ü¹¹Éè¼Æ£ºLSM-TreeÀûÓÃÁË´«Í³»úеӲÅ̵ġ°Ë³Ðò¶ÁдËÙ¶ÈÔ¶¸ßÓÚËæ»ú¶ÁдËÙ¶È¡±µÄÌØµã¡£Ëæ»úдÈëµÄÊý¾Ý£¬Èç¹ûÖ±½ÓÈ¥¸Äдÿһ¸öRegionÉϵÄÊý¾ÝÎļþ£¬ÄÇôÍÌÍÂÁ¿ÊǷdz£²îµÄ¡£Òò´Ë£¬Ã¿Ò»¸öRegionÖÐËæ»úдÈëµÄÊý¾Ý£¬¶¼ÔÝʱÏÈ»º´æÔÚÄÚ´æÖÐ(HBaseÖдæ·ÅÕⲿ·ÖÄÚ´æÊý¾ÝµÄÄ£¿é³ÆÖ®ÎªMemStore£¬ÕâÀï½ö½öÒý³ö¸ÅÄÏÂÒ»Õ½ÚÏêϸ½éÉÜ)£¬ÎªÁ˱£ÕÏÊý¾Ý¿É¿¿ÐÔ£¬½«ÕâÐ©Ëæ»úдÈëµÄÊý¾Ý˳ÐòдÈëµ½Ò»¸ö³ÆÖ®ÎªWAL(Write-Ahead-Log)µÄÈÕÖ¾ÎļþÖУ¬WALÖеÄÊý¾Ý°´Ê±¼ä˳Ðò×éÖ¯£º

MemStore And WAL
Èç¹ûλÓÚÄÚ´æÖеÄÊý¾ÝÉÐδ³Ö¾Ã»¯£¬¶øÇÒͻȻÓöµ½ÁË»úÆ÷¶Ïµç£¬Ö»ÐèÒª½«WALÖеÄÊý¾Ý»Ø·Åµ½RegionÖм´¿É:

WAL Replay
ÔÚHBaseÖУ¬Ä¬ÈÏÒ»¸öRegionServerÖ»ÓÐÒ»¸ö¿ÉдµÄWALÎļþ¡£WALÖÐдÈëµÄ¼Ç¼£¬ÒÔEntryΪ»ù±¾µ¥Ôª£¬¶øÒ»¸öEntryÖУ¬°üº¬£º
WALKey °üº¬{Encoded Region Name£¬Table Name£¬Sequence
ID£¬Timestamp}µÈ¹Ø¼üÐÅÏ¢£¬ÆäÖУ¬Sequence IDÔÚά³ÖÊý¾ÝÒ»ÖÂÐÔ·½ÃæÆðµ½Á˹ؼü×÷Ó㬿ÉÒÔÀí½âΪһ¸öÊÂÎñID¡£
WALEdit WALEditÖÐÖ±½Ó±£´æ´ýдÈëÊý¾ÝµÄËùÓеÄKeyValues£¬¶øÕâЩKeyValues¿ÉÄÜÀ´×ÔÒ»¸öRegionÖеĶàÐÐÊý¾Ý¡£
Ò²¾ÍÊÇ˵£¬Í¨³££¬Ò»¸öRegionÖеÄÒ»¸öbatch putÇëÇ󣬻ᱻ×é×°³ÉÒ»¸öEntry£¬Ð´Èëµ½WALÖУº

Write into WAL
½«Entryдµ½ÎļþÖÐʱÊÇÖ§³ÖѹËõµÄ£¬µ«¸ÃÌØÐÔĬÈÏ먦Æô¡£
WAL½ø½×ÄÚÈÝ
WAL Roll and Archive
µ±ÕýÔÚдµÄWALÎļþ´ïµ½Ò»¶¨´óСÒԺ󣬻ᴴ½¨Ò»¸öеÄWALÎļþ£¬ÉÏÒ»¸öWALÎļþÒÀÈ»ÐèÒª±»±£Áô£¬ÒòΪÕâ¸öWALÎļþÖÐËù¹ØÁªµÄRegionÖеÄÊý¾Ý£¬ÉÐδ±»³Ö¾Ã»¯´æ´¢£¬Òò´Ë£¬¸ÃWAL¿ÉÄܻᱻÓÃÀ´»Ø·ÅÊý¾Ý¡£

Roll WAL
Èç¹ûÒ»¸öWALÖÐËù¹ØÁªµÄËùÓеÄRegionÖеÄÊý¾Ý£¬¶¼ÒѾ±»³Ö¾Ã»¯´æ´¢ÁË£¬ÄÇô£¬Õâ¸öWALÎļþ»á±»ÔÝʱ¹éµµµ½ÁíÍâÒ»¸öĿ¼ÖУº

WAL Archive
×¢Ò⣬ÕâÀï²»ÊÇÖ±½Ó½«WALÎļþɾ³ýµô£¬ÕâÊÇÒ»ÖÖÎÈÍ×ÇÒºÏÀíµÄ×ö·¨£¬ÔÒòÈçÏ£º
±ÜÃâÒòΪÂ߼ʵÏÖÉϵÄÎÊÌâµ¼ÖÂWAL±»Îóɾ£¬ÔÝʱ¹éµµµ½ÁíÍâÒ»¸öĿ¼£¬Îª´íÎó·¢ÏÖÔ¤ÁôÁËÒ»¶¨µÄʱ¼ä´°¿Ú
°´Ê±¼äά¶È×éÖ¯µÄWALÊý¾ÝÎļþ»¹¿ÉÒÔ±»ÓÃÓÚÆäËüÓÃ;£¬ÈçÔöÁ¿±¸·Ý£¬¿ç¼¯ÈºÈÝÔֵȵȣ¬Òò´Ë£¬ÕâЩWALÎļþͨ³£²»ÔÊÐíÖ±½Ó±»É¾³ý£¬ÖÁÓÚºÎʱ¿ÉÒÔ±»ÇåÀí£¬»¹ÐèÒª¶îÍâµÄ¿ØÖÆÂß¼
ÁíÍ⣬Èç¹û¶ÔдÈëHBaseÖеÄÊý¾ÝµÄ¿É¿¿ÐÔÒªÇ󲻸ߣ¬ÄÇô£¬HBaseÔÊÐíͨ¹ýÅäÖÃÌø¹ýдWAL²Ù×÷¡£
˼¿¼£ºputÓëbatch putµÄÐÔÄÜΪºÎ²î±ð¾Þ´ó£¿
ÔÚÍøÂç·Ö·¢ÉÏ£¬batch putÒѾ¾ß±¸Ò»¶¨µÄÓÅÊÆ£¬ÒòΪbatch putÊÇ´ò°ü·Ö·¢µÄ¡£
¶ø´ÓдWALÕâ¿é£¬¿´µÄ³öÀ´£¬batch putдÈëµÄһСÅú´ÎPut¶ÔÏ󣬿ÉÒÔͨ¹ýÒ»´Îsync¾Í³Ö¾Ã»¯µ½WALÎļþÖÐÁË£¬ÓÐЧ¼õÉÙÁËIOPS¡£
µ«Ç°ÃæÒ²Ìáµ½ÁË£¬batch size²¢²»ÊÇÔ½´óÔ½ºÃ£¬ÒòΪÿһ¸öbatchÔÚRegionServer¶ËÊDZ»´®Ðд¦ÀíµÄ¡£
ÀûÓÃDisruptorÌáÉýд²¢·¢ÐÔÄÜ
Ôڸ߲¢·¢Ëæ»úдÈ볡¾°Ï£¬»á´øÀ´´óÁ¿µÄWAL Sync²Ù×÷£¬HBaseÖвÉÓÃÁËDisruptorµÄRingBufferÀ´¼õÉÙ¾ºÕù£¬Ë¼Â·ÊÇÕâÑù£ºÈç¹û½«Ë²¼ä²¢·¢Ð´ÈëWALÖеÄÊý¾Ý£¬ºÏ²¢Ö´ÐÐSync²Ù×÷£¬¿ÉÒÔÓÐЧ½µµÍSync²Ù×÷µÄ´ÎÊý£¬À´ÌáÉýдÍÌÍÂÁ¿¡£
Multi-WAL
ĬÈÏÇéÐÎÏ£¬Ò»¸öRegionServerÖ»ÓÐÒ»¸ö±»Ð´ÈëµÄWAL Writer£¬¾¡¹ÜWAL WriterÒÀ¿¿Ë³ÐòдÌáÉýдÍÌÍÂÁ¿£¬ÔÚ»ùÓÚÆÕͨ»úеӲÅ̵ÄÅäÖÃÏ£¬´ËʱֻÄÜÓе¥¿éÅÌ·¢»Ó×÷Óã¬ÆäËüÅ̵ÄIOPSÄÜÁ¦²¢Ã»Óб»³ä·ÖÀûÓÃÆðÀ´£¬ÕâÊÇMulti-WALÉè¼ÆµÄ³õÖÔ¡£Multi-WAL¿ÉÒÔÔÚÒ»¸öRegionServerÖÐͬʱÆô¶¯¼¸¸öWAL
Writer£¬¿É°´ÕÕÒ»¶¨µÄ²ßÂÔ£¬½«Ò»¸öRegionÓëÆäÖÐijһ¸öWAL Writer°ó¶¨£¬ÕâÑù¿ÉÒÔ³ä·Ö·¢»Ó¶à¿éÅ̵ÄÐÔÄÜÓÅÊÆ¡£
¹ØÓÚWALµÄδÀ´
WALÊÇ»ùÓÚ»úеӲÅ̵ÄIOÄ£ÐÍÉè¼ÆµÄ£¬¶ø¶ÔÓÚÐÂÐ˵ķÇÒ×ʧÐÔ½éÖÊ£¬Èç3D XPoint£¬WALδÀ´¿ÉÄÜ»áʧȥ´æÔÚµÄÒâÒ壬¹ØÓÚÕⲿ·ÖÄÚÈÝ£¬Çë²Î¿¼ÎÄÕ¡¶´ÓHBaseÖÐÒÆ³ýWAL£¿3D
XPoint¼¼Êõ´øÀ´µÄ±ä¸ï¡·¡£
RegionÄÚ²¿´¦Àí£ºÐ´MemStore
ÿһ¸öColumn Family£¬ÔÚRegionÄÚ²¿±»³éÏóΪÁËÒ»¸öHStore¶ÔÏ󣬶øÃ¿Ò»¸öHStoreÓµÓÐ×ÔÉíµÄMemStore£¬ÓÃÀ´»º´æÒ»Åú×î½ü±»Ëæ»úдÈëµÄÊý¾Ý£¬ÕâÊÇLSM-TreeºËÐÄÉè¼ÆµÄÒ»²¿·Ö¡£
MemStoreÖÐÓÃÀ´´æ·ÅËùÓеÄKeyValueµÄÊý¾Ý½á¹¹£¬³ÆÖ®ÎªCellSet£¬¶øCellSetµÄºËÐÄÊÇÒ»¸öConcurrentSkipListMap£¬ÎÒÃÇÖªµÀ£¬ConcurrentSkipListMapÊÇJavaµÄÌø±íʵÏÖ£¬Êý¾Ý°´ÕÕKeyÖµÓÐÐò´æ·Å£¬¶øÇÒÔڸ߲¢·¢Ð´Èëʱ£¬ÐÔÄÜÔ¶¸ßÓÚConcurrentHashMap¡£
Òò´Ë£¬Ð´MemStoreµÄ¹ý³Ì£¬ÊÂʵÉÏÊǽ«batch putÌá½»¹ýÀ´µÄËùÓеÄKeyValueÁÐ±í£¬Ð´Èëµ½MemStoreµÄÒÔConcurrentSkipListMapΪ×é³ÉºËÐĵÄCellSetÖУº

Write Into MemStore
MemStoreÒòÎªÉæ¼°µ½´óÁ¿µÄËæ»úдÈë²Ù×÷£¬»á´øÀ´´óÁ¿JavaС¶ÔÏóµÄ´´½¨ÓëÏûÍö£¬»áµ¼Ö´óÁ¿µÄÄÚ´æË鯬£¬¸øGC´øÀ´±È½ÏÖØµÄѹÁ¦£¬HBaseΪÁËÓÅ»¯ÕâÀïµÄ»úÖÆ£¬½è¼øÁ˲Ù×÷ϵͳµÄÄÚ´æ·ÖÒ³µÄ¼¼Êõ£¬Ôö¼ÓÁËÒ»¸öÃûΪMSLabµÄÌØÐÔ£¬Í¨¹ý·ÖÅäһЩ¹Ì¶¨´óСµÄChunk£¬À´´æ´¢MemStoreÖеÄÊý¾Ý£¬ÕâÑù¿ÉÒÔÓÐЧ¼õÉÙÄÚ´æË鯬ÎÊÌ⣬½µµÍGCµÄѹÁ¦¡£µ±È»£¬ConcurrentSkipListMap±¾ÉíÒ²»á´´½¨´óÁ¿µÄ¶ÔÏó£¬ÕâÀïÒ²ÓкܴóµÄÓÅ»¯¿Õ¼ä£¬È¥Äê°¢ÀïµÄһƪÎÄÕÂ͸¶Á˰¢ÀïÈçºÎͨ¹ýÓÅ»¯ConcurrentSkipListMapµÄ½á¹¹À´ÓÐЧ¼õÉÙGCʱ¼ä¡£
½ø½×ÄÚÈÝ2£ºÏÈдWAL»¹ÊÇÏÈдMemStore?
ÔÚ0.94°æ±¾Ö®Ç°£¬RegionÖеÄдÈë˳ÐòÊÇÏÈдWALÔÙдMemStore£¬ÕâÓëWALµÄ¶¨ÒåÒ²Ïà·û¡£
µ«ÔÚ0.94°æ±¾ÖУ¬½«ÕâÁ½ÕßµÄ˳Ðòµßµ¹ÁË£¬µ±Ê±µßµ¹µÄ³õÖÔ£¬ÊÇΪÁËʹµÃÐÐËøÄܹ»ÔÚWAL sync֮ǰÏÈÊÍ·Å£¬´Ó¶ø¿ÉÒÔÌáÉýÕë¶Ôµ¥ÐÐÊý¾ÝµÄ¸üÐÂÐÔÄÜ¡£ÏêϸÎÊÌâµ¥£¬Çë²Î¿¼HBASE-4528¡£
ÔÚ2.0°æ±¾ÖУ¬ÕâÒ»ÐÐΪÓÖ±»¸Ä»ØÈ¥ÁË£¬ÔÒòÔÚÓÚÐÞ¸ÄÁËÐÐËø»úÖÆÒÔºó(ÏÂÃæÕ½ڽ«½²µ½)£¬·¢ÏÖÁËһЩÐÔÄÜϽµ£¬¶øHBASE-4528ÖеÄÓÅ»¯È´ÎÞ·¨ÔÙ·¢»Ó×÷Óã¬ÏêÇéÇë²Î¿¼HBASE-15158¡£¸Ä¶¯Ö®ºóµÄÂß¼Ò²¸ü¼ò½àÁË¡£
½ø½×ÄÚÈÝ3£º¹ØÓÚÐм¶±ðµÄACID
ÔÚ֮ǰµÄ°æ±¾ÖУ¬Ðм¶±ðµÄÈκβ¢·¢Ð´Èë/¸üж¼ÊÇ»¥³âµÄ£¬ÓÉÒ»¸öÐÐËø¿ØÖÆ¡£µ«ÔÚ2.0°æ±¾ÖУ¬ÕâÒ»µãÐÐΪ·¢ÉúÁ˱仯£¬¶à¸öÏ߳̿ÉÒÔͬʱ¸üÐÂÒ»ÐÐÊý¾Ý£¬ÕâÀïµÄ¿¼ÂǵãΪ£º
Èç¹û¶à¸öÏß³ÌдÈëͬһÐеIJ»Í¬ÁÐ×壬ÊDz»ÐèÒª»¥³âµÄ
¶à¸öÏß³ÌдͬһÐеÄÏàͬÁÐ×壬Ҳ²»ÐèÒª»¥³â£¬¼´Ê¹ÊÇдÏàͬµÄÁУ¬Ò²ÍêÈ«¿ÉÒÔͨ¹ýHBaseµÄMVCC»úÖÆÀ´¿ØÖÆÊý¾ÝµÄÒ»ÖÂÐÔ
µ±È»£¬CAS²Ù×÷(ÈçcheckAndPut)»òincrement²Ù×÷£¬ÒÀÈ»ÐèÒª¶ÀÕ¼µÄÐÐËø
¸ü¶àÏêϸÐÅÏ¢£¬¿ÉÒԲο¼HBASE-12751¡£
ÖÁ´Ë£¬ÕâÌõÊý¾ÝÒѾ±»Í¬Ê±³É¹¦Ð´µ½ÁËWALÒÔ¼°MemStoreÖУº

Data Written In HBase
×ܽá
±¾ÎÄÖ÷ÒªÄÚÈÝ×ܽáÈçÏ£º
½éÉÜHBaseдÊý¾Ý¿ÉÑ¡½Ó¿ÚÒÔ¼°½Ó¿Ú¶¨Òå¡£
ͨ¹ýÒ»¸öÑùÀý£¬½éÉÜÁËRowKey¶¨ÒåÒÔ¼°Áж¨ÒåµÄһЩ·½·¨£¬ÒÔ¼°ÈçºÎ×é×°Put¶ÔÏó
Êý¾Ý·ÓÉ£¬Êý¾Ý·Ö·¢¡¢´ò°ü£¬ÒÔ¼°Clientͨ¹ýRPC·¢ËÍдÊý¾ÝÇëÇóÖÁRegionServer
RegionServer½ÓÊÕÊý¾ÝÒԺ󣬽«Êý¾Ýдµ½Ã¿Ò»¸öRegionÖС£Ð´Êý¾ÝÁ÷³ÌÏÈдWALÔÙдMemStore£¬ÕâÀïÕ¹¿ªÁËһЩ¼¼Êõϸ½Ú
¼òµ¥½éÉÜÁËHBaseȨÏÞ¿ØÖÆÄ£ÐÍ
ÐèҪ˵Ã÷µÄÒ»µã£¬±¾ÎÄËù½²µ½µÄMemStoreÆäʵÊÇÒ»ÖÖ"¼ò»¯"ºóµÄÄ£ÐÍ£¬ÔÚ2.0°æ±¾ÖУ¬ÕâÀïÒѾ±äµÄ¸ü¼Ó¸´ÔÓ¡£ |