入门的学习目标解决四个方面的问题
1、HBase的应用场景及特点
特性1:他可以做海量的数据存储,列可以达到上百万列,上百亿行的数据的存储。
特性2:支持准实时查询,满足上百亿行数据检索在100毫秒内返回检索结果。只有HBase表里的数据足够大的时候,才能充分发挥它强大的数据存储和检索的威力。
如果你的数据只有几百万行,那就不要放在HBase中了,普通的关系型数据库,就可以解决存储问题。
那些场景中使用hbase呢?
交通:
1、比如水上交通,长江江面上所有船只的jps的定位数据,以及船只的排水量、船只的路线、以及长江江面交通运行状况。
2、比如公路交通,比如路口的摄像头拍照,这个信息量也是非常大的,这些数据同样也是放在HBase中的。
金融:
1、比如消费信息、转账信息、贷款信息、还款信息、取款信息等等,只要跟金融有关的动作产生的信息都可以存储在HBase中。
电商:
1、比如各大电商平台的用户浏览行为数据、加购数据、支付数据、收藏、评论数据、物流数据等等。
移动设备:
1、电话信息、通话记录、短信记录等等。
HBase的特点:咱们来说一下。
容量大:
HBase单表可以有百亿行、百万列。数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性。对于我们普通的关系型数据,每张表不能超过500万,列个数不能超过30列。如果单表超过500万行,我么就要考虑分表分库了,如果列个数超过30列,那么就要检查我们的表设计是不是出现了不合理的情况。
面向列:
HBase是面向列的存储和权限控制,并支持独立检索,列式存储,其数据在表中是按照某列存储的,这样在查询几个字段时,可以大大减少读取的数据量。它的列是不需要向关系型数据库那样预先添加定义好才能往里增加数据。而HBase是不需要的,他是在随着业务数据变化,可以动态增加列的。
多版本:
HBase每一列的数据存储有多个Version,比如我们个人的家庭地址这里一列,在我们生活的10年之内,有可能会变更3-4次,那我们每次变更的地址都不一样,就需要进行多版本存储。
稀疏性:
为空的列并不占用存储空间,表可以设计的非常稀疏,它是根据数据的变化而动态变更列的。如下表普通关系型数据库,需要预先定义列,在插入数据时,如果某列无值,那么需要设置null,他也是占用表空间的。而HBase数据库则是根据业务数据的变化而变化,不需要预先定义列,有几列值就填写几列,没值的列不需要设置默认值,也不占用表空间。
扩展性:
底层依赖于HDFS,当我们使用关系型数据库时,如果数据量过大,那么就需要升级我们的数据配置,并且要迁移数据,分表分库,重启服务。而当我们的HBase磁盘空间不够时,只需要我们增加机器即可,服务是不用停止的,只需要把新加的机器,与原来集群的NameNode和DataNode建立关联,启动该机器即可,这就是他的高扩展性。
高可靠性:
WAL机制保证了数据写入时,不会因为集群异常而导致写入数据丢失,Replication机制保证了集群异常的情况下数据不会被丢失或损坏。HBase底层本身就是基于HDFS的副本机制存储的。
高性能:
底层的LSM数据结构(树形结构)和RowKey有序排列等架构上的独立设计,使得HBase有着非常高的写入性能。Region切分、主键索引、缓存机制使得HBase在海量数据下具备一定的随机读取性能,该性能针对rowkey的查询能够达到毫秒级别。
2、HBase的概念及定位
说道概念,肯定还得去HBase的官网去看下,地址跟Hadoop是一样的,也是顶级项目地址:https://hbase.apache.org/
中文指南,很友好的开源框架如何选择合适的版本应用在企业级项目中呢?
官方版:
地址:http://archive.apache.org/dist/hbase/
CDH版:
CDH版本的安装包替我们做了各个版本的兼容性,提前为我们做了版本的适配。
https://archive.cloudera.com/cdh5/cdh/5/
cdh的安装包有两个版本,需要注意的是,第一个版本是hbase的版本,第二个是cdh的版本。这个cdh的版本就是用来统一大数据其他框架的版本,也就是说如果你hbase用的是cdh5.7.0的那么相应的hdfs、spark、flume等等都应该选择cdh5.7.0的才能做到很好的版本兼容。 HBase在我们的大数据生态系统中是一个可靠度存储系统,他是基于HDFS之上的NOSQL数据库,他的数据最终也是存储在hdfs的分布式文件系统中的。3、HBase的架构体系及设计模式
HBase中包含两个主要的进程服务一个是Master,一个是RegionServer,另外依赖ZooKeeper和HDFS也就是说,在我们安装部署HBase时,必须先安装启动ZooKeeper、HDFS才能进行HBase的安装部署。
RegionServer:
1、管理HBase中表里的数据,当我们表里面的数据很大的时候,RegionServer可以对表进行分区,一个区对应一个Region。那么RegionServer就是用来管理多个Region的服务。
2、RegionServer除了管理表里的数据外,还会实时报告Region的状态信息给Master,状态信息一般包括,节点是否存活,运行情况如何等等。另外RegionServer还会汇报自己的工作内容给Master。当其中某个RegionServer宕机,那么Master就会把该异常的RegionServer所管理的数据以及处理的工作内容转移到其他RegionServer中来继续处理。
3、RegionServer也会把所管理的Region信息初始化到ZooKeeper中,Zookeeper里面所获得的信息跟Master获得的信息是一样的。
Master:
Master可以通过ZooKeeper来实时获取我们HBase中整个集群的信息。
列簇划分hbase表结构 其实列簇就是某个研究对象的各方面信息的分类:人的信息可以分为简单的几个列簇,个人信息、教育经历、工作经历列簇的设计原则
region可以人工干预 hbase和关系型数据库对比,hbase悲催的就是不支持复杂查询。只能通过rowkey做关联查询4、HBase的安装部署
安装之前首先要看下,HBase依赖的HDFS和ZooKeeper的版本和所依赖的JDK版本,我们先看下jdk选用官方有推荐如下图:
JDK版本选用1.7以上版本。
Hadoop版本cdh5.7.0选用2.6.0以上版本,hadoop-2.6.0-cdh5.7.0
ZooKeeper版本选用3.4.5以上版本。
安装jdk、zookeeper我就不啰嗦了,安装hadoop可以参看我的《hadoop的安装部署》
安装HBase
下载地址:https://archive.cloudera.com/cdh5/cdh/5/
解压:我们把下载来的hbase-1.2.0-cdh5.7.0.tar.gz放在了/usr/local目录下
我们切换到该目录下执行解压命令:tar -zxvf hbase-1.2.0-cdh5.7.0.tar.gz
进入hbase的安装目录,看下他的目录结构,看下他都有什么目录
其中docs目录是可以删除掉的,从安装包里lib、src、pom.xml文件可以看出些端倪,这是hbase的源码工程,我们可以导入到ide中进行查看学习他的源码的。接下来我们要根据官网的步骤,配置hbase的环境变量,配置环境变量在conf/hbase-env.sh文件中
除了JAVA_HOME以外还需要配置另外一个参数见下图 这个HBASE_MANAGES_ZK配置是boolean值,他是控制HBase使用哪个ZK,如果是true,则使用它自己自带的ZK,如果false,则使用外围我们自己部署的ZK。我们要使用自己部署的ZK,所以这里要更改配置为export HBASE_MANAGES_ZK=false接下来就是配置hbase-site.xml文件
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase-1.2.0-cdh5.7.0/temp/hbase</value>
<description>hbase临时文件数据目录</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://10.101.3.3:9000/hbaseData/temp</value>
<description>hbase的数据文件存储目录</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>hbase分布式部署开关</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>10.101.3.3</value>
<description>hbase依赖的zk节点域名,如果多个域名用英文逗号分隔</description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase-1.2.0-cdh5.7.0/temp/zkData</value>
<description>zk的临时文件存储目录</description>
</property>
</configuration>
接下来配置regionservers文件
把我们的hbase所在服务器端域名填写进去即可这样我们就把hbase配置完毕了。
接下来我们要启动HBase了,启动脚本全部在我们的${HBASE_HOME}/bin目录下。
里面有很多常用的脚本,我们一个一个来讲:
hbase:可以连接我们的hbase数据库,并且对他的数据进行操作
start-hbase.sh:启动hbase服务
stop-hbase.sh:关停hbase服务
启动HBase:
bin/start-hbase.sh 可以直接启动hbase的HRegionServer服务和HMaster服务,如下图:
启动完毕后,hbase有自己的webUI的监控页面默认端口是60010地址为http://你的主机域名:60010
打开后如下图:
启动的时候hbase会建立两张系统表,分别控制用户表及表对应的空间信息。create:创建表的命令 is_enabled:查看是否可用
enable:启用表的 disable:禁用表
describe:查看表说明信息 drop:删除表
is_disabled:查看是禁用 list:查看表列表
5、HBase shell的使用
我们要对上面的命令进行操作,首先我们要打开HBase的命令窗口
${HBASE_HOME}/bin/hbase shell
如下图:
这时候去创建表,如果你不知道怎么创建,那么就可以输入create后直接回车,就有语法提醒如图:
接下来我们往mtest表中插入条数据,使用put命令,如果不知道语法是什么,同理也是put直接回车
我们的0001代表rowkey,info:username代表列簇和列名,liushun代表值,timestamp是存放这条数据时的时间戳,hbase自动生成的我们在对rowkey0001的用户添加他的年龄属性
查看mtest表的详细信息我们如果要删除mtest表,怎么操作呢?
首先我们要先禁用该表,然后在删除。
count是对行数求和 get是根据条件取出表中的数据,此案例就是取出001行的age列的数据,相当于关系型数据库的select命令 delete是根据条件删除某些数据 truncate命令是清空表数据,并释放空间6、总结
HBase是一个分布式存储的数据库
主要作用:海量数据的存储和海量数据的准实时查询
网友评论