大数据:HBase(1)
到目前为止,我们介绍了HDFS、MR、YARN等内容,这套东西,与印象中的“数据库”大相径庭,对于有关系型数据库知识背景的初学者来说,HDFS + MR的处理方式颇为原始,更像是一个数据存储系统,而不是数据库系统。不过,本次介绍的HBase,则是Hadoop生态中真正的数据库产品。
在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙: 740041381,即可免费领取套系统的大数据学习教程
概要介绍
-
分布式
HBase同大部分的分布式系统一样,支持“分片”(Sharding),数据自动进行分片,以跨节点分布存储。同时,HBase底层基于HDFS,后者本身自带分布式属性。
-
非关系型
不同于传统的关系型数据库如MySQL、Oracle等,后者总是预定义好数据模型,包括表、列、列类型,而作为NoSQL数据库的HBase采用更为灵活的数据模型,也并不支持使用SQL语句进行交互。
-
灵活的数据模型
HBase中存储的基本单位也叫“表”(table),一张表由一或多个“列族”(column family),列族包含若干“列”,不过,其中需要预定义的只有表和列族,而列是不需要预先定义,可以随时按需求创建。另外,HBase也没有数据类型,所有数据都最终存储为字节数组,这也增加了灵活度。
-
可扩展性
HBase中数据分片称为“region”,当一个region中的数据太大,HBase会按一定规则拆分成两个region,有了这一分片机制,方便HBase进行扩展。
架构
还是那个熟悉的味道,典型的分布式Master/Slave架构。
HBase采用Master/Slave架构搭建集群,由以下类型节点组成:HMaster节点、HRegionServer节点、ZooKeeper集群。而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等
-
HMaster
-
管理HRegionServer,实现其负载均衡。
-
管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
-
实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。
-
管理namespace和table的元数据(实际存储在HDFS上)。
-
权限控制(ACL)。
-
HRegionServer
-
存放和管理本地HRegion。
-
读写HDFS,管理Table中的数据。
-
Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙: 740041381,即可免费领取套系统的大数据学习教程
-
ZooKeeper集群
-
存放整个 HBase集群的元数据以及集群的状态信息。
-
实现HMaster主从节点的failover。
读写流程
-
读流程(简要)
-
从ZooKeeper(/hbase/meta-region-server)中获取hbase:meta表的位置(HRegionServer的位置),缓存该位置信息。
-
从hbase:meta中查询你所查的table及你所查的RowKye所在的HRegionServer,缓存该位置信息。
-
从上一步查询到的HRegionServer中读取Row。
-
写流程(简要)
-
当客户端发起一个Put请求时,首先它从hbase:meta表中查出该Put数据最终需要去的HRegionServer。
-
客户端将Put请求发送给相应的HRegionServer,在HRegionServer中它首先会将该Put操作写入WAL日志文件中,并返回通知客户端。
今天先介绍到这里,下一节将主要介绍HBase中的数据存储。