三大原则:rowkey长度原则、rowkey散列原则、rowkey唯一原则。 如何设计:1)生成随机数、hash、散列值;2)字符串反转;3)字符串拼接。
宕机分为HMaster宕机和HRegionServer宕机。 (1)HRegionServer宕机:HMaster会将其所保管的region重新分配到其他活动的Region Server上,由于数据和日志都持久存储在HDFS上,该操作系统不会导致数据丢失,所以数据的一致性和安全性是有保证的。 (2)HMaster宕机:HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即Zookeeper会保证总会有一个HMaster在对外提供服务。
共同点: HBase和Hive均是架构在Hadoop中的,都是用Hadoop作为底层存储。 区别: (1)Hive是建立在Hadoop上为了减少MapReduce Job编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目。 (2)Hive本身不存储和计算数据,他完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。且Hive是借用Hadoop的MapReduce来完成一些Hive命令执行。 (3)HBase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。 (4)Hive需要用到HDFS存储文件,需要用到MR计算框架。
HMaster:(1)管理用户对表的增删改查操作;(2)记录Region在哪台RegionServer上;(3)在Region切分后,负责新Region的分配;(4)监控每个RegionServer的状态,负载均衡以及故障转移。 **HRegionServer:**主要进行DML操作,是Region的管理者,对数据可以进行增删改查,对Region进行切分或者合并。
HBase有多个RegionServer,每个RS中又有多个Region,一个Region又分为多个Stroe,每个Store对应着表中的一个列族,在HDFS上则对应着一个目录/文件夹,如果列族中没有数据,那这个文件夹为空。 如果是要经常搜索一整条数据,列族越少越好,如果只有一部分数据经常被搜索,那么就将经常搜索的建立一个列族,其他不常搜索的建立一个列族,这样检索较快。
(1)Name Space 命名空间,类似于关系型数据库的DataBase概念,每个命名空间下有多个表,HBase自带两个命名空间,hbase和default,hbase中存放的是hbase内置的表,default表示用户默认使用的命名空间。 (2)Region 类似于关系型数据库中表的概念,HBase中表在行的方向上会被切分为多个HRegion,它是按照大小切割的。在定义时只需要声明列族就可以,不需要声明具体的列。 (3)ROW 每一行数据都由一个RowKey和多个Column组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据ROWKEY进行检索。 (4)Column HBase中的每个列都由CF(列族)和Column Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,无需先设定列限定符,只需指明列族。 (5)Time Stamp 用于标识数据的不同版本,每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。 (6)Cell 由{RK,CF,列限定符,时间戳}唯一确定的单元,Cell中的数据是没有类型的,全部是字节码形式储存。