1、rowkey设计有哪三原则?
①长度原则:rowkey是二进制码流。10-100个字节。
②散列原则:rowkey是按照字典序存储的。利用该规则,将数据均衡的分到不同的regionserver上。
③唯一原则 :rowkey是查询数据的索引,所以必须要保证唯一性。
2、如何解决热点问题?
加盐:在rowkey前加上随机数。读不可预测。
哈希:hash会使同一个rowkey使用固定的前缀加盐,读可预测。
反转:如反转手机号或者时间戳。可以使得数据分布较为均匀。但此时行键连续性最低,如果对行键连续性较高则不适合。
3、hbase的compact的分类和作用?
minor compact:在刷写文件达到一定数量之后,进行文件的合并操作。
major compact:有个CompactionChecker线程,进行周期轮询。默认为7天,会将多个storefile进行合并,同时会将超过版本的,标记为删除的,过期的数据进行删除操作。
4、协处理器 Coprocessor
为表埋钩子代码,当条件符合时自动触发钩子。可以利用协处理器简历hbase的二级索引。创建一个类继承观察类,重写preput方法,在插入数据到本表前会先执行该方法。打包上传到hdfs,利用hbase shell命令加载该协处理器到表中
5、phoenix构建二级索引
phoenix是一个HBase的开源SQL引擎。
优点:①支持sql查询Hbase,自动转换sql为最佳并行scan语句
②将where子句交给过滤器处理,将聚合查询交给协处理器处理
③支持直接创建二级索引来提升非主键的查询性能
④跳过扫描过滤器来优化in、like、or查询
⑤优化写操作
缺点:①不支持事务和复杂查询
②有着严格的版本对应关系
6、hbase的高表与宽表的选择?
高表:①查询性能更好。因为一行数据更少,所以查询缓存BlockCache能缓存更多的行,以行数为单位的吞吐量更高。
②分片能力更好。因为hbase只能以行分片。
宽表:①元数据开销小
②事务性更小
③数据压缩比更好
7、hbase的布隆过滤器?
布隆过滤器是HBase系统中的高级功能,它能够减少特定访问模式下的查询时间。默认为关闭状态。
使用过滤器,如果扫描文件块不包含该行数据,它会明确答复。如果包含该行数据,答复可能有误,通常该错误率设置为1%。意味着过滤器中关于一个文件包含一个请求行的报告中有1%是错误的。但块加载的数量大大减少了,可以提升读取效率。