本机环境
- Ubuntu 16.0.4 TLS
- Vmware Workstation 14.1.1
- hadoop 2.7.3 (集群)
- zookeeper 3.4.10 (集群)
前提已经在VM中部署好Hadoop 和Zookeeper集群。本次使用3台主机分别为cor1、cor2、cor3,在部署Hbase之前首先确保zookeeper和hadoop完好且可用。
下载
apache官方下载,选取的版本是hbase-2.0.1-bin.tar.gz。
关于hbase和hadoop版本的对应关系,这边给一个blog做参考https://blog.csdn.net/vtopqx/article/details/77882491,小伙伴也可以去看官方文档,会更详细一些。
安装
解压到当前目录
$ tar -zxvf hbase-2.0.1-bin.tar.gz -C ./
进去conf目录编辑hbase-env.sh文件
$ vim hbase-env.sh
1 2 3 4 5 6 7 8 9 10 11 12 13
| # the java implementation to use. 1.7+ required
export JAVA_HOME=/opt/jdk//jdk1.8.0_66
# export JAVA_HOME=/usr/java/jdk1.8.0_66 # 设置日志目录和PID目录
export HBASE_LOG_DIR=/data/bigdata/logs/hbase export HBASE_PID_DIR=/data/bigdata/data/hbase
# 使用外部zookeeper
export HBASE_MANAGES_ZK=false
|
编辑hbase-site.xml,关于每个参数的详细描述可以在官方文档的第7章节7. Default Configuration
中查到这边就不做详述,附上链接http://hbase.apache.org/book.html#config.files
$ vi hbase-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <configuration> <property> <name>hbase.tmp.dir</name> <value>/home/hadoop/hbase-2.0.1/data</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://cor1:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>cor1:2181,cor2:2181,cor3:2181</value> </property><property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/zookeeper/data</value> </property> </configuration>
|
配置conf/regionservers
,写在该文件中的将被认为是从节点,在主节点上运行bin/start-hbase.sh
以后,会自动启动从节点。
分发
使用scp命令,将配置好的hbase分发给其他cor2和cor3节点
$ scp -r hbase-2.0.1 hadoop@cor2:/home/hadoop
$ scp -r hbase-2.0.1 hadoop@cor2:/home/hadoop
启动
进入到hbase根目录执行下面命令就可以运行hbase,需要提前确保zookeeper和hadoop集群正常运行
。
$ bin/start-hbase.sh
测试
与Hadoop一样,hbase同样为我们提供了好看的WEB UI界面
我们也可以在本地CLI中使用命令进入hbase shell
$ bin/hbase shell
案例
1.查看有哪些表
2.创建表
1 2 3 4 5
| # 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>} # 例如:创建表t1,有两个family name:f1,f2,且版本数均为2
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
|
3.删除表
1 2
| hbase(main)> disable 't1' hbase(main)> drop 't1'
|
4.查看表的结构
1 2 3 4
| # 语法:describe <table> # 例如:查看表t1的结构
hbase(main)> describe 't1'
|
5.修改表结构
修改表结构必须先disable
1 2 3 4 5 6
| # 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'} # 例如:修改表test1的cf的TTL为180天
hbase(main)> disable 'test1' hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'} hbase(main)> enable 'test1'
|
6.添加数据
1 2 3 4
| # 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp> # 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put 't1','rowkey001','f1:col1','value01'
|
7.查询数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # 语法:get <table>,<rowkey>,[<family:column>,....] # 例如:查询表t1,rowkey001中的f1下的col1的值
hbase(main)> get 't1','rowkey001', 'f1:col1'
# 或者:
hbase(main)> get 't1','rowkey001', {COLUMN=>'f1:col1'}
# 查询表t1,rowke002中的f1下的所有列值
hbase(main)> get 't1','rowkey001'
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num} # 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能 # 例如:扫描表t1的前5条数据
hbase(main)> scan 't1',{LIMIT=>5}
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum} # INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度 # 例如,查询表t1中的行数,每100条显示一次,缓存区为500
hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500}
|
8.删除数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名 # 例如:删除表t1,rowkey001中的f1:col1的数据
hbase(main)> delete 't1','rowkey001','f1:col1' # 注:将删除改行f1:col1列所有版本的数据
# 语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据 # 例如:删除表t1,rowk001的数据
hbase(main)> deleteall 't1','rowkey001'
# 语法: truncate <table> # 其具体过程是:disable table -> drop table -> create table # 例如:删除表t1的所有数据
hbase(main)> truncate 't1'
|
前些日子去日本旅游,blog停更几天。后面需要继续加油了!!