Hbase简介
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理 HBase中的海量数据,利用Zookeeper作为其分布式协同服务。HBASE主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库)。
在创作HBASE时的目标便是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
同时HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为对应。
传统数据库遇到的问题:
1.数据量很大的时候无法存储
2.没有很好的备份机制
3.数据达到一定数量开始缓慢,很大的话基本无法支撑
HBASE优势:
1.线性扩展,随着数据量增多可以通过节点扩展进行支撑
2.数据存储在hdfs上,备份机制健全
3.通过zookeeper协调查找数据,访问速度块。
4.写入性能高,且几乎可以无限扩展。
5.海量数据下(100TB级别表)的查询依然能保持在5ms级别。
6.存储容量大,不需要做分库分表,切勿维护简单。
7.表的列可以灵活配置,1行可以有多个非固定的列。
hbase与关系型数据库的区别
| HBase | RDBMS(关系型数据库) |
硬件架构 | 类似于Hadoop的分布式集群,硬件成本低廉 | 传统的多核系统,硬件成本昂贵 |
容错性 | 由软件架构实现,由于采用多节点,所以不存在一点或几点宕机 | 一般需要额外硬件设备实现HA |
数据库大小 | PB | GB、TB |
数据排布方式 | 稀疏的、分布的多维的Map | 以行和列组织 |
数据类型 | Bytes | 丰富的数据类型 |
事务支持 | ACID只支持单个Row级别 | 全面的ACID支持,对Row和表 |
查询语言 | 只支持Java API(除非与其他框架一起使用,如Phoenix、Hive) | SQL |
索引 | 只支持Row-Key(除非与其他框架一起使用,如Phoenix、Hive) | 支持 |
吞吐量 | 百万查询/每秒 | 数千查询/每秒 |
HBase在Hadoop生态系统所处位置
1.环境准备
本次教学基于centos 7.1系统
本次平台搭建需要三台云主机:
master作为 client 客户端
slave1作为 hive server 服务器端
slave2用于安装 mysql server
同时需要软件包:
hbase-1.2.4-bin.tar.gz
下载地址:https://hbase.apache.org/
jdk-8u171-linux-x64.tar.gz
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2.基础环境搭建
首先我们需要将java包解压并配置生效java环境变量(前面章节有)
然后我们配置hbase环境变量
vi /etc/profile
export HBASE_HOME=/usr/hbase/hbase-1.2.4
export PATH=$PATH:$HBASE_HOME/bin
生效下环境变量
source /etc/profile
然后创建hbase安装目录/usr/hbase,然后将hbase压缩包解压到安装目录
tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr/hbase/
3.hbase配置
修改配置文件
配置vi /usr/hbase/hbase-1.2.4/conf/hbase-env.sh
export HBASE_MANAGES_ZK=false
export JAVA_HOME=/usr/java/jdk1.8.0_171
export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/hadoop/
配置vi /usr/hbase/hbase-1.2.4/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/zookeeper/zookeeper-3.4.10</value>
</property>
</configuration>
配置vi /usr/hbase/hbase-1.2.4/conf/regionservers
slave1
slave2
拷贝文件到hdfs
cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml /usr/hbase/hbase-1.2.4/conf/
cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml /usr/hbase/hbase-1.2.4/conf/
分发hbase
scp -r /usr/hbase/ slave1:/usr/
scp -r /usr/hbase/ slave2:/usr/
4.启动hbase
在保证hadoop和zookeeper启动的情况下我们输入
/usr/hbase/hbase-1.2.4/bin/start-hbase.sh
我们的hbase就启动了
使用jps查看进程
Master节点出现HMaster
Slaver1节点出现HRegionServer
5.命令解析
create //创建表
create ‘表名’,‘列族名’ //创建user表,列族名为info
例如:create 'user', 'info'
PUT/UPDATE //插入数据
put ‘表名’,‘列族名’,‘插入内容’ //创建表,并向列族添加数据
例如:put 'user', 'info:name', 'zhangsan'
get //查询。依据ROWKEY进行查询,速度最快
get ‘表名’,‘ROWKEY’ //在表内依据ROWKEY查询数据
例如:get 'user', '100001'
scan //全表扫描,也就测试用用,实际慎用
scan ‘表名’ //查询该表
例如:scan 'user'
scan range //范围查询
scan ‘表名’,{STARTROW => ‘范围’} //查询该表
例如:scan 'user' , {STARTROW => ‘100001’}
6.hbase实例讲解
我们将要创建一个以bigdata为表名,info为列族的数据表,创建完成查看后删除
1.我们使用hbase创建表‘bigdata’列族为‘info’创建完成后查看表是否创建成功。
[root@master ~]# hbase shell
hbase(main):001:0> create 'bigdata','info';
hbase(main):002:0> list
TABLE
bigdata
1 row(s) in 0.0060 seconds
=> ["bigdata"]
2. 删除表bigdata’,并list查询。
hbase(main):002:0> list
TABLE
bigdata
1 row(s) in 0.0890 seconds
=> ["bigdata"]
hbase(main):003:0> disable 'bigdata'
0 row(s) in 4.4600 seconds
hbase(main):004:0> drop 'bigdata'
0 row(s) in 2.3400 seconds
hbase(main):005:0> list 'bigdata'
TABLE
0 row(s) in 0.0070 seconds
=> []