Hadoop元件--分散式資料庫Hbase

暖夏未眠丶發表於2018-01-19

1. HBase概述 先來看下HBase在Hadoop生態中的位置 HBase是Apache Hadoop⽣態系統中的重要⼀員,主要⽤於海量結構化資料儲存。 HBase是一個構建在HDFS上的分散式列儲存系統(嚴格的來說應該是列族儲存),資料儲存在HDFS上。

1. HBase概述

先來看下HBase在Hadoop生態中的位置

HBase是Apache Hadoop⽣態系統中的重要⼀員,主要⽤於海量結構化資料儲存。

HBase是一個構建在HDFS上的分散式列儲存系統(嚴格的來說應該是列族儲存),資料儲存在HDFS上。

HBase與MapReduce良好的整合,使用MapReduce來處理資料。

HBase利用Zookeeper做分散式協同。

從邏輯上講,HBase將資料按照表、⾏和列進⾏儲存,它是⼀個分散式的、稀疏的、持久化儲存的多維度排序表。

相對於Hive來說,HBase適合實時資料訪問,Hive則適合批處理資料分析。

HBase的應用場景很多,百度的頁面庫,淘寶的商品庫,小米的雲端儲存服務等。

2. HBase資料模型

(Table, RowKey, Family, Qualifier, TimeStamp) -->Value

在HBase中,一行資料由行健RowKey作為鍵,包含多個列族(Famliy),列族由可同時訪問的多個列組成(Qualifier),

時間戳作為索引(TimeStamp)。

--可以是稀疏的,空值在HBase中不會被儲存。

Row Key

--行健,資料在表中的唯一標實

--所有的操作都是基於主鍵的。

--資料安照行健來排序。

特點

--大:⼀個表可以有數⼗億⾏,上百萬列

--⾯向列:⾯向列(族)的儲存,列(族)獨⽴檢索

--稀疏:對於空(null)的列,並不佔⽤儲存空間,表可以設計的非常稀疏

--資料多版本:每個單元中的資料可以有多個版本(時間戳不同)

--資料型別單⼀:HBase中的資料都是位元組,沒有型別

3. 物理模型

--以列族為單位儲存

--每個cell中會儲存以下資訊

• Row key

• Column family name
• Column name
• Timestamp
• Value

資料表中所有行,安照Row Key字典序排列,Table在行的方向上分為多個region,

Region按⼤⼩分割的,每個表開始只有⼀個Region,隨著資料增多,Region不斷增⼤,當增⼤到⼀個閥值的時候,

Region就會等分會兩新的Region,之後會有越來越多的Region。Region是HBase中分散式儲存和負載均衡的最⼩單元,

不同Region分佈到不同RegionServer上。

Region雖然是分散式儲存的最⼩單元,但並不是儲存的最⼩單元。

--Region由⼀個或者多個Store組成,每個Store儲存⼀個columns family

--每個Strore又由⼀個MemStore和0至多個StoreFile組成
--MemStore儲存在記憶體中,StoreFile儲存在HDFS上

4. HBase架構

HRegion

--HBase 會⾃動地將表劃分為不同的區域

-- 每個區域包含所有⾏的⼀個⼦集

--對⽤戶來說,每個表是⼀堆資料的集合,靠主鍵來區分

--從物理上來說,⼀張表被拆分成了多塊,每⼀塊是⼀個HRegion

-- 我們⽤表名+ 開始和結束主鍵,來區分每⼀個HRegion

-- ⼀個HRegion 會儲存⼀個表⾥⾯某段連續的資料,從開始主鍵到結束主鍵

--⼀張完整的表格是儲存在多個HRegion上⾯

HRegionServer

--所有的資料庫資料都儲存在HDFS上⾯

-- ⽤戶通過訪問HRegionServer獲取這些資料

--⼀臺機器上⾯⼀般只運⾏⼀個HRegionServer

-- ⼀個HRegionServer上⾯有多個HRegion,⼀個HRegion 也只會被⼀個HRegionServer維護

--HRegionServer主要負責響應⽤戶I/O請求,從HDFS讀寫資料,是HBase中最核⼼的模組

-- HRegionServer內部管理了⼀系列HRegion物件

-- 每個HRegion對應了Table中的⼀個Region,HRegion中由多個HStore組成

-- 每個HStore 對應了Table中的⼀個Column Family的儲存

-- 最好將具備共同IO特性的Column放在⼀個Column Family中

HMaster

--每個HRegionServer都會與HMaster通訊

-- HMaster的主要任務就是給HRegionServer分配HRegion

-- HMaster指定HRegionServer 要維護哪些HRegion

-- 當⼀臺HRegionServer當機時,HMaster會把它負責的HRegion標記為未分配,然後再把它們分配到其他HRegionServer 中

5. HBase Shell

啟動HBase shell

$./bin/hbase shell

建表:表名scores,有兩個列族:‘grade’和‘course’

>create 'scores' ,'grade','course'複製程式碼

檢視HBase中的表

>list複製程式碼

檢視錶結構

>describe 'scores'複製程式碼

put: 寫⼊資料,格式如下:

>put 't1', 'r1', 'c1', 'value', ts1複製程式碼

t1指表名,r1指⾏鍵(key),c1指列名,value指值,ts1指資料戳,
⼀般都省略不設定。

向scores表中插⼊資料

> put 'scores', 'Tom', 'grade', 6
> put 'scores', 'Tom', 'course:math', 89
> put 'scores', 'Tom', 'course:art', 63
> put 'scores', 'Jim', 'grade', 7
> put 'scores', 'Jim', 'course:math', 75
> put 'scores', 'Jim', 'course:science', 48複製程式碼

get隨機查詢資料

格式

>get 't1', 'r1'
>get 't1', 'r1', 'c1'
>get 't1', 'r1', 'c1', 'c2'
>get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
>get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2],
VERSIONS => 4}

>get 'sources', 'Tom'
>get 'sources', 'Tom', 'grade'
>get 'sources', 'Tom', 'grede' , 'course'複製程式碼


scan 範圍查詢資料,scan命令格式如下

>scan 't1'
>scan 't1', {COLUMNS => 'c1:q1'}
>scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW
=> 'xyz'}
>scan 't1', {REVERSED => true}


> scan 'scores'
> scan 'scores',{COLUMNS =>'course:math'}
> scan 'scores',{COLUMNS =>'course'}

> scan 'scores',{COLUMNS =>'course', LIMIT => 1, STARTROW => 'Jim'}複製程式碼


delete刪除資料

delete命令格式如下

>delete 't1', 'r1', 'c1', ts1

> delete 'scores', 'Jim', 'course:math'複製程式碼

Truncate刪除全表資料

> truncate 'scores'複製程式碼

alter修改表結構

為scores表增加⼀個family列族,名為profile

> alter 'scores', NAME => 'profile'複製程式碼

刪除profile列族

> alter 'scores', NAME => 'profile', METHOD => 'delete'複製程式碼

刪除表

> drop 'scores'複製程式碼

上述所寫如有不對之處,還請各位前輩指出賜教。--五維空間

原文連結


相關文章