寫流程參考
1.首先,客戶端需要獲知其想要讀取的資訊的region的位置,這個時候,client訪問hbase上資料時並不需要hmaster參與(hmaster僅僅維護著table和region的元資料資訊,負載很低),只需要訪問zookeeper,從meta表獲取相應region資訊(位址和埠等)。【client請求zk獲取.meta.所在的regionserver的位址。】2.客戶端會將該儲存著regionserver的位置資訊的元資料表.meta.進行快取。然後在表中確定待檢索rowkey所在的regionserver資訊(得到持有對應行鍵的.meta表的伺服器名)。【獲取訪問資料所在的regionserver位址】
3.根據資料所在regionserver的訪問資訊,客戶端會向該regionserver傳送真正的資料讀取請求。伺服器端接收到該請求之後需要進行複雜的處理。
4.先從memstore找資料,如果沒有,再到storefile上讀(為了讀取的效率)。
注: 1.客戶端只需要配置zookeeper的訪問位址以及根目錄,就可以進行正常的讀寫請求。不需要配置集群的regionserver位址列表。
2.在hbase 0.96版本以前,hbase有兩個特殊的表,分別是-root-表和.meta.表,其中-root-的位置儲存在zookeeper中,-root-本身儲存了 .meta. table的regioninfo資訊,並且-root-不會**,只有乙個region。而.meta.表可以被切分成多個region。0.96版本以後將-root-表去掉了。
見文章:hbase資料讀取流程解析,寫得很詳細
普通操作是hbase中最核心、效率最高的操作。具體的寫入操作分為客戶端和伺服器端兩個部分。
前三點和讀類似:todo:待實戰需要優化時在深入學習,不然學了也忘——學而不思則罔。1.client先訪問zookeeper,從.meta.表獲取相應region資訊,然後從meta表獲取相應region資訊
2.根據namespace、表名和rowkey根據meta表的資料找到寫入資料對應的region資訊
3.找到對應的regionserver
把資料先寫到wal中,即hlog,然後寫到memstore上
4.memstore達到設定的閾值後則把資料刷成乙個磁碟上的storefile檔案。
5.當多個storefile檔案達到一定的大小後(這個可以稱之為小合併,合併資料可以進行設定,必須大於等於2,小於10——hbase.hstore.compaction.max和hbase.hstore.compactionthreshold,預設為10和3),會觸發compact合併操作,合併為乙個storefile,(這裡同時進行版本的合併和資料刪除。)
6.當storefile大小超過一定閾值後,會把當前的region分割為兩個(split)【可稱之為大合併,該閾值通過hbase.hregion.max.filesize設定,預設為10g】,並由hmaster分配到相應的hregionserver,實現負載均衡
[2]hbase資料讀取流程解析
2.hbase企業應用開發實戰
寫流程參考
HBase 讀寫流程
1.讀流程 client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的資料。meta中又儲存了使用者表的region資訊 根據namespace 表名和rowkey在meta表中找到對應的region資訊 找到這個region對應的regionserver 查詢...
HBase讀寫流程
1 client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的資料。meta中又儲存了使用者表的region資訊 2 根據namespace 表名和rowkey在meta表中找到對應的region資訊 3 找到這個region對應的regionserver 4 ...
HBase讀寫流程
一 hbase讀資料流程 hbase的regionserver的記憶體memstore,block cache。memstore作業主要是寫,另一部分主要是讀的。block cache用的是least recently used lru 如果block cache達到上限,會啟動淘汰機制。hregi...