大資料——HBase基礎

蜂蜜柚子加苦茶發表於2020-09-24

HBase概述

HBase是一個領先的NoSQL資料庫

  • 是一個面向列儲存的資料庫
  • 是一個分散式hash map
  • 基於Google Big Table論文
  • 使用HDFS作為儲存並利用其可靠性

HBase特點

  • 資料訪問速度快,響應時間約2-20毫秒
  • 支援隨機讀寫,每個節點20k~100k+ops/s
  • 可擴充套件性,可擴充套件到20000+節點

HBase發展歷史

時間時間
2006年Google發表了關於Big Table論文
2007年第一個版本的HBase和Hadoop0.15.0一起釋出
2008年HBase作為Hadoop的子專案
2010年HBase稱為Apache頂級專案
2011年Cloudera基於HBase0.90.1推出CDH3
2012年HBase釋出了0.94版本
2013-2014年HBase先後釋出了0.96版本/0.98版本
2015-2016年HBase先後釋出了1.0版本、1.1版本和1.2.4版本
2017年HBase釋出1.3版本
2018年HBase先後釋出了1.4版本和2.0版本

HBase使用者群體

在這裡插入圖片描述

HBase應用場景(一)

增量資料-時間序列資料

  • 高容量,高速寫入
    在這裡插入圖片描述

HBase應用場景(二)

資訊交換-訊息傳遞

  • 高容量,高速讀寫
    在這裡插入圖片描述

HBase應用場景(三)

內容服務-Web後端應用程式

  • 高容量,高速讀寫
    在這裡插入圖片描述

HBase應用場景示例

Facebook

  • 9000 memcached instances,4000 shards mysql

Alibab

  • 自2010年以來,HBase一直為阿里搜尋系統的核心儲存

  • 當前規模(到2018為止)

     3個叢集,每個有1000+ nodes
     在Yarn上與Flink共享
      每天提供超過10M+ops/s的服務
    

Apache HBase生態圈

HBase生態圈技術

  • Lily-基於HBase的CRM
  • OpenTSDB-HBase面向時間序列資料管理
  • Kylin-HBase上的OLAP
  • Phoenix-SQL操作HBase工具
  • Splice Machine-基於HBase的OLTP
  • Apache Tephra-HBase事務支援
  • TiDB-分散式SQL DB
  • Apache Omid-優化事務管理
  • Yarn application timeline server v.2遷移到HBase
  • Hive metadata儲存可以遷移到HBase
  • Ambari Metrics Server將使用HBase做資料儲存

HBase物理架構

概述

HBase採用Master/Slave架構

  • HMaster
  • RegionServer
  • Zookeeper
  • HBase Client
  • Region

在這裡插入圖片描述

HMaster

HMaster的作用

  • 是HBase叢集的主節點,可以配置多個,用來實現HA
  • 管理和分配Region
  • 負責RegionServer的負載均衡
  • 發現失效的RegionServer並重新分配其上的Region

RegionServer

RegionServer負責管理維護Region

  • 一個RegionServer包含一個WAL、一個BlockCache(讀快取)和多個Region
  • 一個Region包含多個儲存區,每個儲存區對應一個列簇
  • 一個儲存區由多個StoreFile和MemStore組成
  • 一個StoreFile對應於一個HFile和一個列簇
  • HFile和WAL作為序列檔案儲存在HDFS上
  • Client與RegionServer互動

在這裡插入圖片描述

Region和Table

  • 單個Table(表)被分割槽成大小大致相同的Region
  • Region是HBase叢集分別資料的最小單位
  • Region被分配給叢集中的RegionServer
  • 一個Region只能分配給一個RegionServer

在這裡插入圖片描述

HBase邏輯架構-Row

Rowkey(行鍵)是唯一的並已排序
Schema可以定義何時插入記錄
每個Row都可以定義自己的列,即使其他Row不使用

  • 相關列定義為列簇

使用唯一時間戳維護多個Row版本

  • 在不同版本中值型別可以不同

HBase資料全部以位元組儲存
在這裡插入圖片描述

HBase資料管理

資料管理目錄

  • 系統目錄表hbase:meta

     儲存後設資料等
    
  • HDFS目錄中的檔案

  • Servers上的region實例項

HBase資料在HDFS上

  • 可以通過HDFS進行修復File

  • 修復路徑

     RegionServer->Table->Region->RowKey->列簇
    

在這裡插入圖片描述

HBase架構特點

強一致性
自動擴充套件

  • 當Region變大會自動分割
  • 使用HDFS擴充套件資料並管理空間

寫恢復

  • 使用WAL(Write Ahead Log)

與Hadoop整合

HBase Shell

HBase Shell是一種操作HBase的互動模式

  • 支援完整的HBase命令集
命令類別命令
Generalversion, status, whoami, help
DDLalter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DMLcount, delete, deleteall, get, get_counter, incr, put, scan, truncate
Toolsssign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
Replicationadd_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication

HBase服務啟動

  • 啟動hadoop
[root@hadoop100 ~]# start-all.sh
[root@hadoop100 ~]# jps

在這裡插入圖片描述

  • 啟動master
[root@hadoop100 ~]# hhbase-daemon.sh start  master

在這裡插入圖片描述

  • 啟動hbase shell
[root@hadoop100 ~]# hbase shell

在這裡插入圖片描述

HBase操作

  • 檢視版本
version

在這裡插入圖片描述

  • 檢視叢集狀態
status

在這裡插入圖片描述

  • 檢視當前使用者以及分組
whoami

在這裡插入圖片描述

  • 檢視幫助
help

在這裡插入圖片描述

  • 檢視HBase所有的表
list

在這裡插入圖片描述
list相當於mysql中的show tables

  • 建立一個表
create 'customer',{NAME=>'addr'},{NAME=>'order'}

在這裡插入圖片描述

  • 列出表的詳細資訊
desc 'customer'

在這裡插入圖片描述

  • 新增資料
put 'customer','1','addr:city','montoreal'

在這裡插入圖片描述

  • 獲取資料
get 'customer','1'

在這裡插入圖片描述

  • 新增資料並檢視
put 'customer','1','addr:address','210021 xiaohang road'
get 'customer','1'

在這裡插入圖片描述
在同一個列名中寫入不同的值

put 'customer','1','addr:city','nanjing'
get 'customer','1'

在這裡插入圖片描述
資料被覆蓋了

  • 修改列簇名並檢視錶詳情
disable 'customer'
alter 'customer',{NAME=>'sample'},{NAME=>'order',METHOD=>delete'}
desc 'customer'

在這裡插入圖片描述
一定用先禁用表:disable

  • 新增資料加上時間戳並檢視
enable 'customer'
put 'customer','1','addr:city','xuzhou',1600920903023
get 'customer','1','addr:city'

在這裡插入圖片描述
注意:如果新增資料為同一列名的,時間戳在已有的資料時間戳後的將覆蓋掉資料,否則不會

  • 檢視記錄
#檢視所有記錄
scan 'customer'
#檢視列名為city的資料
scan 'customer',{COLUMNS=>'addr:city'}
#檢視前一條資料
scan 'customer',{LIMIT=>1}

在這裡插入圖片描述

  • 統計表記錄數
put 'customer','2','addr:city','zhenjiang'
put 'customer','2','addr:address','baohua'
scan 'customer'
count 'customer'

在這裡插入圖片描述

  • 刪除行鍵再統計表記錄數
delete 'customer','2'
count 'customer'
  • 新增列簇
alter 'customer',NAME=>'name'
  • 刪除列簇
alter 'customer',NAME=>'sample',METHOD=>'delete'
  • 修改表名並檢視
snapshot 'customer','temp'
clone_snapshot 'temp','cust'
delete_snapshot 'temp'
desc 'cust'

HBase基本命令總結

使用者許可權:
user_permisooion ['表名'...]
grant '使用者名稱', 'RWXCA'
表:
    增:create '表名',{NAME=>'列簇名'},{NAME=>'列簇名'}...
    刪:disable '表名'  ----> drop '表名'
    改:snapshot '表名','映象名'    
           clone_snapshot '映象名','新表名'
    查:list
行:put的時候:put '表名','行鍵','列簇名:列名','值'[,時間戳]
	可以單獨刪除行,行內資料全部刪除
列簇:
    增:alter '表名',NAME=>'列簇名'
    刪alter '表名',NAME=>'列簇名',METHOD='delete'
    改:先加,後刪
    查:get '表名','行鍵','列簇名'
列:
cell:值+時間戳

HBase匯入檔案

將文件資料匯入HBase

##通過hbase shell匯入文件資料
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=,  \
-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
customer file:///home/vagrant/hbase_import_data.csv

示例

  • 先把emp_basic.csv檔案放入家目錄下
  • 上傳到hdfs上
[root@hadoop100 ~]# hdfs dfs -put /root/emp_basic.csv /test/
  • 建立表
create 'emp_basic',{NAME=>'emp'},{NAME=>'time'}

在這裡插入圖片描述

  • 通過hbase匯入檔案
[root@hadoop100 ~]# hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator="," \
-Dimporttsv.columns="HBASE_ROW_KEY, \
emp:name,emp:job_title,emp:company,time:sDate,time:eDate" \
"emp_basic" /test/emp_basic.csv

反斜槓\代表換行的意思,如放一行寫入,則不需要加反斜槓

  • 查詢資料
get 'emp_basic','emp_id'

在這裡插入圖片描述

修改表許可權

  • 配置hbase-site.xml
[root@hadoop100 ~]# vi /opt/hbase/conf/hbase-site.xml
  • 輸入
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.superuser</name>
<value>root</value>
</property>
  • 儲存退出
  • 重啟hbase master
[root@hadoop100 ~]# hbase-daemon.sh restart  master
  • 再次進入hbase shell
[root@hadoop100 ~]# hbase shell
  • 賦權
disable 'customer'
grant 'root', 'RWXCA'
R - 代表讀取許可權
W - 代表寫許可權
X - 代表執行許可權
C - 代表建立許可權
A - 代表管理許可權

在這裡插入圖片描述

  • 檢視錶的許可權
user_permission 'customer'

在這裡插入圖片描述

  • 撤銷使用者訪問表的許可權
revoke 'customer'

慎用

相關文章