一,Hbase简介
HBase是一个开源的非关系型分布式数据库,实现的编程语言为Java。它是的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。
Hbase应用
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。
为什么需要HBase?
Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于 HadoopMapReduce编程框架的高延迟数据处理机制,使得Hadoop无法满足大规模数据实时处理应用的需求。
HDFS面向批量访问模式,不是随机访问模式。
传统的通用关系型数据库无法应对在数据规模剧增时导致的系统扩展性和性能问题(分库分表也不能很好解决)。
传统关系数据库在数据结构变化时一般需要停机维护;空列浪费存储空间。
Hbase数据在进行存储时,是按照行健存储。会自己比较行健大小后进行存储
二,安装(前置条件已安装了Hadoop)
1,首先需要安装zookeeper,
1) 将安装包放在Linux下,然后解压
tar -zxf zookeeper-3.4.5-cdh5.14.2.tar.gz
2) 将其移至soft下并改名
mv zookeeper-3.4.5-cdh5.14.2 soft/zk345
3)进入zk345/conf中复制此文件并改名,并修改内容
cp zoo_sample.cfg zoo.cfg
#修改
vim zoo.cfg
dataDir=/opt/soft/zk345/data
#如果是hadoop集群要添加多个,并对应修改端口号(这里是伪分布式Hadoop)
server.1=192.168.88.180:2888:3888
4)添加环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/opt/soft/zk345
export PATH=$PATH:$ZOOKEEPER_HOME/bin
5)激活环境变量
source /etc/profile
6)启动zookeeper(停止可用zkServer.sh stop)
zkServer.sh start
7)jps查看一下如果有QuorumPeerMain进程就说明启动成功了
2,安装hbase
1) 解压
tar -zxf hbase-1.2.0-cdh5.14.2.tar.gz
2)移至soft下并改名
mv hbase-1.2.0-cdh5.14.2 soft/hbase120
3)进入soft/hbase120/conf/下,并修改
vim hbase-env.sh
export JAVA_HOME=/opt/soft/jdk1.8
#使用外部zookeeper
export HBASE_MANAGES_ZK=false
vim hbase-site.xml
>hbase.rootdir
hdfs://192.168.88.180:9000/hbase
hbase.cluster.distributed
true
hbase.zookeeper.property.dataDir
/opt/soft/hbase120/data
4)添加环境变量
vim /etc/profile
export HBASE_HOME=/opt/soft/hbase120
export PATH=$PATH:$HBASE_HOME/bin
5)激活环境变量
source /etc/profile
6)启动hbase(启动hbase之前一定要先启动hadoop和zookeeper)
start-hbase.sh
7)jps查看一下,有下面两个进程则启动成功
8)进入hbase数据库操作界面
hbase shell
9)停止hbase
stop-hbase.sh
三,hbase简单使用
1,创建名空间 类似于创建数据库 (后面名可随便起)
create_namespace 'mydemo'
2,删除名空间
drop_namespace 'mydemo'
3,当然创建之后,如果使用的是xshell可以重开一个界面,用下面命令进行查看
#进入zookeeper
zkCli.sh
查看,进入相应的目录下就可以查看到你所创建的名空间或表名,但是不会看到数据
ls /
4,创建表(base是列簇名)
create 'mydemo:userinfos','base'
5,删除表
drop 'mydemo:userinfos'
6,插入数据(1就是它的rowkey,所以下面两个数据则为在一行里,一次只能put一条数据)
put 'mydemo:userinfos','1','base:username','zhangsan'
put 'mydemo:userinfos','1','base:password','123123'
7,查看全部数据
scan 'mydemo:userinfos'
8,查看更多信息
describe 'mydemo:userinfos'
9,设值version(库的version默认是1,当默认的情况下,是不会保留以前时间戳的数据的)
alter 'mydemo:userinfos',{NAME=>'username',VERSIONS=>3}
10,获得历史版本信息(version设置为几,就会看到几条历史信息)
get 'mydemo:userinfos','1',{COLUMN=>'base:username',VERSIONS=>3}
11,获取表中rowkey为2的所有信息
scan 'mydemo:uerinfos',{FILTER=>"RowFilter(=,'binary:2')"}
12,获取名username含有zhang的人的信息
scan 'mydemo:userinfos',{FILTER=>"SingleColumnValueFilter('base','username',=,'substring:zhang')"}