老刘今天复习HBase知识发现不少资料都没有把概念说清楚,有不少专业名词一笔带过没有解释。好比这个框架高性能、高可用,那什么是高性能高可用?怎么实现的高性能高可用?没说!node
若是面试官听了你说的,会有什么反应?个人感受就是你说的东西都是别人的,没有本身的理解。因此老刘才会写用大白话讲大数据这个系列,就是争取把东西讲清楚,讲明白!若是以为老刘写得不错,给老刘点个赞吧!面试
01 HBase知识点shell
第1点:HBase的定义数据库
官网画红框中直接就说,HBase是一个分布式、可扩展的大数据存储Hadoop数据库。试想下,你是面试官,别人这样回答你,你会不会满意?老刘以为学的东西要用本身的话讲出来,才是真正的掌握。编程
在老刘看来,HBase,即Hadoop database,即Hadoop数据库。它的数据一般存储在HDFS上,HDFS为HBase提供了高可靠性的底层存储的支持;利用Hadoop MapReduce来处理HBase中的海量数据,为HBase提供了高性能的计算能力;利用ZooKeeper为HBase提供了稳定的服务。数组
根据上述所说,就能够总结为HBase是一个创建在HDFS之上,具备高可靠、高性能、可扩展、支持海量数据存储的分布式数据库。服务器
通常是在存储数据比较大的时候,而且对读写性能要求比较高的时候,才会用到HBase数据库。架构
那大家知道什么是读写性能比较高吗?那就是读的比较快、写的也比较快的时候,才是读写性能比较高!并发
第2点:HBase的特色负载均衡
1)极易扩展
HBase底层依赖HDFS,当磁盘空间不足的时候,咱们只须要动态增长DataNode节点就能够了。固然也能够经过增长服务器来对集群的存储进行扩容。
2)海量存储
能够存储大批量的数据。在存储海量数据的前提下,能在几十到百毫秒内返回数据。这点和HBase的极易扩展性很是相关。正由于HBase良好的扩展性,才为海量数据的存储提供了便利。
3)列式存储(这里必定要搞清楚列式存储和行式存储的区别)
这里的列式存储其实说的是列族存储,HBase是根据列族来存储数据的。列族下面能够有很是多的列,列族在建立表的时候就必需要指定了。
4)稀疏
稀疏主要是针对HBase列的灵活性,在列族中,你能够指定任意多的列,在列数据为空的状况下,是不会占用存储空间的。
5)数据类型单一
它全部的数据都是以字节数组进行存储。
第3点:HBase表的数据模型
先给出一张HBase的设计表,根据这张表进行介绍表的结构。
rowkey行键
1)它是表(table)的主键,table中的记录按照rowkey的字典序进行排序,这里就必需要说说什么是字典序?
有多机构的资料就是一笔带过,一点也不负责,让人很是不爽。老刘就不得不去搜搜字典序排序的相关知识。
通俗地讲,字典序排序大概就是两个做比较的内容从第一个字母开始比较,按照ASCII码表比较大小,小的放在前面,第一个相同就比较下一个,都相同且一个比较完了,则短的排在前面。
常见ASCII码的大小规则:0~9<A~Z<a~z
2)rowkey行键它能够是任意的字符串,其中它的最大长度是 64KB,实际应用中长度通常为 10-100bytes。
Column Family列族
1)HBase表中的每一个列,都归属于某个列族。
2)列族是表的schema的一部分(而列不是),即建表时至少指定一个列族。
3)好比咱们建立user表,包含info、data两个列族,代码就为create 'user', 'info', 'data'。Column列列确定是表的某一个列族下的一个列,用列族名:列名表示,好比`info`列族下的`name`列,就表示为`info:name`。
Cell单元格
如上图,咱们经过指定rowkey行键、列族、列,就能够肯定的一个Cell单元格。在Cell中的数据是没有任何类型的,所有都是以字节数组的形式进行存储的。
Timestamp时间戳
这个说的就是能够对表中的Cell屡次赋值,每次赋值操做时的时间戳timestamp,可当作Cell值的版本号version number。也就是一个Cell能够有多个版本的值的意思。
第4点:HBase架构
从图中能够看出,这是一个很是典型的主从架构。
下面详细说下各个组件:
Client客户端
Client它是操做HBase集群的入口,利用Client,在经过RPC与HMaster进行通讯,能够完成表的增、删、改操做。也能够经过RPC与RegionServer通讯,完成读写表数据的操做。
通常咱们能够利用HBase shell或者Java API进行编程,完成上述表的操做。
ZooKeeper集群
ZooKeeper是什么有什么用,老刘已经在ZooKeeper框架那篇文章中详细讲解了,你们能够去看看。那它在HBase集群中的做用,就很是明显了,① 它实现了HMaster的高可用,多HMaster间进行主备选举。② 保存了HBase的元数据信息meta表。③ 对HMaster和HRegionServer各个节点进行监控。
HMaster
HBase集群也是主从架构,HMaster是主角色,是集群的老大,主要负责管理表和Region。
那它管理表和Region作一些什么呢?
1)管理Client对表的增删改的一些操做;
2)管理Region的操做就会比管理Client多一点。当Region分裂后,负责新Region分配到指定的HRegionServer上;当HRegionServer宕机后,负责其上的region的迁移;以及管理HRegionServer之间的负载均衡。
那你们有没有了解负载均衡,什么是负载均衡?
举个例子,一个网站最开始创建的时候,它的访问量比较小,但当它的流量变得特别大的时候,并发量就变得特别大了,网站就会出现访问延迟的一些现象。这个时候呢,就须要用到负载均衡了。之前这个网站是一个单一服务器,如今就能够配置多个服务器集群,那样就能够把访问流量分发到集群中的不一样服务器上,这样就大大减小了单一服务器上的压力,也就是负载均衡想要作的事。
HRegionServer
它是HBase集群中从角色,是集群中的小弟。它主要负责响应客户端的读写数据请求,以及负责管理一系列的Region。
Region
它是HBase集群中分布式存储的最小单元,一个Region对应一个Table表的部分数据。简单理解就是表存储在HBase中,而且都是以Region为单位进行存储。
第5点:HBase shell命令
说一些经常使用的基础操做命令:
建立user表,包含info、data两个列族 create 'user', 'info', 'data' 使用put命令向user表中插入信息,row key为rk0001,列族info中添加名为name的列,值为zhangsan put 'user', 'rk0001', 'info:name', 'zhangsan' 获取user表中row key为rk0001的全部信息(即全部cell的数据) get 'user', 'rk0001' 获取user表中row key为rk0001,info列族的全部信息 get 'user', 'rk0001', 'info' 更新数据操做 将user表的f1列族版本数改成5 alter 'user', NAME => 'info', VERSIONS => 5 删除数据以及删除表操做 删除user表row key为rk0001,列标示符为info:name的数据 delete 'user', 'rk0001', 'info:name' 清空表数据 truncate 'user' 删除表 首先须要先让该表为disable状态,使用命令: disable 'user' 而后使用drop命令删除这个表 drop 'user' 注意:若是直接drop表,会报错:Drop the named table. Table must first be disabled
再说一下HBase的高级操做命令:
显示服务器状态 status 'node01' 显示HBase当前用户 whoami 显示当前全部的表 list 统计指定表的记录数 count 'user' 检查表是否存在,适用于表量特别多的状况 exists 'user' 检查表是否启用或禁用 is_enabled 'user' is_disabled 'user' 禁用一张表/启用一张表 disable 'user' enable 'user' 删除一张表,记得在删除表以前必须先禁用 drop
上述都是HBase shell命令的内容,还有用JAVA API进行表操做的内容,可是这部分老刘就不讲解了,有须要的话,能够联系老刘,我会分享给你。
02 HBase总结
今天是HBase知识点的第一部分,老刘尽可能用大白话讲这些知识点讲述出来了,若是还有疑问,能够联系公众号:努力的老刘。
最后但愿今天讲的内容对大数据感兴趣的同窗有帮助,也但愿可以获得你们的批评和指点。以为写得还行的,给老刘点个赞!