天天看點

Hadoop之HBase邏輯模型簡介

HBase概念:

HBase是一個分布式面向列的開源資料庫,它的思想來源于Google的一篇叫BigTable的論文。與BigTable類似,BigTable是基于GFS(Google File System)的分布式列式資料庫,HBase是基于HDFS(Hadoop Distributed File System)的分布式列式資料庫,不了解BigTable的讀者可能不知道它的内容是什麼,這裡簡單的說明一下:BigTable認為世界上所有的資料庫的表結構都可以通過三個列即可實作,行鍵,列名,列值表示,例如:一個學生表

Student(    StudentId ,      StudentName,   StudentClass,                      StudentAge)                                      Student ( Key,                  ColumnName,     ColumnValue                   )

                                                                                                                                                                                       ( 1234567890,    'StudentName',    'Hirisw'                             )     

            (   1234567890 ,   'Hirisw',             'InformationSecurity0301'  ,  23             )                  可以表示成:             ( 1234567890,    'StudentClass',     'InformationSecurity0301')

                                                                                                                                                                                       ( 1234567890,    'StudentAge',        '23'                                  )

這裡就隻用了3列實作了一個結構性資料庫的多列功能,是以BigTable就是一張無所不包的大表。

HBase邏輯模型:

HBase邏輯模型包括:行鍵,時間戳,列族(包括列可以一個列族包含多個列,列族需要預先定義好不能随意添加,列族裡面的列是不需要預先定義的可以根據需求增加),這裡拿一個簡單的示例來說明HBase的邏輯結構:

Hadoop之HBase邏輯模型簡介

HBase原理:

HBase是基于HDFS的,HDFS有一個問題就是檔案不能修改,這個原因我們之前的内容已經講過,那麼HBase資料庫是怎麼實作增删改的呢,這裡要講到的就是所有操作都是基于日志的,都是通過增加記錄的形式達到增删改的效果,比如說插入新紀錄很好了解就是直接寫入一筆資料即可,那如何修改和删除呢,通過新增一個操作内容的記錄達到目的,比如說新增一個标記為删除的記錄即可達到删除的目的,修改一條記錄即可達到修改資料的目的這是在硬碟檔案裡的做法,如果是在記憶體裡面是可以執行修改内容的動作的,隻有當記憶體達到一定大小的時候再寫入檔案,那寫入檔案的删除記錄是不是就一直保留在那裡呢?其實也不是的,但檔案數量增加到一定門檻值的時候會将小檔案合并成大檔案,這個過程中就會把删除的記錄去掉。

HBase鍵值存儲:

在整個HBase的存儲中是按列族進行存儲的,存儲格式如下所示,其中鍵長度和值長度區分目前存儲資料鍵所在範圍和值所在範圍,行長度和行資訊說明屬于哪個行,列族長度和列族資訊說明屬于哪個列族,列資訊說明是哪個列,時間戳說明是哪個版本,鍵類型說明鍵的類型,後面值資訊就是值的内容。

Hadoop之HBase邏輯模型簡介

HBase組成部件:

行鍵:作為資料在HBase裡的唯一辨別,用來作為檢索記錄的索引,通路表裡行隻有三種方式:

1.單行鍵索引,隻通過一個行鍵進行精确比對擷取資料,這裡雖然隻有一個行鍵但是往往不止一條記錄而是有多條記錄,每一個行鍵可以帶有多個不同的版本時間戳。

2.給定行鍵範圍索引,這裡是給出行鍵的範圍如從AAAAA-ZZZZZ就會把這個區間裡面的記錄都比對查詢擷取出來。

3.全表掃描,可以看做是行鍵的最大值和最小值之間的範圍通路,是行鍵範圍索引的一個特例

列族:列的表示形式為<列族>:<限定符>,列族需要建表時實作設定好,但是列不需要事先設定

列族裡的列最後都有相同的讀寫方式(如等長的字元串),以提高性能,比如說讀寫又或者因為有相同結構能進行高性能壓縮,不僅提高存儲效率也利于資料在IO中的傳輸

時間戳:每次資料送出的時間,可由系統自動生成也可以由使用者顯示指派。HBase裡面儲存資料的機制就是跟時間戳有關的,有兩種方式

1.根據時間戳由新到舊的次序排序,取一定數量的時間戳進行保留,比如說1000個時間戳,那麼從新到舊的時間戳第1000個以後的就會丢棄掉。

2.根據時間戳由新到舊的次序排序,取一定時間内的時間戳進行保留,比如說7天内的時間戳,那麼超過7天的時間戳就會被丢棄掉。