HBase學習(一)——入門

一、什么是HBase?特性

HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),基于Hadoop,建立在HDFS上。HBase是為了解決HDFS上能存結(jié)構(gòu)化的數(shù)據(jù)卻不能處理這些數(shù)據(jù)的情況,實際上就是實現(xiàn)了HDFS的隨機讀寫,比如當刪除一個數(shù)據(jù)是對數(shù)據(jù)做一個標記,并未真正刪除,當然用戶就看不到被標記的數(shù)據(jù),真正刪除的時候是在合并文件的時候才識別刪除標記把數(shù)據(jù)刪除掉。

大數(shù)據(jù)組件圖.png

  • 海量存儲
    適合用來存儲PB級別的海量數(shù)據(jù)
  • 列式存儲
    指的是列族存儲,列族下面可以有很多個列,列就相當于數(shù)據(jù),列族在創(chuàng)建HBase表的時候就要指定好
  • 方便擴展
    由于是基于Hadoop建立在HDFS上,那么數(shù)據(jù)也是就跟之前提到的HDFS存儲數(shù)據(jù)特點一樣,多份存儲,還支持橫向擴展,擴展性體現(xiàn)在2個方面:一個是基于上層業(yè)務處理能力(RegionServer)的擴展,一個是基于存儲能力(HDFS)的擴展。
  • 稀疏性,一般數(shù)據(jù)庫都是一行數(shù)據(jù)中如果某一列沒數(shù)據(jù)就是賦值為null,然而HBase則是一行中某一列沒數(shù)據(jù)就沒數(shù)據(jù),沒有說賦值為null的說法。這樣數(shù)據(jù)看起來就不是像傳統(tǒng)數(shù)據(jù)庫展示的那樣整整齊齊了。對于傳統(tǒng)數(shù)據(jù)庫,插入列和刪除列對整個數(shù)據(jù)庫的改動是很大的,但對于非關(guān)系型數(shù)據(jù)庫,插入列和刪除列跟插入記錄和刪除記錄類似。
    image.png

二、HBase架構(gòu)解析

圖很重要.png

一個HRegion大致可以當成一張表來看待,一個Store大致可以當成一個列族來看待,當表數(shù)據(jù)量很大的時候,會按數(shù)據(jù)把HRegion進行切分分配給不同的HRegionServer。使用HBase時需要有HDFS和ZK,就要啟動hadoop和zookeeper組件。

  • HRegion:HBase表的分片,是HBase分布式存儲和負載均衡的最小單元,同一個Region只能拆分到同一個RegionServer里,不同的Region可以拆分到不同的RegionServer中。關(guān)于拆分操作,HBase是以Store的大小來判斷是否拆分Region。
  • HLog:修改記錄日志
  • Mem Store:內(nèi)存存儲,達到一定閾值時會flush到文件中
  • Store File:對應一個列族,實際存儲文件
  • HFile:文件存儲格式,存儲在Store File中,是不定長的,固定的長度有Trailer和FileInfo這2塊,Trailer指針指向其他數(shù)據(jù)塊的起始點,F(xiàn)ileInfo記錄著文件的一些meta信息。

hbase的邏輯結(jié)構(gòu)

有store實際存儲的,列族其實就是多個列的分類,每一條記錄都有一個rowkey,是唯一的,region相當于是表的切片,分塊切分存儲
image.png

hbase的物理結(jié)構(gòu)

hbase如何實現(xiàn)在hdfs上隨機讀寫,快速寫呢,當修改操作時實際上也是新增一條最新的記錄,當時間戳大于舊數(shù)據(jù)時間戳的話,則返回時間戳大的那條記錄;當刪除操作時實際上是把那條記錄打個標記,類型改為Delete,則不返回這條記錄,但這條件記錄還是存在的
image.png

hbase基礎架構(gòu)

Master管DML操作,對數(shù)據(jù)做get、put、delete操作,Region Server管DDL操作,對表做create、delete、alter操作
image.png

其中各組件在HBase中的作用

  • zookeeper
    作為Master的的高可用,負責RegionServer的監(jiān)控,當RegionServer有異常時,會通過回調(diào)的形式通知master情況。
    作為元數(shù)據(jù)的入口,以便客戶端查找某個數(shù)據(jù),而且負責集群配置的維護工作,比如通過zookeeper來保證集群只有一個master運行,當master掛了,會通過競爭機制來產(chǎn)生新的master提供服務。
  • HMaster
    給RegionServer分配Region
    維護整個集群的負載均衡
    維護集群的元數(shù)據(jù)信息
    當Region失效了,會把Region分配給正常的RegionServer,當RegionServer失效時,會把Region和HLog給其他正常的RegionServer。注意:當RegionServer掛了并不代表數(shù)據(jù)就沒了,數(shù)據(jù)是存在HDFS的,只要從HDFS再把數(shù)據(jù)拿出來就好。
  • HRegionServer
    它是真正“干活”的節(jié)點,直接對接讀寫請求
    管理著master為其分配的Region
    處理來自客戶端的讀寫請求
    負責和HDFS進行交互,存儲數(shù)據(jù)到HDFS
    負責Region的拆分工作和Storefile的合并工作
  • HDFS
    提供元數(shù)據(jù)和表數(shù)據(jù)的底層分布式存儲服務

三、HBase數(shù)據(jù)結(jié)構(gòu)

  • RowKey
    相當于mysql數(shù)據(jù)庫的主鍵,全局唯一的,用來檢索記錄,一般來說設計rowkey長度在70~100字節(jié)就足夠滿足需求了,在HBase中保存為字節(jié)數(shù)組,注意:HBase中的數(shù)據(jù)類型只有字節(jié)數(shù)組,但提供了一個HBaseUtils工具類幫助我們轉(zhuǎn)換為我們需要的數(shù)據(jù)類型比如String等等。數(shù)據(jù)按照rowkey的字典序排序存儲,在設計rowkey時要盡量將經(jīng)常一起讀寫的行存儲在一起(位置相關(guān)性)。
    訪問rowkey的3種方式:
    ①通過單個rowkey訪問
    ②通過rowkey的正則
    ③全表掃描

  • Region
    相當于mysql中的數(shù)據(jù)表,hbase創(chuàng)建表時只需要表名和列族即可,不需要聲明表字段,這就意味著往hbase寫入數(shù)據(jù)時,字段可以動態(tài)的指定,比mysql數(shù)據(jù)庫相比起來就很靈活了。

  • Row
    hbase表的每行數(shù)據(jù)都是由一個RowKey和多個Column組成,hbase數(shù)據(jù)是有按照字典序順序存儲的,而且在查詢檢索數(shù)據(jù)時必定要指定rowkey,所以優(yōu)良的設計rowkey就顯得十分重要了。

  • Column Family
    指的是列族,在創(chuàng)建表的時候就要指定,可以多個,列不能脫離列族而存在,列名都以列族作為前綴。

  • Time Stamp
    時間戳,用于標識數(shù)據(jù)的版本,每天數(shù)據(jù)寫入時如果不指定時間戳,則系統(tǒng)會按照寫入hbase的時間把該條數(shù)據(jù)的這個timestamp填充上,這個timestamp很重要,決定該條數(shù)據(jù)是否是最新的

  • namespace
    相當于mysql中的數(shù)據(jù)庫名,hbase默認提供了2個Name Space,一個是hbase,用來存放hbase內(nèi)置的表;一個是default,用來提供給用戶的表存放。

  • Cell
    由{rowkey,列族,列限定符,timestamp}組成的唯一單元,cell中的數(shù)據(jù)是沒有數(shù)據(jù)類型的,都是統(tǒng)一的字節(jié)碼存儲,不過hbase提供了一個工具類幫助字節(jié)數(shù)組轉(zhuǎn)換成一些復雜的數(shù)據(jù)類型。

四、HBase讀寫原理

新版和舊版有區(qū)別,0.98版本前還有一張-ROOT-表,所以讀步驟就加多一步,就是在尋找meta表前先去找-ROOT-表,從-ROOT-表獲取meta表的位置。還有hbase讀操作比寫操作反而慢。

  • 讀流程
    client先請求zookeeper集群獲得hbase的meta表的存儲位置,然后就去找meta表,meta表里存的是數(shù)據(jù)被分配在哪一個RegionServer中,然后再去對應的RegionServer找數(shù)據(jù),讀的時候是先讀內(nèi)存Mem Store中的數(shù)據(jù),因為在這里的數(shù)據(jù)是最新的,沒有才去硬盤讀。
    讀流程.png
  • 寫流程
    cilent先請求zookeeper集群獲得hbase的meta表的存儲位置,然后去找對應的RegionServer中的meta表,返回meta表數(shù)據(jù),之后發(fā)送寫入數(shù)據(jù)請求,寫入操作是先寫入編譯日志HLog中,再寫入內(nèi)存Mem Store中,最后反饋寫入成功。
    寫流程.png
    三個條件會觸發(fā)flush操作把數(shù)據(jù)從內(nèi)存寫入到HDFS
    不過以下這些條件是可以通過配置文件hbase-default.xml來配置修改的
  • 當一個HRegionServer里所有的Mem Store加起來達到這個堆內(nèi)存的40%時,觸發(fā)flush操作
  • 當一個Mem Store的數(shù)據(jù)超過1小時的時候觸發(fā)flush操作
  • 當一個HRegion中的所有Mem Store加起來的數(shù)據(jù)超過128m的時候觸發(fā)flush操作

還可以配置compact操作,當達到多少個小文件時或者達到多少天時就進行合并成一個新的大文件。合并是Store級別的列族合并。

附學習文章:
1、為什么出現(xiàn)了HBase?
2、一圖了解HBase
3、hbase中storefile、hfile、store、region的關(guān)系

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考:http://www.itdecent.cn/p/569106a3008f 最近在逐步跟進Hbase的相關(guān)...
    博弈史密斯閱讀 931評論 1 1
  • 一、簡介 Hbase:全名Hadoop DataBase,是一種開源的,可伸縮的,嚴格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,611評論 0 12
  • 一、Region 概念 Region是表獲取和分布的基本元素,由每個列族的一個Store組成。對象層級圖如下: T...
    達微閱讀 1,588評論 0 1
  • Hbase架構(gòu)與原理 HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于 Fay Chang所撰寫的Goo...
    全能程序猿閱讀 86,396評論 2 37
  • 為什么是怪物就不能生存在世界上?為什么怪物就必須是低智商生物? 索菲亞出生的那天剛好是人類進功怪物家族的那天,索菲...
    喜歡水的旱鴨子閱讀 228評論 0 0

友情鏈接更多精彩內(nèi)容