内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解-創(chuàng)新互聯(lián)

1、HBase的數(shù)據(jù)存儲(chǔ)原理

Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解

平原ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
  • 一個(gè)HRegionServer會(huì)負(fù)責(zé)管理很多個(gè)region
  • 一個(gè)*region包含很多個(gè)store
    • 一個(gè)列族就劃分成一個(gè)store**
    • 如果一個(gè)表中只有1個(gè)列族,那么每一個(gè)region中只有一個(gè)store
    • 如果一個(gè)表中有N個(gè)列族,那么每一個(gè)region中有N個(gè)store
  • 一個(gè)store里面只有一個(gè)memstore
    • memstore是一塊內(nèi)存區(qū)域,寫入的數(shù)據(jù)會(huì)先寫入memstore進(jìn)行緩沖,然后再把數(shù)據(jù)刷到磁盤
  • 一個(gè)store里面有很多個(gè)StoreFile, 最后數(shù)據(jù)是以很多個(gè)HFile這種數(shù)據(jù)結(jié)構(gòu)的文件保存在HDFS上

    • StoreFile是HFile的抽象對象,如果說到StoreFile就等于HFile
    • 每次memstore刷寫數(shù)據(jù)到磁盤,就生成對應(yīng)的一個(gè)新的HFile文件出來
      Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解

      2、HBase數(shù)據(jù)讀流程

      Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解
      說明:HBase集群,只有一張meta表,此表只有一個(gè)region,該region數(shù)據(jù)保存在一個(gè)HRegionServer上

  • 1、客戶端首先與zk進(jìn)行連接;從zk找到meta表的region位置,即meta表的數(shù)據(jù)存儲(chǔ)在某一HRegionServer上;客戶端與此HRegionServer建立連接,然后讀取meta表中的數(shù)據(jù);meta表中存儲(chǔ)了所有用戶表的region信息,我們可以通過scan 'hbase:meta'來查看meta表信息
  • 2、根據(jù)要查詢的namespace、表名和rowkey信息。找到寫入數(shù)據(jù)對應(yīng)的region信息
  • 3、找到這個(gè)region對應(yīng)的regionServer,然后發(fā)送請求
  • 4、查找并定位到對應(yīng)的region
  • 5、先從memstore查找數(shù)據(jù),如果沒有,再從BlockCache上讀取
    • HBase上Regionserver的內(nèi)存分為兩個(gè)部分
    • 一部分作為Memstore,主要用來寫;
    • 另外一部分作為BlockCache,主要用于讀數(shù)據(jù);
  • 6、如果BlockCache中也沒有找到,再到StoreFile上進(jìn)行讀取
    • 從storeFile中讀取到數(shù)據(jù)之后,不是直接把結(jié)果數(shù)據(jù)返回給客戶端,而是把數(shù)據(jù)先寫入到BlockCache中,目的是為了加快后續(xù)的查詢;然后在返回結(jié)果給客戶端。

3. HBase寫數(shù)據(jù)流程

Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解

  • 1、客戶端首先從zk找到meta表的region位置,然后讀取meta表中的數(shù)據(jù),meta表中存儲(chǔ)了用戶表的region信息

  • 2、根據(jù)namespace、表名和rowkey信息。找到寫入數(shù)據(jù)對應(yīng)的region信息

  • 3、找到這個(gè)region對應(yīng)的regionServer,然后發(fā)送請求

  • 4、把數(shù)據(jù)分別寫到HLog(write ahead log)和memstore各一份

  • 5、memstore達(dá)到閾值后把數(shù)據(jù)刷到磁盤,生成storeFile文件

  • 6、刪除HLog中的歷史數(shù)據(jù)
補(bǔ)充:
HLog(write ahead log):
    也稱為WAL意為Write ahead log,類似mysql中的binlog,用來做災(zāi)難恢復(fù)時(shí)用,HLog記錄數(shù)據(jù)的所有變更,一旦數(shù)據(jù)修改,就可以從log中進(jìn)行恢復(fù)。

4、HBase的flush機(jī)制

4.1、flush觸發(fā)條件

4.1.1、memstore級別限制

  • 當(dāng)Region中任意一個(gè)MemStore的大小達(dá)到了上限(hbase.hregion.memstore.flush.size,默認(rèn)128MB),會(huì)觸發(fā)Memstore刷新。
<property>
    <name>hbase.hregion.memstore.flush.size</name>
    <value>134217728</value>
</property>

4.1.2 、region級別限制

  • 當(dāng)Region中所有Memstore的大小總和達(dá)到了上限(hbase.hregion.memstore.block.multiplier hbase.hregion.memstore.flush.size,默認(rèn) 2 128M = 256M),會(huì)觸發(fā)memstore刷新。
<property>
    <name>hbase.hregion.memstore.flush.size</name>
    <value>134217728</value>
</property>
<property>
    <name>hbase.hregion.memstore.block.multiplier</name>
    <value>2</value>
</property>   

4.1.3、Region Server級別限制

  • 當(dāng)一個(gè)Region Server中所有Memstore的大小總和超過低水位閾值hbase.regionserver.global.memstore.size.lower.limit*hbase.regionserver.global.memstore.size(前者默認(rèn)值0.95),RegionServer開始強(qiáng)制flush;
  • 先Flush Memstore大的Region,再執(zhí)行次大的,依次執(zhí)行;
  • 如寫入速度大于flush寫出的速度,導(dǎo)致總MemStore大小超過高水位閾值hbase.regionserver.global.memstore.size(默認(rèn)為JVM內(nèi)存的40%),此時(shí)RegionServer會(huì)阻塞更新并強(qiáng)制執(zhí)行flush,直到總MemStore大小低于低水位閾值
<property>
    <name>hbase.regionserver.global.memstore.size.lower.limit</name>
    <value>0.95</value>
</property>
<property>
    <name>hbase.regionserver.global.memstore.size</name>
    <value>0.4</value>
</property>

4.1.4、HLog數(shù)量上限

  • 當(dāng)一個(gè)Region Server中HLog數(shù)量達(dá)到上限(可通過參數(shù)hbase.regionserver.maxlogs配置)時(shí),系統(tǒng)會(huì)選取最早的一個(gè) HLog對應(yīng)的一個(gè)或多個(gè)Region進(jìn)行flush

4.1.5、定期刷新Memstore

  • 默認(rèn)周期為1小時(shí),確保Memstore不會(huì)長時(shí)間沒有持久化。為避免所有的MemStore在同一時(shí)間都進(jìn)行flush導(dǎo)致的問題,定期的flush操作有20000左右的隨機(jī)延時(shí)。

4.1.6、手動(dòng)flush

  • 用戶可以通過shell命令flush ‘tablename’或者flush ‘region name’分別對一個(gè)表或者一個(gè)Region進(jìn)行flush。

4.2、flush的流程

  • 為了減少flush過程對讀寫的影響,將整個(gè)flush過程分為三個(gè)階段:

    • prepare階段:遍歷當(dāng)前Region中所有的Memstore,將Memstore中當(dāng)前數(shù)據(jù)集CellSkipListSet做一個(gè)快照snapshot;然后再新建一個(gè)CellSkipListSet。后期寫入的數(shù)據(jù)都會(huì)寫入新的CellSkipListSet中。prepare階段需要加一把updateLock對寫請求阻塞,結(jié)束之后會(huì)釋放該鎖。因?yàn)榇穗A段沒有任何費(fèi)時(shí)操作,因此持鎖時(shí)間很短。

    • flush階段:遍歷所有Memstore,將prepare階段生成的snapshot持久化為臨時(shí)文件,臨時(shí)文件會(huì)統(tǒng)一放到目錄.tmp下。這個(gè)過程因?yàn)樯婕暗酱疟PIO操作,因此相對比較耗時(shí)。
    • commit階段:遍歷所有Memstore,將flush階段生成的臨時(shí)文件移到指定的ColumnFamily目錄下,針對HFile生成對應(yīng)的storefile和Reader,把storefile添加到HStore的storefiles列表中,最后再清空prepare階段生成的snapshot。

5、Compact合并機(jī)制

  • hbase為了==防止小文件過多==,以保證查詢效率,hbase需要在必要的時(shí)候?qū)⑦@些小的store file合并成相對較大的store file,這個(gè)過程就稱之為compaction。

  • 在hbase中主要存在兩種類型的compaction合并
    • ==minor compaction 小合并==
    • ==major compaction 大合并==
4.3.1 minor compaction 小合并
  • 在將Store中多個(gè)HFile合并為一個(gè)HFile

    在這個(gè)過程中會(huì)選取一些小的、相鄰的StoreFile將他們合并成一個(gè)更大的StoreFile,對于超過了TTL的數(shù)據(jù)、更新的數(shù)據(jù)、刪除的數(shù)據(jù)僅僅只是做了標(biāo)記。并沒有進(jìn)行物理刪除,一次Minor Compaction的結(jié)果是更少并且更大的StoreFile。這種合并的觸發(fā)頻率很高。

  • minor compaction觸發(fā)條件由以下幾個(gè)參數(shù)共同決定:
<!--表示至少需要三個(gè)滿足條件的store file時(shí),minor compaction才會(huì)啟動(dòng)-->
<property>
    <name>hbase.hstore.compactionThreshold</name>
    <value>3</value>
</property>

<!--表示一次minor compaction中最多選取10個(gè)store file-->
<property>
    <name>hbase.hstore.compaction.max</name>
    <value>10</value>
</property>

<!--默認(rèn)值為128m,
表示文件大小小于該值的store file 一定會(huì)加入到minor compaction的store file中
-->
<property>
    <name>hbase.hstore.compaction.min.size</name>
    <value>134217728</value>
</property>

<!--默認(rèn)值為LONG.MAX_VALUE,
表示文件大小大于該值的store file 一定會(huì)被minor compaction排除-->
<property>
    <name>hbase.hstore.compaction.max.size</name>
    <value>9223372036854775807</value>
</property>
4.3.2 major compaction 大合并
  • 合并Store中所有的HFile為一個(gè)HFile

    將所有的StoreFile合并成一個(gè)StoreFile,這個(gè)過程還會(huì)清理三類無意義數(shù)據(jù):被刪除的數(shù)據(jù)、TTL過期數(shù)據(jù)、版本號超過設(shè)定版本號的數(shù)據(jù)。合并頻率比較低,默認(rèn)7天執(zhí)行一次,并且性能消耗非常大,建議生產(chǎn)關(guān)閉(設(shè)置為0),在應(yīng)用空閑時(shí)間手動(dòng)觸發(fā)。一般可以是手動(dòng)控制進(jìn)行合并,防止出現(xiàn)在業(yè)務(wù)高峰期。

  • major compaction觸發(fā)時(shí)間條件

    <!--默認(rèn)值為7天進(jìn)行一次大合并,-->
    <property>
    <name>hbase.hregion.majorcompaction</name>
    <value>604800000</value>
    </property>
  • 手動(dòng)觸發(fā)

    ##使用major_compact命令
    major_compact tableName

    <property>
    <name>hbase.hregion.majorcompaction</name>
    <value>604800000</value>
    </property>

  • 手動(dòng)觸發(fā)

    ##使用major_compact命令
    major_compact tableName

標(biāo)題名稱:Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article14/dohcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站、微信小程序、虛擬主機(jī)、微信公眾號關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
寿宁县| 马山县| 三原县| 太和县| 美姑县| 信宜市| 萨嘎县| 彩票| 平邑县| 彰化县| 海兴县| 吉木乃县| 拜城县| 清徐县| 乐至县| 阆中市| 历史| 天峨县| 陵川县| 周宁县| 九龙城区| 静海县| 永靖县| 克东县| 恩施市| 庄浪县| 托克托县| 北辰区| 资源县| 维西| 盐亭县| 衢州市| 京山县| 内丘县| 渑池县| 卢湾区| 舒兰市| 郓城县| 鹤庆县| 资源县| 高淳县|