<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 整體結構 ![](https://box.kancloud.cn/58be2df2fd52a437bb4c5cc1c4a03653_929x525.png) `/hbase/data/default` 1. Table中的所有行都按照row key的字典序排列。 2. Table 在行的方向上分割為多個Hregion 3. region按大小分割的(默認10G),每個表一開始只有一個region,隨著數據不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion。當table中的行不斷增多,就會有越來越多的Hregion。 4. Hregion是Hbase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的Hregion可以分布在不同的HRegion server上。但一個Hregion是不會拆分到多個server上的。 5. HRegion雖然是負載均衡的最小單元,但并不是物理存儲的最小單元。 事實上,HRegion由一個或者多個Store組成,每個store保存一個column family。 每個Strore又由一個memStore和0至多個StoreFile組成。 單個region大小由配置參數`HBase.hregion.max.filesize`決定,這個參數在你部署的hbase-site.xml設置.當一個region大小變得大于該值(因為寫入了更多數據),它會切分2個region ![](https://box.kancloud.cn/552d978dad4279bad643f6be2d4214b2_690x498.png) # STORE FILE&HFILE結構 StoreFile以HFile格式保存在HDFS上。 附:HFile的格式為: ![](https://box.kancloud.cn/ee528e169664b3eac09404477b75e244_930x273.png) 首先HFile文件是不定長的,長度固定的只有其中的兩塊:Trailer和FileInfo。正如圖中所示的,Trailer中有指針指向其他數據塊的起始點。 File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。 Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點。 Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基于LRU的Block Cache機制。 每個Data塊的大小可以在創建一個Table的時候通過參數指定,大號的Block有利于順序Scan,小號Block利于隨機查詢。 每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止數據損壞。 HFile里面的每個KeyValue對就是一個簡單的byte數組。但是這個byte數組里面包含了很多項,并且有固定的結構。我們來看看里面的具體結構: ![](https://box.kancloud.cn/0d06a73f318985a513c2c4f474eced17_929x159.png) 開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey的長度,緊接著是 RowKey,然后是固定長度的數值,表示Family的長度,然后是Family,接著是Qualifier,然后是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete)。Value部分沒有這么復雜的結構,就是純粹的二進制數據了。 HFile分為六個部分: Data Block 段–保存表中的數據,這部分可以被壓縮 Meta Block 段 (可選的)–保存用戶自定義的kv對,可以被壓縮。 File Info 段–Hfile的元信息,不被壓縮,用戶也可以在這一部分添加自己的元信息。 Data Block Index 段–Data Block的索引。每條索引的key是被索引的block的第一條記錄的key。 Meta Block Index段 (可選的)–Meta Block的索引。 Trailer–這一段是定長的。保存了每一段的偏移量,讀取一個HFile時,會首先 讀取Trailer,Trailer保存了每個段的起始位置(段的Magic Number用來做安全check),然后,DataBlock Index會被讀取到內存中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需從內存中找到key所在的block,通過一次磁盤io將整個 block讀取到內存中,再找到需要的key。DataBlock Index采用LRU機制淘汰。 HFile的Data Block,Meta Block通常采用壓縮方式存儲,壓縮之后可以大大減少網絡IO和磁盤IO,隨之而來的開銷當然是需要花費cpu進行壓縮和解壓縮。 目標Hfile的壓縮支持兩種方式:Gzip,Lzo HFile是以經過排序的key-value對象進行存儲的,寫入文件的時候,只需要采用順序寫,寫入速度非常快 # Memstore與storefile和blockcache 一個region由多個store組成,每個store包含一個列族的所有數據 Store包括位于內存的memstore和位于硬盤的storefile 寫操作先寫入memstore,當memstore中的數據量達到某個閾值,Hregionserver啟動flashcache進程寫入storefile,每次寫入形成單獨一個storefile 當storefile大小超過一定閾值后,會把當前的region分割成兩個,并由Hmaster分配給相應的region服務器,實現負載均衡 客戶端檢索數據時,先在memstore找,然后在blockcache中找,找不到再找storefile **memstore主要用于寫緩存,而blockcache用于讀緩存** HBase在讀操作上使用了LRU(最近最少使用算法)緩存技術.這種緩存也叫做BlockCache. BlockCache設計用來保存從HFile里讀入內存的頻繁訪問的數據,避免硬盤讀. ![](https://box.kancloud.cn/ecaf721ee4654b5f046a3f455addc313_815x420.png) # HLog(WAL log) WAL 意為Write ahead log(`http://en.wikipedia.org/wiki/Write-ahead_logging`),類似mysql中的binlog,用來 做災難恢復只用,Hlog記錄數據的所有變更,一旦數據修改,就可以從log中進行恢復。 每個Region Server維護一個Hlog,而不是每個Region一個。這樣不同region(來自不同table)的日志會混在一起,這樣做的目的是不斷追加單個文件相對于同時寫多個文件而言,可以減少磁盤尋址次數,因此可以提高對table的寫性能。帶來的麻煩是,如果一臺region server下線,為了恢復其上的region,需要將region server上的log進行拆分,然后分發到其它region server上進行恢復。 HLog文件就是一個普通的Hadoop Sequence File: * HLog Sequence File 的Key是HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是”寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系統中sequence number。 * HLog Sequece File的Value是HBase的KeyValue對象,即對應HFile中的KeyValue,可參見上文描述。 # 表結構 ![](https://box.kancloud.cn/0ad85e5bc8f9f98ce16f0c433ea78b89_1902x674.png)
                  <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>

                              哎呀哎呀视频在线观看