Apache HBase 集群安裝文檔



簡介:

Apache HBase 是一個分布式的、面向列的開源 NoSQL 數據庫。具有高性能、高可靠性、可伸縮、面向列、分布式存儲的特性。

HBase 的數據文件最終落地在 HDFS 之上,所以在 Hadoop 集群中,DataNode 節點都需安裝 HBase Worker Node。

另外,HBase 受 ZooKeeper 管理,還需安裝 ZooKeeper 單機或集群。建議 HBase Master 節點不要與集群中其余 Master 節點安裝在同一台物理服務器。

HBase Master 處理 HBase 集群環境下的很多核心功能,協調管理 RegionServer、故障轉移、重新分配等

  HBase Master  處理 HBase 集群環境下的很多核心功能,協調管理 RegionServer、故障轉移、重新分配等

LoadBalancer 進程分發 Region 到多個 RegionServer
Catalog Janitor 進程檢查不可用的 Region、進行垃圾回收
Log Cleaner 進程用於刪除陳舊的 WAL 文件

RegionServer 處理數據移動 (get、scan、存儲put提交的數據、標記delete數據)、緊縮操作 (小緊縮、主緊縮)、維護 Block Cache、管理 MemStore 和 WAL、接收來自 Master 的新 Region

CompactSplitThread 查找需要拆分的 Region (大於 filesize 的 Region)、處理小緊縮
MajoyCompactionChecker 檢查是否需要主緊縮
MemStoreFlusher 檢查 MemStore 是否滿足被刷出到磁盤
LogRoller 用於關閉 WAL 並創建一個新文件


官方地址:http://hbase.apache.org
官方文檔:http://hbase.apache.org/book.html
下載地址:http://mirror.bit.edu.cn/apache/hbase/stable/hbase-1.2.6-bin.tar.gz

HBase Shell -> HMaster(HBase Master) -> HRegionServer(HBase RegionServer) -> Region -> HFile(HDFS File)

一、安裝 HBase

shell > wget http://mirror.bit.edu.cn/apache/hbase/stable/hbase-1.2.6-bin.tar.gz
shell > tar zxf hbase-1.2.6-bin.tar.gz -C /usr/local/

shell
> chown -R hadoop.hadoop /usr/local/hbase-1.2.6

二、配置 HBase

1、編輯 hbase-env.sh

# cd /usr/local/hbase-1.2.6
hadoop shell
> vim conf/hbase-env.sh
# 指定 java 目錄
export JAVA_HOME
=/usr/java/default
# 管理自身 ZooKeeper
export HBASE_MANAGES_ZK
=false

2、編輯 hbase-site.xml

hadoop shell > vim conf/hbase-site.xml

<configuration>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.rootdir</name>
<value>hdfs://master.hadoop:8020/hbase</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>datanode01.hadoop,datanode02.hadoop,datanode03.hadoop</value>
</property>

</configuration>

# hbase.cluster.distributed 是否啟用集群模式
# hbase.rootdir HBase 數據根目錄
# hbase.zookeeper.quorum ZooKeeper 節點

3、編輯 regionservers

hadoop shell > vim conf/regionservers

datanode01.hadoop
datanode02.hadoop
datanode03.hadoop

# 指定 regionserver 節點

三、同步目錄、設置環境變量

shell > ansible datanode -m synchronize -a 'src=/usr/local/hbase-1.2.6 dest=/usr/local/'

shell
> echo 'export PATH=$PATH:/usr/local/hbase-1.2.6/bin' >> /etc/profile && source /etc/profile

shell
> ansible datanode -m shell -a 'echo "export PATH=$PATH:/usr/local/hbase-1.2.6/bin" >> /etc/profile && source /etc/profile'

四、啟動服務

1、ZooKeeper

shell > ansible datanode -m shell -a '/usr/local/zookeeper-3.4.10/bin/zkServer.sh start'

2、Hadoop

hadoop shell > sh sbin/start-all.sh

3、HBase

hadoop shell > sh bin/start-hbase.sh

# 啟動服務后,master.hadoop 主機會啟動一個 HMaster 的進程,DataNode 主機會啟動一個 HRegionServer 的進程,可用 jps 查看
# HDFS 文件系統上會創建相應的目錄,可用 hdfs dfs
-ls / 查看,位置即 hbase.rootdir 參數指定
# ZooKeeper 上也會創建相應的 Znode,可用 zkCli.
sh -server IP:PORT,IP:PORT,IP:PORT 連接 ZooKeeper Server 通過 ls / 查看
# 並且可以通過 WEB UI 來查看 HMaster、HRegionServer 運行狀態、表、Region 數量等
# HMaster:http:
//HMaster:16010 HRegionServer: http://HRegionServer:16030 注意,0.98.x 版本之前端口為 60010、60030

五、HBase shell

1、獲取幫助

hadoop shell > hbase shell

hbase(main):
001:0> help
HBase Shell, version
1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
Type
'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type
'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

COMMAND GROUPS:
Group name: general
Commands: status, table_help, version,
whoami

Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
...

# 截取了部分輸出
# 輸入 help 指令即可打印出幫助信息,有各類的指令 general、ddl、namespace、dml 等

# XShell 連接服務器,HBase Shell 不能回退的問題,
1、Ctrl+Backspace 組合鍵解決 2、XShell 會話 -> 屬性 -> 終端 -> 鍵盤 -> BACKSPACE 鍵序列改為 ASCII 127(Ctrl+?)(I) 即可

hbase(main):
002:0> help 'general'
Command: status
Show cluster status. Can be
'summary', 'simple', 'detailed', or 'replication'. The
default is
'summary'. Examples:

hbase
> status
hbase
> status 'simple'
hbase
> status 'summary'
hbase
> status 'detailed'
hbase
> status 'replication'
hbase
> status 'replication', 'source'
hbase
> status 'replication', 'sink'

Command: table_help
Help
for table-reference commands.

# 進一步指定 help
'command',可以獲取指定命令的幫助信息,如 help 'alter',注意:help 后面的指令要用 '' 包裹

2、namespace 命名空間

hbase(main):003:0> help 'namespace'  # 獲取 namespace 幫助信息( 輸出就不截出了,以防文章太長 )

hbase(main):
004:0> list_namespace # 打印默認的 namespace
NAMESPACE
default
hbase
2 row(s) in 0.0220 seconds

# namespace 類似傳統關系型數據庫中 Database 的概念,用於表的划分,可以為 namespace 單獨修改、回收、授權等操作
# hbase 為系統表的命名空間,用戶創建表如果不指定命名空間,將默認創建到 default namespace 中

hbase(main):
005:0> describe_namespace 'hbase' # 查看命令空間結構
DESCRIPTION
{NAME
=> 'hbase'}
1 row(s) in 0.0180 seconds

# create_namespace
'namespace'、alter_namespace 'namespace'、drop_namespace 'namespace' 創建、修改、刪除命令空間

3、table

hbase(main):006:0> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
0 row(s) in 4.7550 seconds

=> Hbase::Table - t1

# default 命名空間下創建一張名為 t1,列族為 f1、f2、f3 的表,簡化寫法:create 't2', 'f1', 'f2', 'f3'
# HBase 創建表時至少要指定表名跟列族名,單張表至少有一個列族,建議最多不要超過 3 個,列族可以包含無數個列,且創建表時無需事先定義,列族可以單獨設置屬性,列族名盡量要短

hbase(main):007:0> desc 't1'
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME
=> 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FO
REVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FO
REVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'f3', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FO
REVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
3 row(s) in 0.1230 seconds

# 查看 t1 表結構
# BLOOMFILTER 基於行布隆過濾,加快檢索速度
# VERSIONS 列族數據保存的版本數
# IN_MEMORY 是否常駐內存
# KEEP_DELETED_CELLS 是否保留刪除數據
# TTL 數據超時時間,FOREVER 為永久保存
# MIN_VERSIONS 保留最小版本數
# BLOCKCACHE 啟用 BLOCKCACHE
# BLOCKSIZE HBase 列族的 BLOCKSIZE,默認 65536 字節,即 64k 細粒度的塊尺寸,能夠帶來更好的隨機讀寫性能
# REPLICATION_SCOPE 是否開啟復制

hbase(main):008:0> put 't1', 'r001', 'f1', 'hbase data'
0 row(s) in 0.0060 seconds

# put 指令用於添加、更新數據,put '表名', '行鍵', '列族', '值', '時間戳 可選'
# RowKey 行鍵一行一個,設計不適當會引起熱點問題,行鍵不可以修改

hbase(main):009:0> get 't1', 'r001', 'f1'
COLUMN CELL
f1: timestamp
=1497333134783, value=hbase data
1 row(s) in 0.0110 seconds

# get 指定用於獲取數據,get '表名', '行鍵', '列族'

hbase(main):010:0> alter 't1', NAME => 'f1', VERSIONS => 3
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.7170 seconds

# 修改列族 f1 的版本數為 3,保留三個版本

hbase(main):011:0> scan 't1'
ROW COLUMN
+CELL
r001 column
=f1:, timestamp=1497333134783, value=hbase data
1 row(s) in 0.0120 seconds

# scan 掃描表 t1,目前僅列族 f1 中有一行數據,值為 hbase data

hbase(main):012:0> put 't1', 'r001', 'f1:name', 'wang'
0 row(s) in 0.0070 seconds

hbase(main):
013:0> put 't1', 'r001', 'f1:name', 'xiao'
0 row(s) in 0.0080 seconds

hbase(main):
014:0> put 't1', 'r001', 'f1:name', 'qiang'
0 row(s) in 0.0120 seconds

hbase(main):
015:0> scan 't1', VERSIONS => 3
ROW COLUMN
+CELL
r001 column
=f1:, timestamp=1497333134783, value=hbase data
r001 column
=f1:name, timestamp=1497335852617, value=qiang
r001 column
=f1:name, timestamp=1497335848825, value=xiao
r001 column
=f1:name, timestamp=1497335845596, value=wang
1 row(s) in 0.0180 seconds

# 向表 't1' 中添加一列 name,更新了三個值
# 由於列族 f1 的 VERSIONS 為 3,所以可以保留三個版本的值,多版本是按時間倒敘排列,不指定版本時,默認返回最新的版本
# 可以向列族 f2 中添加列,多次更新某個字段,看保留的版本數

hbase(main):016:0> alter 't1', NAME => 'f1', TTL => 10
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.2350 seconds

# 將表 't1' 中的列族 'f1' TTL 設為 10 秒,查看數據有什么變化

hbase(main):017:0> put 't1', 'r001', 'f1:name', 'wangxiaoqiang'

hbase(main):
018:0> get 't1', 'r001'
COLUMN CELL
f1:name timestamp
=1497339843881, value=wangxiaoqiang
f2:img timestamp
=1497338098754, value=http://img.com/qiang.png
2 row(s) in 0.0090 seconds

hbase(main):
019:0> get 't1', 'r001'
COLUMN CELL
f2:img timestamp
=1497338098754, value=http://img.com/qiang.png
1 row(s) in 0.0070 seconds

# 10秒過后,數據消失,因為該列族的 TTL 為 10秒,且 MIN_VERSIONS 為默認的 0,TTL 過后默認最小保留 0 個版本

hbase(main):020:0> alter 't1', NAME => 'f1', TTL => 2147483647
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.0490 seconds

# 當列族 TTL 的值設為 2147483647 時,表示數據不過期,等於默認的 FOREVER

hbase(main):021:0> get 't1', 'r001'
COLUMN CELL
f1:age timestamp
=1497349829445, value=man
f1:name timestamp
=1497349810888, value=wangxiaoqiang
f2:img timestamp
=1497338098754, value=http://img.com/qiang.png
3 row(s) in 0.0060 seconds

hbase(main):
022:0> delete 't1', 'r001', 'f1:age'
0 row(s) in 0.0100 seconds

# 刪除一列數據

hbase(main):023:0> alter 't1', 'delete' => 'f1'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 4.3090 seconds

# 刪除列族

hbase(main):124:0> deleteall 't1', 'r002'
0 row(s) in 0.0050 seconds

# 刪除一行數據

hbase(main):126:0> disable 't1'
0 row(s) in 4.4470 seconds

hbase(main):
127:0> drop 't1'
0 row(s) in 2.5450 seconds

# 禁用表,刪除表
# 啟用表:enable 't1'

hbase(main):001:0> list
TABLE
0 row(s) in 0.2200 seconds

=> []

# 查看當前 namespace 中的表

六、停止 HBase

hadoop shell > cd /usr/local/hbase-1.2.6
hadoop shell
> sh bin/stop-hbase.sh

# END


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com