如果创建表的时候没有做预分区,默认一个表就是一个region,一个region分裂之后变成两个region,两个region还是在同一台机器上。
为了解决数据倾斜问题,在创建表指定hbase表多个region分区规则,让数据负载在多台服务器上面。实现数据负载均衡,提高读写效率。
1)命令行手动指定预分区,rowkey的范围负载多台服务器。
2)命令行,使用16进制算法生成预分区,rowkey按照字典排序。
3)java API方式创建预分区。
1)get rowkey 直接根据rowkey获取某一条数据。
2)scan startRow stopRow 根据rowkey的范围扫描。
3)scan tableName 全表扫描。
1)结合业务主要对rowkey均匀负载和长度限制。
2)rowkey不能太长。10-100字节。
3)rowkey均匀散列,在高位随机生成一些数字均匀落在不同region服务器中,实现负载均衡。
将业务上经常需要查询的数据存储到es中,先查询es中数据,详情再去查询hbase数据,以空间换时间。
1)行式:mysql,oracle
同一行数据放在同一个block块里面,数据写入快,适合查询全属性字段。
2)列式:hbase
同一列数据放在同一个block块里面,每一列数据单独存放,适合查询某几列数据,大量降低系统IO。
1)存储格式。nosql存储格式是key,value形式。
2)查询速度。nosql更快。
3)成本。hbase,mongodb开源。oracle收费。
4)查询方式。nosql不能使用复杂的join查询。
1)JVM优化,设置多个线程进行垃圾回收。
2)延迟高的数据操作的等待时间,延长超时时间。
3)优化datanode允许最大文件打开数,hbase一般会同一时间操作大量文件。
原文:https://www.cnblogs.com/chong-zuo3322/p/12781610.html