![629f07dfdbfacd221a19549568f259e9.png](https://img-blog.csdnimg.cn/img_convert/629f07dfdbfacd221a19549568f259e9.png)
一、HBase的特点:
(1)、表大:一个表可以有数亿行,上百万列。
(2)、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列。
(3)、HBase是面向列的的存储和权限控制,列族独立索引。
(4)、稀疏:空(null)列并不占用空间,表可以设计的非常稀疏。
(5)、数据类型单一:HBase中的数据都是字符串,没有类型。
二、HBase和Hive的对比:
(1)、HBase和Hive的区别对比:
![4ebd11d490e2ec5ba84cd14f74844841.png](https://img-blog.csdnimg.cn/img_convert/4ebd11d490e2ec5ba84cd14f74844841.png)
(2)、Hive是一种构建在Hadoop基础设施之上的数据仓库,通过Hive可以使用HQL语言查询存放在HDFS上面的数据。HBase能够在它的数据库上面实时运行,HBase被分区为表格,表格有进一步分割为列簇,列族必须需要用schema定义。一个列簇可以包含很多列,每个key/value在HBase中都被定义成一个cell,每一个cell都有一个rowkey,一个columnFamily,一个value值,一个timestamp。rowkey不能为空且唯一。
(3)、Hive把HQL解析成MR程序,因为它是兼容JDBC,所有可以和很多JDBC程序做集成,它只能做离线查询,不能做实时查询,默认查询Hive是查询所有的数据,这个可以通过分区来控制。HBase通过存储的key/value来工作的,它支持主要的四种操作,增删改查。
(4)、Hive目前不支持更新操作,花费时间长,必须要先设置schema将文件和表映射,Hive和ACID不兼容。HBase必须需要zk的支持,查询语句需要重新学,如果要使用sql查询,可以使用Apache Phonenix,但会以schema作为代价。
(5)、Hive适用于一段时间内的数据进行分析查询,HBase适用于大规模数据的实时查询。
三、HBase适用场景:
(1)、半结构化数据和非结构化数据,可以进行动态扩展。
(2)、记录非常的稀疏。
(3)、多版本数据。
(4)、超大数据容量:HBase会自动水平切分扩展,跟Hadoop的无缝集成保证了其数据的可靠性和海量数据分析的高性能。
四、HBase中的rowkey设计原则:
(1)、rowkey长度原则:rowkey是一个二进制流,长度开发者建议是10-100字节,不过建议越短越好,最好不超过16字节。原因是:数据持久化文件HFile中是按照按照key/value存储的,如果rowkey太长的话就会影响HFile的存储效率。Memstore将缓存数据到内存,如果rowkey字段过长内存的有效利用会降低,系统将会无法缓存更多的数据,降低检索的效率。
(2)