<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 1. 元數據存儲 HBase 中有一個系統表 hbase:meta 存儲 HBase 元數據信息,可以在 HBase Web UI 查看到相關信息。如下圖。 ![](https://img.kancloud.cn/ad/8c/ad8c488ef0c5d4695d5cfae7828180a5_1066x490.png) 該表記錄保存了每個表的 Region 地址,還有一些其他信息,例如 Region 的名字,對應表的名字、開始行鍵、結束行鍵、服務器的信息。hbase:meta 表中每一行對應一個單一的 Region。數據如下圖。 ![](https://img.kancloud.cn/53/91/5391fc66426b31827ff342ddeadfe8f0_1062x283.png) ![](https://img.kancloud.cn/98/86/9886cc88ae626112fbf0b183b5015db9_1084x485.png) zooKeeper 中存儲了 hbase:meta 表的位置,客戶端可以通過 ZooKeeper 查找到 hbase:meta 表的位置,hbase:meta 是 hbase 當中一張表,肯定由一個HRegionServer 來 管 理 , 其 實 主 要 就 是 要 通 過 ZooKeeper 的`/hbase/meta-region-server`獲取存儲`hbase:meta`表的 HRegionServer 的地址。 ![](https://img.kancloud.cn/94/54/9454f1cb80f887e3d58967358f46bd25_1070x111.png) ![](https://img.kancloud.cn/d6/7e/d67e199410a3bbbf9ee9ac0bedc29662_1063x454.png) 圖中可以看出,hbase:meta 表的位置是 hadoop103。 <br/> # 2. 讀流程 HBase 讀數據流程如圖所示 ![](https://img.kancloud.cn/42/bc/42bccf1ab497a5974b0c61280a6e2d11_1304x669.png) 1、Client 先訪問 ZooKeeper,從 meta 表讀取 Region 的位置,然后讀取 meta表中的數據。meta 中又存儲了用戶表的 Region 信息; 2、根據 RowKey 在 meta 表中找到對應的 Region 信息; 3、找到這個 Region 對應的 HRegionServer; 4、查找對應的 Region; 5、先從 MemStore 找數據,如果沒有,再到 BlockCache 里面讀; 6、BlockCache 還沒有,再到 StoreFile 上讀(為了讀取的效率); 7、如果是從 StoreFile 里面讀取的數據,不是直接返回給客戶端,而是先寫入BlockCache,再返回給客戶端。 從整體的方面看,如下圖所示 ![](https://img.kancloud.cn/21/60/2160b6c897095ad1678f39c06e3ace0b_1307x574.png) <br/> # 3. 寫流程 Hbase 寫流程如圖所示(寫數據比讀數據要快): ![](https://img.kancloud.cn/db/5f/db5ffa4e8f9c186869a4a9567634aa85_1304x571.png) (1)Client 訪問 ZooKeeper,獲取 Meta 表所處位置(ip) (2)訪問 Meta 表,然后讀取 Meta 表中的數據。 (3)根據 namespace(類似與關系型數據庫中的數據庫)、表名和 RowKey 在 Meta 表中找到該 RowKey 應該寫入到哪個 Region。 (4)找到這個 Region 對應的 RegionServer,并發送寫數據請求 (5)HRegionServer 將數據先寫到 HLog(Write Ahead Log)。為了數據的持久化和恢復; (6)HRegionServer 將數據寫到內存(MemStore); (7)反饋 Client 寫成功。 寫數據這一塊也可以看出,HBase 將數據寫入到內存中后,就返回給客戶端寫入成功,響應非常快。這也是為什么 HBase 寫數據速度快的原因。 <br/> # 4. 數據 Flush 過程 從上面寫入數據的流程中可以看出,HBase 寫數據是寫入到 MemStore 內存就會返回客戶端了,并沒有直接落磁盤。這也是為什么 HBase 插入數據會比較快的原因,磁盤 IO 非常小。 <br/> 那么什么時候數據會落磁盤呢?其實 MemStore 空間是有限的,當 MemStore 數據達到閾值(默認是 128M,老版本是 64M),RegionServer 將數據刷到 HDFS 上,生成 HFile,然后將內存中的數據刪除,同時刪除 HLog 中的歷史數據。該操作是由 RegionServer 自己完成的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看