今日学习心得:
使用Java API连接和操作Hbase数据库
Hbase shell
https://www.csdn.net/gather_2d/MtTaEgysNTg2Ni1ibG9n.ht
到目前为止我练习了写HBase connection和HBaseUtil,HBase connection里面就是获取连接,关闭连接,获取hbase table对象,HBaseUtil里写了几个方法,创建表,删除表,插入数据,批量出量数据,查询单条数据,scan扫描数据,删除行,删除列簇。
1:HBase简介
是一个适合于非结构化数据(所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等)存储的数据库,分布式,面向列,开源
2:优势
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑;
2)数据存储在hdfs上,备份机制健全;
3)通过zookeeper协调查找数据,访问速度快。
3:角色
1)一个或者多个主节点,Hmaster
2)多个从节点,HregionServer
3)HBase依赖项,zookeeper
4:HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排列,一个表对应多个行,一个行键对应多个列簇,一个列簇对应多个列,一个列对应多个key-value
5:Row Key 行键
row key是用来表示唯一一行记录的主键,HBase的数据是按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。访问HBase table中的行,只有三种方式:
1.通过单个row key 访问;
2.通过row key的range (多个不包括全部)
3.全表扫描
6:列簇
列簇:HBase表中的每个列,都是某一个列簇中的一员,列簇是表的schma的一部分,而列不是。
7:Cell
由{row key,columnFamily,version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储。
8:时间戳
HBASE中通过rowkey和columns确定的为一个存储单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBASE提供了两种数据版本回收方式。一是保存数据的最后n个版本,而是保存最近一段时间内的版本(比如最近7天)。用户可以针对每个列族进行设置。
Client:
使用HBase RPC机制与HMaster和HRegionServer进行通信
Client与HMaster进行管理类操作
Client与HRegionServer进行数据读写类操作
Zookeeper Quorum存储-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况
Zookeeper避免HMaster单点问题
Zookeeper的主要作用:客户端首先联系ZooKeeper子集群(quorum)(一个由ZooKeeper节点组成的单独集群)查找行健。上述过程是通过ZooKeeper获取含有-ROOT-的region服务器名(主机名)来完成的。通过含有-ROOT-的region服务器可以查询到含有.META.表中对应的region服务器名,其中包含请求的行健信息。这两处的主要内容都被缓存下来了,并且都只查询一次。最终,通过查询.META服务器来获取客户端查询的行健数据所在region的服务器名。一旦知道了数据的实际位置,即region的位置,HBase会缓存这次查询的信息,同时直接联系管理实际数据的HRegionServer。所以,之后客户端可以通过缓存信息很好地定位所需的数据位置,而不用再次查找.META.表。