更新于:

hbase安装文档

Hbase 分布式部署

在bigdata1、bigdata2和bigdata3上部署分布式hbase

Hbase依赖hadoop和zookeeper,先要安装并启动hadoop和zookeeper

1
2
start-all.sh
zkServer.sh start
  1. 解压
1
2
tar -zxvf hbase-2.2.3-bin.tar.gz
mv hbase-2.2.3 hbase
  1. 拷贝hadoop的core-site.xml 和hdfs-site.xml到hbase的conf目录下
1
2
cp /opt/hadoop/etc/hadoop/hdfs-site.xml /opt/hbase/conf/
cp /opt/hadoop/etc/hadoop/core-site.xml /opt/hbase/conf/
  1. 配置 hbase-env.sh 文件
1
2
3
export JAVA_HOME=/opt/jdk
export HBASE_CLASSPATH=/opt/hbase/conf
export HBASE_MANAGES_ZK=false
  1. 配置 hbase-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://bigdata1:9000/hbase</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>bigdata1,bigdata2,bigdata3</value>
</property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>
</configuration>
  1. 配置 regionservers
1
2
3
4
5
cat >> regionservers << EOF
bigdata1
bigdata2
bigdata3
EOF
  1. 修改环境变量
1
vi /etc/profile

输入如下内容:

1
2
export HBASE_HOME=/opt/hbase
export PATH=$PATH:$HBASE_HOME/bin
  1. 分发文件和环境变量
1
2
3
4
5
scp -r /opt/hbase bigdata2:/opt
scp -r /opt/hbase bigdata3:/opt
scp /etc/profile bigdata2:/etc/profile
scp /etc/profile bigdata3:/etc/profile
source /etc/profile
  1. 启动Hbase
1
2
start-hbase.sh
jps
  1. 进入Hbase shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.2.3, r6a830d87542b766bd3dc4cfdee28655f62de3974, 2020年 01月 10日 星期五 18:27:51 CST
Took 0.0021 seconds                       
hbase(main):001:0> list
TABLE
0 row(s)
Took 0.3069 seconds
=> []

Hbase分布式部署完成

以下是Hbase shell的基本操作,有时候在其他题目会有数据要写入Hbase的情况。

第8章 HBase操作

启动:

1
2
3
4
zkServer.sh start
start-dfs.sh
start-yarn.sh
start-hbase.sh

关闭:

1
stop-hbase.sh

进入Hbase shell:

1
hbase shell

Hbase查询中文信息,在滤波器中设置参数:

1
FORMATTER=>'toString'

HBase获取帮助:

显示所有支持的命令

1
help

常用的命令是数据操作命令

1
2
3
Group name: dml

  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

查询某一个命令的具体用法

1
help '命令'

例如:help 'get'

8.3  HBase的基本操作

  1. 创建表

使用create命令创建表,具体语法如下:

1
create 'table name','column family'

“create”表示用于创建数据表的命令;“table name”表示数据表,创建表时必须指定;“column family”为列族名,创建表时同样也必须指定。

创建一个名称为phone、列族名为info的HBase表,具体如下:

1
create 'phone','info'

执行“list”命令,查看数据库中的数据表

1
list
  1. 插入操作

使用put命令插入或更新数据表中的数据

1
put 'table name','row1','column family: column name', 'value'

“put”表示用于插入或更新数据表中数据的命令;“table name”表示数据表;“row1”为行键(即Row Key);“column family:column name”为列族名和列名;“value”为插入列的值。

向数据表phone的info列族中插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
put 'phone','p001','info:brand','Apple'

put 'phone','p001','info:name','iPhone 11 Pro'

put 'phone','p002','info:brand','HUAWEI'

put 'phone','p002','info:name','HUAWEI Mate 30 Pro'

put 'phone','p002','info:price','5899'

put 'phone','p003','info:brand','OPPO'

put 'phone','p003','info:name','OPPO 360'

put 'phone','p003','info:price','4899'

put 'phone','p004','info:brand','三星'

put 'phone','p005','info:brand','索尼'
  1. 使用scan命令扫描数据表中的数据

扫描数据表phone中的所有数据

1
scan 'phone', {FORMATTER => 'toString'}
  1. 使用describe命令查看数据表结构

查看数据表phone的表结构

1
describe 'phone'
  1. 使用put命令更新数据表指定字段的数据

在数据表phone中,将行键为p001、列为info:name的值iPhone 11 Pro更新为iPhone X

1
2
3
put 'phone','p001','info:name','iPhone X'

scan 'phone', {FORMATTER => 'toString'}
  1. 获取数据表中指定数据

使用get命令获取数据表phone中行键为p001的数据

1
get 'phone','p001'

获取info:brand列中的数据

1
scan 'phone',{COLUMNS=>'info:brand'}

查询两个rowkey:p002和p003之间的数据

1
scan 'phone',{STARTROW=>'p002',STOPROW=>'p004'}

查询brand列的数据,显示前4条

1
scan 'phone',{COLUMNS=>'info:brand',STARTROW=>'p001',STOPROW=>'p005',FORMATTER=>'toString'}
  1. 使用count命令统计数据表中数据的行数

统计数据表phone中数据的行数

1
count 'phone'
  1. 删除数据

(1)使用delete命令删除数据表中指定字段的数据

删除数据表phone中行键为p002、列为info:price的数据

1
2
3
delete 'phone','p002','info:price'

scan 'phone'

(2)如果想要删除数据表中一行的所有数据,则可以使用deleteall命令

删除数据表phone中行键为p001的所有数据

1
2
3
deleteall 'phone','p001'

scan 'phone'

(3)清空数据表phone中的所有数据

1
truncate 'phone'

(4)使用drop命令删除数据表

1
2
3
disable 'phone'

drop 'phone'