-
1.Hbase与Hive 整合?
Hive 在一般的使用中,通过把hive语句通过driver转化成mapreducer执行,但是与hbase整合后,通过hiveStorageHandler将hive语句解析映射到Hbase集群。
如果某表hbase已经存在但是在hive中不存在相关信息,适合创建外部表,如果在hive中已经有相关信息,适合创建内部表。
-
2.HBase的二级索引?
HBase实现了二级索引的方式:client-managed方式、ITHbase、IHbase方式、coprocessor方式
1.client-managed方式:建立索引表,索引表只需要一个列族,这个列族只有一个字段,本质是倒排序。
二级索引的本质就是建立各列值和行键的映射关系。
首先建立列值为键,rowkey为值的二级索引表,当用户要去找这个列族下的另外一个列值的时候,首先从这个列值索引表中找到rowkey,在从rowkey中找到相应的列值。
2.ITHbase是基于事务的二级索引
首先建立一个事务表,每次开启事务的时候在表中记录状态。当客户端进行更新多个表的时候,需要开启事务,然后把每次put的id传入到regionserver中,当server确认收到,这个记录待写入。最后完成了由客户端进行commit完成写入。
3.IHbase 支持更快的扫描
它的思想是在region级别建立索引不是在表级
核心思想:
当memstore满足flush到磁盘时,Ihbase会进行拦截请求,并为这个memstore的数据建立索引。索引存放在表的另一个列族中。在执行scan扫描的时候会结合索引列标记加快查询。
4.coprocessor方式
支持region级别的索引和针对一些聚合操作。在sever端添加一些回调函数。利用hook的实现二级索引,实现max.min,avg,等等。
-
3.Hbase的协处理?
1.主要是轻易建立二次索引,复杂的过滤器。把计算放到regionserver中去做,把结果返回给你。把客户端要做的事情,放到服务器中执行。
协处理器分类
1.observer
observer 类似于数据库的触发器,当发生某些事件的时候这类协处理器会被server端调用。observer coprocessor就是HBase server端的hook钩子,比如;put之前就有钩子函数preput,在put之前会被regionserver调用。
2.endpoint 端点
类似于存储过程
终端是动态rpc插件的接口。它实现代码被安装在服务器端,从而通过Hbase的RPC唤醒。
-
4.Hbase中的get与scan 的功能以及实现区别
1.get默认是按照指定的rowkey获取唯一一条记录,get的方法处理方式有cloestrowbefore和没有设置rowlock,主要是用来保证事务性,每个get是以row为标记,一个row中可以有多个family和列
2.按照指定条件获取一批数据,是scan方法,可以通过设置setcaching和setbatch方法提高速度。
3.scan可以通过setstartrow和setendrow来限制访问,左闭右开。
4.scan可以设置setfilte来添加过滤器。用于分页查询和多条件查询。
-
5.Hbase性能优化
查询优化:
1.设置scan缓存:setcaching和setbatch
2.关闭resultscanner.resultscanner会存储服务端扫描结果,影响性能。
3.使用过滤器
4.使用htablepool进行访问
写入优化
1.设置预分区
2.关闭wal日志
3.设置autoflush 默认是true,要设置为false,这样可以批量插入再提交。不然收到一个提交给服务器。
4.批量写
表设计优化
1.开启布隆过滤器
2.行建优化
-
6.Hbase查询一行数据过程
1.客户端调用get或者scan进行查询
2.通过zookeeper寻找root表的入口地址->找到meta表region地址,在meta表检索region的信息
3.在regio内查询,构造扫描器,从memstore中查找-blockstore查找-hfile查找。