安装部署HBase
安装HBase
将HBase压缩包上传至其中一个节点
解压tar -zxvf hbase-1.1.3-bin.tar.gz
将解压后的目录移动到/usr/目录下mv hbase-1.1.3 /usr/
设置HBase的环境变量
vi /etc/profile
将HBASE_HOME/bin拼接到PATH后面
export HBASE_HOME=/usr/hbase-1.1.3
export PATH=$PATH:$HBASE_HOME/bin
配置部署HBase
配置hbase-env.sh文件
设置hbase的JAVA_HOME
进入hbase的配置文件目录:cd /usr/hbase-1.1.3/conf/
vi hbase-env.sh
编辑之前输入JAVA_HOME再回车进行搜索,按字母n进行搜索下一个
这里只有一处JAVA_HOME,去掉注释,修改为实际的JAVA_HOME路径
export JAVA_HOME= /usr/java/jdk1.8.0_161
设置不使用内置zookeeper
同样在非编辑状态下输入/HBASE_MANA进行搜索,将export HBASE_MANAGES_ZK=true中去掉注释,并将true改为false:
export HBASE_MANAGES_ZK=false
编辑hbase-site.xml文件
vi hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value> #hadoop配置文件core-site.xml中配置
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>#zookeeper节点配置
<value>node1,node2,node3</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>2700000</value> #先设置小一点,如果报错再调大点
</property>
可以看下core-site.xml中内容
cat /usr/hadoop/etc/hadoop/core-site.xml
hbase-site.xml配置如下图
将hadoop中hdfs-site.xml拷贝到HBASE_HOME/conf下
scp /usr/hadoop/etc/hadoop/hdfs-site.xml /usr/hbase-1.1.3/conf/
配置regionservers
vi regionservers
输入内容为(原本的localhost删掉)
node2
node3
拷贝hbase解压后的整个目录拷贝到node2、node3两个节点
scp -r /usr/hbase-1.1.3 root@node2:/usr/
scp -r /usr/hbase-1.1.3 root@node3:/usr/
分别在nod2、node3中配置hbase的环境变量
vi /etc/profile
export HBASE_HOME=/usr/hbase-1.1.3
将HBASE_HOME/bin拼接到PATH后面
export HBASE_HOME=/usr/hbase-1.1.3
export PATH=$PATH:$HBASE_HOME/bin
分别在三个结点上运行source /etc/profile,使环境变量生效
使用HBase
在node1上启动hbase:start-hbase.sh
前提:hadoop集群已启动,如果没启动,请依次启动。
zkServer.sh start (需要在安装了zk的每台节点上启动)
start-dfs.sh
start-yarn.sh
再启动hbase: start-hbase.sh
通过jps查看进程
Node1
Node2
Node3
通过浏览器访问
http://node1:16010 看到以下页面,说明安装部署成功
分别可以看到HMaster节点node1和HRegion Server节点node2,node3
Hbase支持 shell操作
输入hbase shell 可进入shell模式
输入list
exit退出
为保证集群的可靠性,要启动多个Hmaster,比如在node2上独立启动Hmaster
hbase-daemon.sh start master
表的管理
输入hbase shell进入shell模式
** 查看有那些表**
** 创建表**
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:创建表t1,有两个family name:f1,f2,且版本数均为2
create 't1' ,{NAME=>'f1',VERSIONS =>2},{NAME=>'f2',VERSIONS=>2}
创建表user,列族为info
create 'user','info'
删除表
删除表
分两步:首先disable,然后drop
例如:删除表t1
hbase(main)> disable 't1'
hbase(main)> drop 't1'
查看表的结构
# 语法:describe <table>
# 例如:查看表t1的结构
hbase(main)> describe 't1'
注意:由于上一步删除了表,我先创建一个t1
修改表结构
修改表结构必须先disable
# 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表test1的cf的TTL为180天
hbase(main)> disable 't1'
hbase(main)> alter 't1' ,{NAME=>'body',TTL=>'15552000'},{NAME=>'meta',TTL=>'15552000'}
hbase(main)> enable 't1'
表数据的增删改查
添加数据
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表user的添加一行记录:rowkey是001,family 是name,valuse是lishi。
hbase(main)> put 'user','001','info:name','lishi'
** 查询数据**
查询表中的所有数据
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能
# 例如:扫描表t1的前2条数据
hbase(main)> scan 'user',{LIMIT=>2}
查询某条数据
查询表t1, 001中的info下的所有列值
hbase(main)> get ‘user’,‘001’
删除数据
删除行中的某个列值
# 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名
# 例如:删除表user, 001中的info:name的数据
hbase(main)> delete 'user','001','info:name'
** 删除表中的所有数据**
# 语法: truncate <table>
# 其具体过程是:disable table -> drop table -> create table
# 例如:删除表user的所有数据
hbase(main)> truncate 'user'
检查表是否存在
exists 'user'