本文主要是概述的讲解了Hbase入门相关的信息,包含Hbase的概念讲解、特性分析、原理分析、单机安装过程、基本命令操作,适合刚入门或者刚接触的小伙伴参考。文章后续会补充本篇文章的word文档的下载路径,提供下载参考使用。
一、Hbase概念:
- Hbase是一个开源的、分布式的、多版本的非关系型数据库。
- Hbase是基于Google的Bigtable的一个java版本,建立在HDF文件系统之上,具有高可靠性、高性能、列式存储、no-sql的近实时读写的数据库。
二、Hbase特性:
-
Hbase和其他的关系型数据库一样,都是有表的概念,但是Hbase的表没有固定的字段定义。
-
Hbase表中都有一个固定的行键Row Key,每一行的RowKey不能在表中重复,所以一般在存储数据时,行键用一些规定的字符拼接特定的hashcode来作为Row Key。默认按照RowKey升序排列。所以Hbase中的数据,可能不是按照我们自己想象的位置存储的。
-
Hbase存储的数据类型是byte[],任何可以转化为字节数组的数据类型,比如:字符串、数字、复杂对象、图像都可以作为Hbase的值存储。所以Hbase不维护用户的数据类型。
-
Hbase表中有列簇的划分,用户可以制定哪些key-value存在哪些列簇上。
-
Hbase的列就是数据,也是索引,所以具有很高的读速度。
三、Hbase的内部原理:
Client:
Hbase的客户端,比如后续的hbase shell命令行客户端,或java连接hbase写的API。
-
Hbase中有两张有特殊的表:-ROOT-和.META.。
1)、.META.中存放着从表中拆分出来的Region映射信息,一个.META.中可以有多个Region信息。2)、-ROOT-中存放着.META.的Region信息,一个-ROOT-只能有一个Region信息。
-
每一client访问用户数据的时候,都会先去访问zoopkeeper(zoopkeeper中记录着-ROOT-的localtion信息),然后再去访问-ROOT-,最后再去访问.META.,才能找到用户访问的数据的位置,期间会进行多次网络访问,所以client端会做cache缓存。
Zoopkeeper:
- Zoopkeeper做一个集群管理、故障转移的工作。下边管理多个Master,如果一个Master出现故障,就要选举另外一个正常的Master继续工作,但是需要保证有一个Master是正常工作的。
- 存储Region的寻址入口信息,记录-ROOT-在哪台服务器上以及位置信息。
- 监控HRegionServer的实时状态信息,上报给HMaster。
Master:
- 负责分配给他的RegionServer的负载均衡,并且为RegionServer分配Region。
- 发现故障的RegionServer时,重新分配其上的Region。
- HDFS上的垃圾回收。
- 处理删除、修改、增加列簇的表操作的请求。 5、当发现RegioneServer对其中的Region 在进行分裂之后,产生新的Region时,它来决定新产生的Region放在哪个RegioneServer上。
RegionServer:
- 管理Master分配给它的Region,负责拆分很大的Region,并处理对这些Region的I/O请求。
Region:
- Region是Hbase的分布式、负载均衡的最小单位,不同的Region是可以分布在不同的RegionServer上,但是同一个Region不会分布在不同的RegionServer上。
- Region是表在行方向上的分割,一般一个表只有一个Region。
- 当Region上的某个列簇很大的时候,就会拆分成两个Region.
Store:
- Hbase中的一个ColumnFamily就是一个Store,有多少个ColumnFamily就会有多少个Store,至少一个或者多个Store组成一个Region。
- 一个Store由一个MemStore和0个或者多个StoreFile组成。所以,Region的是否需要拆分,是根据Store的大小来决定的。
MemStore:
MemStore是一个缓存机制,数据首先会存放在MemStore中,当达到一定大小时(默认128M),才会将数据刷新到StoreFile文件中。所以数据刷新到文件中情况有以下几种:
- MemStore的大小达到默认值(128M)。
- RegionServer发生故障时,需要及时将数据保存下来。
- 人为的干涉去刷新MemStore。
StoreFile:
- StoreFile底层就是HFile,MemStore中数据的下一步就是保存在StoreFile。当StoreFile中的数据达到一定的阀值的时候,系统就会就StoreFile进行合并,合并时会对版本作合并和删除工作,形成更大的StoreFile。
HFile:
- HFile是HBase中的数据存储格式,是以Key-value的形式存储的二进制文件。Hbase通过HFile与HDFS的客户端打交道,并将数据保存在HDFS中的DataNode中。
HLog:
-
HLog是负责HBase的日志记录工作,对HBase的任何操作都被HLog记录在HLog文件中,以备数据恢复使用。
总结:可以发现,client访问HBase时,通过Zoopkeeper获取寻址信息,通过RegionServer进行数据操作,所以在没有 Region 分裂的情况,Master 宕机一段时间是可以忍受的。
四、Hbase单机安装:
1.Hbase安装需要对应的JDK,下边是Hbase官网推荐的JDK版本,JDK的安装可以参考我的另外一篇博客“linux环境部署”,里面有详细的安装步骤,包括jdk、mysql等:
2.下载要使用的Hbase,解压安装:
(1)下载(wget
https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.3.0/hbase-2.3.0-bin.tar.gz):
(2)解压(tar -zxvf ./hbase-2.3.0-bin.tar.gz),解压后会有一个hbase-2.3.0文件夹:
(3)进入hbase-2.3.0文件夹后,找到conf/hbase-env.sh,在如下位置增加java环境的路径,打开export HBASE_MANAGES_ZK=true的注释,告诉Hbase我们使用内置的zookeeper:
(4)启动Hbase服务(./bin/start-hbase.sh)后,进入Hbase命令行客户端(./bin/hbase shell):
五、HBase基本操作命令:
1.创建表(create ‘t_local_test’,
{NAME=>‘cf’,IN_MEMORY=>‘true’,TTL=>15552003} // TTL为数据有效期,单位秒):
2.列出所有的表(list):
3.删除表:
1)、先使用disbale 't_local_test’禁用表(使用enable 't_local_test’启用表):
2)、再使用drop 't_local_test’删除表:
4.添加数据,如下,总共添加了两行数据:
- put ‘t_local_test’,‘row1’,‘cf:a’,’{“name”:“lala”,“sex”:“男”}’
- put ‘t_local_test’,‘row1’,‘cf:b’,’{“height”:“120”,“age”:" 12}’
- put ‘t_local_test’,‘row2’,‘cf:a’,‘this is a text’
5.查看数据:
1)、查看该表中的所有数据(scan ‘t_local_test’):
2)、查看某一条数据:
- get ‘t_local_test’,‘row1’ // 查看Row Key为row1的所有列
- get ‘t_local_test’,‘row1’,‘cf:a’ // 查看Row Key为row1的列簇为a的数据
6.删除数据:
- delete ‘t_local_test’,‘row1’,‘cf:a’ // 删除Row Key为row1的列簇为a的数据
- deleteall ‘t_local_test’,‘row1’ // 删除Row Key为row1所有列簇的数据
7.查看表的详细信息,包括表的默认配置信息(describe ‘t_local_test’):