大資料——HBase基礎
HBase基礎
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應用場景示例
- 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命令集
命令類別 | 命令 |
---|---|
General | version, status, whoami, help |
DDL | alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list |
DML | count, delete, deleteall, get, get_counter, incr, put, scan, truncate |
Tools | ssign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump |
Replication | add_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'
慎用
相關文章
- 大資料基礎學習-8.Hbase-1.2.0大資料
- Hbase基礎篇
- 大資料:大資料之基礎語法大資料
- 大資料技術 - Hbase大資料
- HBase載入大資料大資料
- 【大資料】Spark RDD基礎大資料Spark
- 2. 大資料基礎大資料
- HBase基礎知識
- sql大資料 基礎(檢視)SQL大資料
- 基礎資料結構大賞資料結構
- 大資料基本公式——一:基礎大資料公式
- 大資料解決方案-(基礎篇)大資料
- 大資料基礎架構總結大資料架構
- 大資料基礎(一)——關係+文章大資料
- 大資料基礎----Python入門大資料Python
- HBase基礎知識分享(二)
- HBase架構與基礎命令架構
- 零基礎學大資料程式設計需要哪些基礎?大資料程式設計
- 大資料之JAVA基礎(一):資料和變數大資料Java變數
- 大資料工程師:大資料的java基礎 第十週大資料工程師Java
- 大資料學習之Linux基礎大資料Linux
- 大資料學習之路——java基礎(二)大資料Java
- 零基礎大資料學習框架大資料框架
- 大資料需要掌握的數學基礎大資料
- 大資料基礎-kakfa的安裝教程大資料
- 大資料之MySQL基礎(含Linux)大資料MySqlLinux
- 大資料學習方法,學大資料需要的基礎和路線大資料
- 大資料基礎知識全集,大資料愛好者收藏必備大資料
- Hadoop大資料平臺之HBase部署Hadoop大資料
- 大資料技術Hbase和Hive詳解大資料Hive
- 用好工業大資料的基礎是資料質量大資料
- 入行IT界,0基礎如何學習大資料?大資料
- 學習Java大資料都需要哪些基礎Java大資料
- 大資料基礎學習-5.Flume1.6.0大資料
- 大資料基礎學習-7.Hive-1.1.0大資料Hive
- 大資料基礎學習-9.Spark2.1.1大資料Spark
- 大資料基礎學習-4.Zookeeper-3.4.5大資料
- 大資料學習:零基礎大資料入門該看哪些書?大資料