1、歷史背景
-
產生原因
-
內因
-
hadoop之mapreduce/hdfs/hive等適合做批量數據處理,且只能以順序方式訪問數據。
-
-
外因
-
現實開發應用場景中,經常需要海量數據場景下的實時數據隨機訪問的需求,hadoop作爲大數據的承載和計算平臺應該予以滿足。
-
-
2、hbase概述
-
hbase介紹
-
hadoop database的簡稱
-
hbase是一個數據模型,屬於hadoop生態系統的一部分,提供對海量數據的隨機實時讀/寫訪問。
-
構建在hadoop之hdfs之上,分佈式面向列的數據庫
-
參考谷歌的bigtable數據庫設計,擁有hdfs的分塊存儲、冗餘、容錯的優良特性。
-
完全開源、優秀的橫向擴展性。
-
-
hbase與hdfs對比說明
HDFS |
HBase |
適於存儲大文件的分佈式文件系統 |
建立在HDFS之上的數據庫 |
不支持快速單獨記錄查找,即順序訪問 |
提供在較大的錶快速查找,即隨機訪問,也可以順序訪問 |
批量任務處理,吞吐量高時延高、實時性差 |
提供了億級記錄低延遲訪問任意行記錄,即隨機存取 (原因:內部使用哈希表和提供隨機接入,並且其存儲索引,可將在HDFS文件中的數據進行快速查找。) |
-
應用場景
-
高併發、簡單條件、隨機查詢
-
不善長join類操作,新版本正在陸續支持與升級中
-
-
半結構化、非結構化數據存儲
-
-
應用案例
-
數據採集結果存儲、海量數據實時查詢等項目開發當中使用非常廣泛。
-
國外的facebook、google、yahoo!,國內的互聯網中大型公司、BAT內部均有廣泛使用。
-
-
hbase數據模型
-
重要概念
-
命名空間(namespace)
-
類比於關係型數據庫中的不同的Database數據庫。
-
利用命名空間,在多租戶場景下可做到更好的資源和數據隔離。
-
-
表(table)
-
類比於rdb中的表
-
以"表"爲單位組織數據,表由多行組成
-
-
行(row)
-
行由一個RowKey和多個列族組成,一個行有一個RowKey作爲行的唯一標識。
-
-
列族(column family,簡稱CF)
-
每一行由若干列族組成,每個列族下可包含多個列。
-
列族是列共性的一些體現,如baseInfo列族和addressInfo列族,baseInfo可以包括name(名字),age(年齡),gender(性別)屬性列,而addressInfo可以包括province(省份),city(市), email(郵箱)等屬性列。
-
物理上,同一列族的數據存儲在一起的。
-
-
列限定符(column qualifier)
-
列由列族和列限定符唯一指定,像如上的name、age即是baseInfo列族的列限定符。
-
-
單元格(cell)
-
單元格由RowKey、列族、列限定符唯一定位,單元格之中存放一個值(Value)和一個版本號。
-
-
時間戳(timestamp)
-
即爲版本號,來標識一個單元格的數據的最新的插入或是修改時間
-
單元格內不同版本的值按時間倒序排列,最新的數據排在最前面
-
-
-
核心設計
-
面向列(列族)定義、列(列族)存儲的數據庫,其數據庫也稱爲空間namespace。
-
表的基本組成單元是行,每行有個唯一標識稱爲rowKey,表中數據按rowKey進行字典序排序存儲。
-
一個表有多個列族以及每一個列族可以有任意數量的列,後續新增列的值連續地存儲在磁盤上。
-
表中的每個單元格值都具有時間戳,來標識該單元格的最後插入或更新時間。
-
-
簡易邏輯說明
-
表是行的集合
-
行是列族的集合
-
列族是列的集合
-
列是鍵值對的集合
-
-
hbase數據表模板
-
Rowid |
Column Family |
Column Family |
|||
|
column1 |
column2 |
column3 |
column1 |
column2 |
rowkey1 |
|
|
|
|
|
rowkey2 |
|
|
|
|
|
rowkey3 |
|
|
|
|
|
-
hbase數據表樣例(學生信息表)
Rowid |
baseInfo |
addressInfo |
|||
|
name |
age |
gender |
province |
city |
20190901 |
張一 |
21 |
男 |
河北省 |
石家莊市 |
20190902 |
張二 |
22 |
女 |
河南省 |
鄭州市 |
20190903 |
張三 |
21 |
男 |
內蒙古 |
赤峯市 |