1.zookeeper是源码什么?
2.Hbase读ååç
3.ZooKeeperå¨HBaseä¸çåºç¨
4.HBase 底层原理详解(深度好文,建议收藏)
5.è¦ä¸è¦ç¨hbaseèªå¸¦çzookeeperï¼
6.JAVA连接HBase客户端及HBase写入数据和读取数据原理解析
zookeeper是源码什么?
zookeeper是动物管理员的意思。 ZooKeeper是源码一个分布式的,开放源码租前慎的源码分布式应用程序协调服务,是源码Google的Chubby一个开源的实现,是源码源码后台登录教程Hadoop和Hbase的重要组件。它是源码一个为分布式应用提供一致性服务的软件,提供的源码功能包括:配置维护、域名服务、源码分布式同步、源码组服务等。源码 ZooKeeper的源码目标就是封装好复杂易出错的关键服务,将简单易用的源码接口和性能高效、功能稳定的源码系统提供给用户。 ZooKeeper包含一个简单的源码原语集,提供Java和C的接口。 ZooKeeper代码版本中,提供了分布式独享锁、选举、源码和补码合成队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。 它的原理: ZooKeeper是以Fast Paxos算悔判法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有弊敬可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos做了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。 ZooKeeper的基本运转流程:1、选举Leader。2、同步数据。搭建积分下载源码3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。4、Leader要具有最高的执行ID,类似root权限。5、集群中大多数的机器得到响应并接受选出的Leader。Hbase读ååç
ä¸ååæåå«åå¨ä¸åçæ件夹éãä¸MySQLæ¯è¾
é¦å Hbaseæ¯ä¾èµäºHDFSåzookeeperçã
Zookeeperåæ äºHmasterçä¸é¨ååè½ï¼å®¢æ·ç«¯è¿è¡DMLè¯å¥çæ¶åï¼é½æ¯å è·ZK交äºã
RegionServer管çäºå¾å¤çRegionï¼è¡¨ï¼ï¼RegionServeréé¢çWAL(HLog)æ¯é¢åå ¥æ¥å¿ï¼åè½æ¯é²æ¢å åä¸çæ°æ®æ²¡ææ¥çåè½çæ¶ä¸¢å¤±ãå¨Regionéé¢ç®¡ççStore管ççæ¯åæï¼Storeéé¢æMem Storeï¼å åï¼ï¼Flushä¹åï¼å é¤å åä¸çæ°æ®ï¼åæ¶åå ¥æ件StoreFile Hfile,Hfile å ¶å®æ¯å¨DataNodeéé¢çã
Hbaseç读æ¯åæ ¢ã
Hbaseå½å空é´ä¸æä¸å¼ å æ°æ®è¡¨meta表ånamespace表ãmeta表éé¢ä¿åäºè¦æä½ç表æå¨çä½ç½®çå æ°æ®ã
ï¼1ï¼é¦å 客æ·ç«¯åzk请æ±å æ°æ®è¡¨æå¨çRegionServerï¼zkè¿åç»å®¢æ·ç«¯meta表æå¨çregionServerã
ï¼2ï¼ç¶å客æ·ç«¯åå»å¯¹åºçRegionServeræ¥æ¾meta表ï¼æ¾å°çæ£è¦æä½ç表æå¨çregionServerï¼åæ¶æmeta表çä¿¡æ¯ç¼åä¸æ¥ï¼å å¿«åç»çæ¥è¯¢ã
ï¼3ï¼ç¶å客æ·ç«¯ååç®æ 表æå¨çRegionServeråéput请æ±ãå ææ°æ®åå°Hlogéé¢ï¼ååå°å åMemStore,æ°æ®ä¼å¨å åæåºï¼ç¶åå客æ·ç«¯åéackï¼å°è¿é对äºå®¢æ·ç«¯æ¥è¯´åæ°æ®å·²ç»ç»æäºãåçå°MemStoreçå·åæ¶æºåï¼å°æ°æ®å·åå°Hfile.
注ï¼meta表æå¨çä½ç½®ä¿¡æ¯ä¿åå¨zkçmeta-region-serverèç¹ä¸ï¼å®¢æ·ç«¯é¦å å°±æ¯å¨è¿ä¸ªèç¹ä¸å·®è¯¢meta表æå¨çRegionServerãmeta表éé¢çä¿¡æ¯å°±æ¯è¡¨ä¸å ¶å¯¹åºçRegionServerçä¿¡æ¯
è¿ä¸ªstu表å¯è½ä¸æ¢ä¸æ¡ï¼å 为stu表å¯è½æ°æ®é大äºä¹åæ ¹æ®RowKeyè¿è¡äºååï¼å¹¶ä¸å¯è½ä¼å¨ä¸åçæºå¨ä¸ã
ä¸åçåææ¯å¨ä¸åçæ件夹ã
MemStoreå·åæ¶æºï¼
å ¨å±çMemStoreç容éï¼é»è®¤æ¯å å åç%ãè¿ä¸ªå®¹éå¼ä¼è§¦åflushæä½ï¼ææçMemStoreé½è¦å·åï¼flushæä½ä¼é»å¡è¯»åæä½ã
ä¼å·å并é»å¡å°å°MemStore大å°éå°å®çæ大容éç%
WALæ¥å¿çå·åæ¶æºï¼
å¯ä»¥è®¾ç½®æ¥å¿ç大å°åæ°éï¼å½è¾¾å°ä¸å®æ°éï¼å·åå°HDFS
ï¼1ï¼ä»zkæ¾meta表æå¨çRegionServer
ï¼2ï¼ä»ä¸è¿°RegionServeréçmeta表éæ¾ç®æ 表æå¨çRegionServerï¼åæ¶æmeta表ç¼åï¼å éåé¢çæ¥è¯¢ã
ï¼3ï¼åç®æ 表æå¨çRegionServeråéget请æ±ãå¯ä»¥ä»block Cacheï¼MemStoreè¿æStoreFileéé¢æ¥ï¼å ·ä½ä»åªæ¥æ ¹æ®æ¶é´æ³ï¼æ¥æ¶é´æ³å¤§çï¼å ·ä½å°±é½æ¥ç¶åmergeåææ°ã
RegionServeréé¢æblock Cacheå¯ä»¥ç¼åç£ççæ°æ®ï¼å éæ¥è¯¢ãå¦æblock Cacheéé¢æï¼å°±å°ç¼ååMemStoreçæ°æ®mergeç¶ååææ°æ¶é´æ³ï¼æ²¡æå°±æ¯æç£ç读çåMemStoreéé¢çå并ãæ以hbase大å¤æ°è¯»è¦èµ°ç£çï¼æ以读å¾æ ¢ã
æ¯æ¬¡å·åä¼çææ°çHfileï¼Hfileå¾å°å¹¶ä¸æ°éå¤çæ¶åä¼å½±åæ¥è¯¢çé度ãæ以è¦è¿è¡å并ãå并å为minor Compactionåmajor Compaction
minor Compactionå°ä¸´è¿çè¥å¹²è¾å°çHfileå并æä¸ä¸ªè¾å¤§çHfileï¼ä¸ä¼æ¸ çè¿æåå é¤çæ°æ®ï¼major Compactionä¼å°ä¸ä¸ªStoreéé¢çææHfileå并æä¸ä¸ªå¤§çHfileï¼å¹¶ä¸ä¼æ¸ çæè¿æåå é¤çæ°æ®ã
æ°æ®ç读åå¯ä»¥ä¸ä¾èµHmasterï¼åªéè¦æå®zookeeperï¼ä½æ¯Hmasterè´è´£regionè°åº¦çå æ°æ®
ä½æ¯DDLè¯è¨æ¯è¦æHmasterç
Flushåmajor Compact
ï¼1ï¼flushå¨åä¸ä¸ªå åä¸æ¸ é¤è¿ææå é¤ï¼å é¤æ è®°ä¹æ¯ä¸è¡æ°æ®ï¼çæ°æ®ï¼ä½æ¯å¦ææ°æ®ä¸åççæ¬åå¸å¨ä¸åçmemStroeï¼å°±ä¸è½æ¸ é¤ãå é¤çæ è®°å¨flushä¹åä¸ä¼è¢«å ï¼ä½å¨åé¢çmajor compactionä¼æå é¤æ è®°å é¤æã
ï¼2ï¼major compaction ä¼æ¸ é¤è¿ææå é¤çæ°æ®ã
é»è®¤æ åµä¸ï¼æ¯ä¸ªTableèµ·ååªæä¸ä¸ªRegionï¼éçæ°æ®çä¸æåå ¥ï¼Regionä¼èªå¨æåï¼ä¸¤ä¸ªåRegionå¼å§é½ä¼å¨ä¸ä¸ªRegionserveréé¢ï¼ä½æ¯åºäºè´è½½åè¡¡çèèï¼Hmasteræå¯è½ä¼å°æ个Regionä¼ ç»å ¶ä»çRegionServerã
Splitçæ¶æºï¼
ï¼1ï¼å½ä¸ä¸ªRegionä¸çæ个Storeä¸çStoreFileçæ»å¤§å°æ¥è¿æ个å¼ï¼ç±åæ°hbase.hregion.max.filesize设å®ï¼é»è®¤gï¼ï¼è¯¥Regionå°±ä¼æç §RowKeyè¿è¡æåã
ï¼2ï¼å¨æ°çæ¬ä¸è¿ä¸ªå¼æ¯Minï¼R^2*"hbase.hregion.memStore.flush.sizeï¼Mï¼","hbase.hregion.max.filesize"ï¼,Ræ¯å½åRegionServerä¸å±äºè¯¥TableçRegion个æ°ãåregionæ¯æç §RowKeyååçãè¿ä¼å¯¼è´æ°æ®å¾æï¼å°±æ¯å 为ååçéå¼å¨ååï¼å¯¼è´ååä¹åçregionæ°æ®éä¸ååï¼å¯¼è´çç¹çé®é¢ãæ以å¨å»ºè¡¨çæ¶åè¦åé¢ååºï¼å°±æ¯ç¨RowKeyè§å好å¤å°ä¸ªregionï¼ä¸è®©hbaseèªå·±çååé»è¾ååã
å®æ¹å»ºè®®åªç¨ä¸ä¸ªåæï¼é²æ¢ä¸åçåæä¹é´æ°æ®ä¸ååï¼åä¸åææ°æ®éå¢å¤ï¼å¯¼è´å ¨å±çflushï¼æ°æ®éå°çåæä¹è¦flushï¼è¿æ ·ä¼å½¢æå¾å¤å°çstoreFileã
deleteæä½ï¼
ï¼1ï¼è®¾ç½®RowKeyï¼æçå é¤æ è®°æ¯deleteFamilyï¼å é¤å¤ä¸ªçæ¬
ï¼2ï¼è®¾ç½®RowKey+Familyï¼æçæ è®°æ¯deleteFamilyï¼å é¤å¤ä¸ªçæ¬
ï¼3ï¼è®¾ç½®RowKey+family+columnï¼æaddColumn()åaddColumns().addColumnæ¯å é¤ææ°ççæ¬æè å é¤æå®æ¶é´æ³ççæ¬ï¼å é¤æ è®°æ¯deleteæ è®°ãaddColumnsæ¯å é¤ææççæ¬æè å é¤æå®æ¶é´æ³æä¹åççæ¬ï¼å é¤æ è®°æ¯deleteColumn
Deleteçæä½å ¶å®ä¹æ¯putæä½ï¼putçæ¯å é¤çæ è®°ã
å¨Hbaseä¸HMasterè´è´£çæ§HRegionServerççå½å¨æï¼åè¡¡RegionServerçè´è½½ï¼å¦æHMasterææäºï¼é£ä¸ªæ´ä¸ªHbaseé群å°å¤äºä¸å¥åº·çç¶æï¼å¹¶ä¸æ¤æ¶çå·¥ä½ç¶æä¸ä¼ç»´æå¤ªä¹ ãæ以Hbaseæ¯æ对HMasterçé«å¯ç¨é ç½®ã
å¨Hbaseçconfç®å½ä¸æ°å»ºbackup-mastersæ件ï¼vimå å ¥å¤ä»½Masterï¼æ¯å¦slave,slave.å¨ææ件ååå°å个slaveéï¼ç¶ååå¯å¨hbase å°±è½å®ç°HMasterçé«å¯ç¨äºã
æ¯ä¸ä¸ªregionç»´æ¤çStartRowåEndRowï¼å¦æå å ¥çæ°æ®ç¬¦åæ个regionç»´æ¤çRowKeyèå´ï¼å该æ°æ®äº¤ç»è¿ä¸ªregionç»´æ¤ãé£ä¹ä¾ç §è¿ä¸ªååï¼æ们å¯ä»¥å°æ°æ®æè¦ææ¾çååºæå大è´çè§å好ï¼ä»¥æé«Hbaseæ§è½ã
ï¼1ï¼æå¨è®¾å®é¢ååº
æå¨è®¾ç½®RowKeyåäº5个region
ï¼2ï¼çæè¿å¶åºåé¢ååº
ï¼3ï¼æç §æ件ä¸è®¾ç½®çè§åé¢ååº
å建split.txt
ç¶åæ§è¡
è¿éå¦ææ件éé¢ç»çååºé®ä¸æ¯æç §é¡ºåºçï¼hbaseä¼å 帮æ们æé®æåºï¼ç¶åæç §é®æ¥ååºã
ï¼4ï¼ä½¿ç¨JavaAPIé¢ååº
adminçå建表çæ¹æ³æå¤ä¸ªéè½½ï¼å¯ä»¥åªä¼ 表çæè¿°ï¼ä¹å¯ä»¥å å ¥ååºçä¿¡æ¯ãadmin.createTable
è§åååºè¦èèæªæ¥æ°æ®éåæºå¨çè§æ¨¡ãè½ç¶æååäºååºï¼ä½æ¯æåå¦æååºå¤§äºäºG,è¿æ¯ä¼è§¦åsplitãå设ä¸å°æºå¨æGç£çï¼é£ä¹é¢ååºå°½é大äºä¸ªï¼è¿æ ·å°±è½é¿å é¢ååºä¹åå触åäºå¤§äºGçsplitã
ï¼1ï¼å¸ææ°æ®è½å¤å°½éååçåé å¨å¤ä¸ªååºéé¢ï¼æ£åæ§ï¼ã
ï¼2ï¼å¯ä¸æ§
ï¼3ï¼é¿åº¦ååï¼ç产ç¯å¢å°ä½ï¼
常è§ç设计æ¹æ¡ï¼
ï¼1ï¼ç产éæºæ°ãhashãæ£åå¼
ï¼2ï¼å符串å转
ï¼3ï¼å符串æ¼æ¥
çµä¿¡é¡¹ç®ï¼
ä¸æ¬¡éè¯çè®°å½ï¼-> -- ::
å设å个åº
ååºé®æä¹è®¾è®¡ï¼
ï¼ä¸ªé®ï¼
|
|
...
|
RowKeyçåé¢ä¸è¬ä¼æ¼ä¸_,_,...,_
è¿æ ·åç好å¤æ¯ï¼æ ¹æ®åä¸ä½å°±è½ç¥éåªä¸ªååºã
ï¼1ï¼æ们å¸æææºå·å°½éåå¸å¨ä¸åçååºï¼ä½æ¯ç¸åçææºå·æ°æ®éä¸å¨åä¸ä¸ªååºï¼è¿æ ·æ¹ä¾¿æ¥è¯¢æ个ç¨æ·çéè¯ä¿¡æ¯ã_
ï¼2ï¼å 为æ¯ä¸ªäººéè¯çéæ±ä¸åï¼ä¹å¸ææåä¸ä¸ªäººçéè¯è®°å½ä¹åå¸å¨ä¸åçååºéé¢ã__--
åå¸åä½ï¼[ï¼^ï¼.hash]%
å设è¦æ¥è¯¢æç¨æ·å¹´2æçéè¯è®°å½ï¼å¯ä»¥ç¨ åstartRowkeyï¼ åendRowKey
å¾®åã
1ãéæ±
ï¼1ï¼å¾®åå 容çæµè§
ï¼2ï¼ç¨æ·ç¤¾äº¤ï¼å ³æ³¨ç¨æ·ï¼åå ³ç¨æ·
ï¼3ï¼æåå ³æ³¨äººçå¾®åç¨æ·
2ã设计表
ï¼1ï¼å¾®åå 容表Content
è¡é®ï¼ç¨æ·id+æ¶é´æ³
ï¼2ï¼ç¨æ·å ³ç³»è¡¨
å 为æ£å¸¸æ åµä¸ä¸ªç¨æ·çç²ä¸åå ³æ³¨é½ä¸å¤ï¼å¯ä»¥ç¨ä¸è¡åå¨å ³æ³¨åç²ä¸çæ åµã
è¡é®ï¼ç¨æ·id
ï¼3ï¼åå§å页é¢ç表ï¼æ¾ç¤ºå ³æ³¨ç人çæè¿ä¸æ¡å¾®åï¼
ZooKeeperå¨HBaseä¸çåºç¨
ZooKeeperæ¯ä¸ä¸ªå¼æºçåå¸å¼åè°æå¡ï¼ç±é èå建ï¼æ¯Google Chubbyçå¼æºå®ç°ãåå¸å¼åºç¨ç¨åºå¯ä»¥åºäºZooKeeperå®ç°è¯¸å¦æ°æ®åå¸/订é ãè´è½½åè¡¡ãå½åæå¡ãåå¸å¼åè°/éç¥ãé群管çãMasteré举ãåå¸å¼éååå¸å¼éåçåè½ã
æ¢ç¶ZooKeeperçä½ç¨è¿ä¹å¤§ï¼é£æ们就æ¥è¯¦ç»è¯´è¯´ZooKeeperå¨HBaseä¸çåºç¨åï¼
ä¸ä¸ªåå¸å¼HBaseç³»ç»å®è£ ä¾èµäºä¸ä¸ªè¿è¡ççZooKeeperé群ï¼ææåä¸çèç¹å客æ·ç«¯å¿ é¡»è½å¤æ£å¸¸è®¿é®è¿è¡ççZooKeeperé群ãHBaseé»è®¤ä¸ºä½ æä¾ä¸ä¸ªèç¹çZooKeeperé群ï¼å®ä¼ä¼´éçHBase start/stopè¿ç¨çå¯å¨/åæ¢èå¯å¨/åæ¢ãé£ä¹HBase主è¦ç¨ZooKeeperæ¥å¹²ä»ä¹å¢ï¼HBase主è¦ç¨ZooKeeperæ¥å®ç°HMasteré举ä¸ä¸»å¤åæ¢ãç³»ç»å®¹éãRootRegion管çãRegionç¶æ管çååå¸å¼SplitWALä»»å¡ç®¡ççã
ä¸ï¼HMasteré举ä¸ä¸»å¤åæ¢
HMasteré举ä¸ä¸»å¤åæ¢çåçåHDFSä¸NameNodeåYARNä¸ResourceManagerçHAåçç¸åã
äºï¼ç³»ç»å®¹é
å½HBaseå¯å¨æ¶ï¼æ¯ä¸ªRegionServeré½ä¼å°ZooKeeperç/hbase/rsèç¹ä¸å建ä¸ä¸ªä¿¡æ¯èç¹ï¼ä¸æä¸ï¼æ们称该èç¹ä¸ºârsç¶æèç¹âï¼ï¼ä¾å¦/hbase/rs/[Hostname]ï¼åæ¶ï¼HMasterä¼å¯¹è¿ä¸ªèç¹æ³¨åçå¬ãå½æ个 RegionServer ææçæ¶åï¼ZooKeeperä¼å 为å¨ä¸æ®µæ¶é´å æ æ³æ¥åå ¶å¿è·³ï¼å³ Session 失æï¼ï¼èå é¤æ该 RegionServer æå¡å¨å¯¹åºç rs ç¶æèç¹ãä¸æ¤åæ¶ï¼HMaster åä¼æ¥æ¶å° ZooKeeper ç NodeDelete éç¥ï¼ä»èæç¥å°æ个èç¹æå¼ï¼å¹¶ç«å³å¼å§å®¹éå·¥ä½ã
æç §ä¸é¢æ说ï¼é£ä¸ºä»ä¹HBaseä¸ç´æ¥è®©HMasteræ¥è´è´£RegionServerççæ§å¢ï¼å¦æHMasterç´æ¥éè¿å¿è·³æºå¶çæ¥ç®¡çRegionServerçç¶æï¼éçé群è¶æ¥è¶å¤§ï¼HMasterç管çè´æ ä¼è¶æ¥è¶éï¼å¦å¤å®èªèº«ä¹æææçå¯è½ï¼å æ¤æ°æ®è¿éè¦æä¹ åãå¨è¿ç§æ åµä¸ï¼ZooKeeperå°±æäºçæ³çéæ©ã
ä¸ï¼Region管ç
对äºå¤§çHBaseé群æ¥è¯´ï¼Regionçæ°éå¯è½ä¼å¤è¾¾åä¸çº§å«ï¼çè³æ´å¤ï¼è¿æ ·è§æ¨¡çRegionç¶æ管ç交ç»ZooKeeperæ¥åä¹æ¯ä¸ä¸ªé常niceçéæ©ã
åï¼åå¸å¼SplitWALä»»å¡ç®¡ç
å½æå°RegionServeræå¡å¨æææ¶ï¼ç±äºæ»æä¸é¨åæ°åå ¥çæ°æ®è¿æ²¡ææä¹ åå°HFileä¸ï¼å æ¤å¨è¿ç§»è¯¥RegionServerçæå¡æ¶ï¼ä¸ä¸ªéè¦çå·¥ä½å°±æ¯ä»WALä¸æ¢å¤è¿é¨åè¿å¨å åä¸çæ°æ®ï¼èè¿é¨åå·¥ä½æå ³é®çä¸æ¥å°±æ¯SplitWALï¼å³HMasteréè¦éå该RegionServeræå¡å¨çWALï¼å¹¶æRegionååæå°å移å¨å°æ°çå°åä¸ï¼å¹¶è¿è¡æ¥å¿çåæ¾ï¼replayï¼ã
ç±äºå个RegionServerçæ¥å¿éç¸å¯¹åºå¤§ï¼å¯è½æä¸å个Regionï¼ä¸GBçæ¥å¿ï¼ï¼èç¨æ·åå¾å¾å¸æç³»ç»è½å¤å¿«éå®ææ¥å¿çæ¢å¤å·¥ä½ãå æ¤ä¸ä¸ªå¯è¡çæ¹æ¡æ¯å°è¿ä¸ªå¤çWALçä»»å¡åç»å¤å°RegionServeræå¡å¨æ¥å ±åå¤çï¼èè¿å°±åéè¦ä¸ä¸ªæä¹ åç»ä»¶æ¥è¾ å©HMasterå®æä»»å¡çåé ãå½åçåæ³æ¯ï¼HMasterä¼å¨ZooKeeperä¸å建ä¸ä¸ªSplitWALèç¹ï¼é»è®¤æ åµä¸ï¼æ¯/hbase/SplitWALèç¹ï¼ï¼å°âåªä¸ªRegionServerå¤çåªä¸ªRegionâè¿æ ·çä¿¡æ¯ä»¥å表çå½¢å¼åæ¾å°è¯¥èç¹ä¸ï¼ç¶åç±å个RegionServeræå¡å¨èªè¡å°è¯¥èç¹ä¸å»é¢åä»»å¡å¹¶å¨ä»»å¡æ§è¡æåæ失败ååæ´æ°è¯¥èç¹çä¿¡æ¯ï¼ä»¥éç¥HMaster继ç»è¿è¡åé¢çæ¥éª¤ãZooKeeperå¨è¿éæ è´èµ·äºåå¸å¼é群ä¸ç¸äºéç¥åä¿¡æ¯æä¹ åçè§è²ã
综ä¸ï¼å°±æ¯ZooKeeperå¨HBaseä¸çåºç¨ï¼å¨è¿éåªå举åºäºä¸é¨åï¼ç¸å¯¹è¯´æ¯è¾çªåºçä½ç¨ï¼å ¶å®ZooKeeperå¨HBaseä¸çåºç¨è¿ä¸æ¢è¿äºï¼æ¯å¦HMasterè¿ä¾èµZooKeeperæ¥å®æTableçenable/disableç¶æè®°å½ï¼ä»¥åHBaseä¸å ä¹ææçå æ°æ®åå¨é½æ¯æ¾å¨ZooKeeperä¸çççã
HBase 底层原理详解(深度好文,建议收藏)
HBase是一个分布式的、面向列的开源数据库,基于Hadoop,主要用于存储大量数据。它在HDFS之上构建,依赖Hadoop生态系统。HBase介于NoSQL和RDBMS之间,只能通过主键(row key)和范围检索数据,支持单行事务。情侣博客搭建源码其表具有行键排序和位置相关性特性。
HBase中表的特点是行键用于检索记录,支持三种访问方式:按行键、按行键范围和通过Zookeeper。行键可以是任意字符串,长度为KB,实际应用中长度一般为-bytes,存储为字节数组。行键排序存储,设计时应考虑经常一起读取的行应放在一起。存储时数据按字典顺序排序,读写操作是原子的。
列族是表的结构的一部分,列归属于列族。列族用于访问控制、磁盘和内存使用统计。列族过多会增加读取数据的I/O和搜索文件次数,因此除非必要,源码数怎么扩展不要设置过多列族。
列是列族下的具体列,类似于MySQL中的具体列。时间戳用于记录数据的多个版本,通过行键、列和时间戳确定数据单元(cell)。HBase提供两种数据版本回收方式,根据列族设置。单元由row key、column和version唯一确定。数据存储为字节码,版本号为默认时间戳,类型为Long。
HRegion存储在HDFS上的StoreFile格式,每个StoreFile包含Trailer、FileInfo、Data Index、Meta Index和Data Block。Data Block是HBase I/O的基本单位,可选择压缩方式存储,以提高效率。每个Data Block由Magic、Key、Value组成,其中Value为二进制数据。
Memstore和StoreFile组成一个HRegion,写操作先写入Memstore,当达到阈值时,触发Flush到StoreFile。StoreFile达到一定大小,触发Compact合并操作或Split操作,实现负载均衡。读操作先在Memstore查找,找不到再查找StoreFile。
HLog(WAL log)用于记录数据变更,用于灾难恢复。每个Region Server维护一个Hlog,而非每个Region一个。合并操作分为Minor Compact和Major Compact,将相同Key的修改合并,形成大StoreFile。当StoreFile大小达到阈值,进行Split,分为两个StoreFile。
HBase的读写过程包括读请求和写请求。读请求先从Zookeeper获取Meta表信息,访问Meta表所在HRegionServer,扫描Memstore和StoreFile获取数据。写请求先写入HLog和Memstore,Memstore达到阈值触发Flush到StoreFile,系统记录redo point。数据写入后,进行Compact和Split操作,以维持高效的数据管理。
HRegion管理包括分配、上线和下线。HMaster记录HRegion Server状态,当需要分配HRegion时,发送装载请求给有空闲空间的HRegion Server。HRegion Server上线和下线由HMaster监控,HRegion Server下线时,HMaster重新分配HRegion。
HMaster工作机制包括上线和下线。HMaster下线导致元数据修改被冻结,集群短时间内不受影响。HMaster下线后,集群中会有一个HMaster等待时机抢占位置。
HBase的三个重要机制包括Flush机制、Compact机制和Split机制。Flush机制控制Memstore大小,触发数据写入StoreFile。Compact机制合并StoreFile,清理过期数据,将版本号保存为1。Split机制将过大的HRegion一分为二,减少StoreFile数量。
è¦ä¸è¦ç¨hbaseèªå¸¦çzookeeperï¼
HBaseçå®è£ å éé¢æèªå¸¦zookeeperçãå¾å¤ç³»ç»é¨ç½²ä¹æ¯ç´æ¥å¯å¨ä¸é¢çzookeeperã
æ¬æ¥ä¹æ¯æ²¡æé®é¢çï¼æ³æ³å§ï¼ç³»ç»éä¹åªæhbaseå¨ç¨zookeeperãå å¯å¨zookeeperï¼åå°hbaseèµ·æ¥å°±å¥½äº
ä½æ¯ä»å¤©éå°äºä¸ä¸ªå¾èç¼çé®é¢ãååäºäºè®ºäºå¾ä¹ ã
å 为æ们æ¯å¥½å¤hbaseéç¾¤å ±ç¨ä¸ä¸ªzookeeperçï¼å ¶ä¸ä¸ä¸ªé群éè¦ä»hbase 0..2 å级å°hbase 0.ä¸ï¼èªç¶ï¼å ä¹è¦æ´æ°ãä½æ¯å ¶ä¸ä¸å°regionserverä¸é¢åæ¶ä¹æè·zookeeperï¼èzookeeperè¿æ¯ç¨hbase 0..2 èªå¸¦çzookeeperå¨è·ã
ç°å¨å¥½äºï¼å级ä¸ä¸ªregionserverï¼è¿çzookeeperä¹è¦åå°çµè¿ï¼çæ¥å¿ é¡»è¦éå¯ï¼ä¸ç¶ï¼jarå æ¿æ¢æï¼å¯è½ä¼å½±åå°zkæ£å¨è·çç»å¸¸ãä½æ¯éå¯zkæ¯ç«å¯¹æ£å¨è¿æ¥è¿ä¸ªzkçclient端ä¼æçæçå½±åã
çæ¯èç¼ãæ¬æ¥åªæ¯å级hbaseï¼zkå´å¼ºè¦åäºã
è½ç¶åæ¥è¯æzookeeperåªè¦å¯å¨äºï¼åªæjarå å é¤ä¹ä¸ä¼å½±åå°æ£å¨è·çzkè¿ç¨ï¼ä½æ¯è¿æ ·çä¸è§è带æ¥çé£é©ï¼å®å¨æ¯æ²¡æå¿ è¦ã
æ以ä½ä¸ºè¿ç»´ï¼æ强ç建议zk åhbaseåå¼é¨ç½²ï¼å°±ç´æ¥é¨ç½²å®æ¹çzk 好äºï¼å 为zkæ¬èº«å°±æ¯ä¸ä¸ªç¬ç«çæå¡ï¼æ²¡æå¿ è¦åhbase è¦åå¨ä¸èµ·ã
å¨åå¸å¼çç³»ç»é¨ç½²ä¸é¢ï¼ä¸ä¸ªè§è²å°±ç¨ä¸ä¸ªä¸é¨çæ件夹管çï¼ä¸è¦ç¨åä¸ä¸ªç®å½ä¸ï¼è¿æ ·åçç容æåºé®é¢ã
å½ç¶datanodeåtasktrackerå¦å½å«è®ºï¼ä»ä»¬æ¬èº«å ³ç³»å¯åã
JAVA连接HBase客户端及HBase写入数据和读取数据原理解析
JAVA连接HBase客户端进行一系列操作,借助HbaseUtil工具类静态代码块一次性创建连接对象、Table对象与Admin对象,实现数据展示、创建表、扫描表、写入数据与读取数据等功能。
写入数据原理图步骤解析如下:客户端向Zookeeper发送请求,请求向Hbase中写入数据至特定表。Zookeeper返回元数据表meta位置,客户端向指定regionserver请求meta表,下载并缓存到本地。解析meta表找到目标数据所在的hostname与regionname,向对应的regionserver写入数据。数据先存入regionserver的内存memorystore中,当内存达到M或触发flush时,数据被写入到hdfs的文件中,形成store file,即hfile。
读取数据原理图步骤解析:客户端向Zookeeper请求读取数据,获得meta表位置,下载并解析meta表,请求对应regionserver读取数据。regionserver首先在内存缓存与内存存储中查找数据,找到直接返回;未找到,则在hdfs中利用布隆过滤器快速定位并返回所需数据。布隆过滤器原理见:你不知道的查找算法之布隆过滤器。
注意点包括flush时机与hdfs中数据真实路径。路径为/hbase/data/namespace/table_name/region_name/cf_name/hfile。