R01 - 009、请描述 Hbase 中 scan 对象的 setCache 和 setBatch 方法的使用
作者:互联网
初学耗时:0.5h
注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端。
一、请描述 Hbase 中 scan 对象的 setCache 和 setBatch 方法的使用
记忆词:
...
一、请描述 Hbase 中 scan 对象的 setCache 和 setBatch 方法的使用
cache:
- 在默认情况下,如果你需要从hbase中查询数据,在获取结果ResultScanner时,hbase会在你每次调用ResultScanner.next()操作时对返回的每个Row执行一次RPC操作。
- 即使你使用ResultScanner.next(int nbRows)时也只是在客户端循环调用RsultScanner.next()操作,你可以理解为hbase将执行查询请求以迭代器的模式设计,在执行next()操作时才会真正的执行查询操作,而对每个Row都会执行一次RPC操作。
- 因此显而易见的就会想如果我对多个Row返回查询结果才执行一次RPC调用,那么就会减少实际的通讯开销。
- 这个就是hbase配置属性“hbase.client.scanner.caching”的由来,设置cache可以在hbase配置文件中显示静态的配置,也可以在程序动态的设置。
- cache值得设置并不是越大越好,需要做一个平衡。
- cache的值越大,则查询的性能就越高,但是与此同时,每一次调用next()操作都需要花费更长的时间,因为获取的数据更多并且数据量大了传输到客户端需要的时间就越长,一旦你超过了maximum heap the client process 拥有的值,就会报outofmemoryException异常。
- 当传输rows数据到客户端的时候,如果花费时间过长,则会抛出ScannerTimeOutException异常。
batch:
- 在cache的情况下,我们一般讨论的是相对比较小的row,那么如果一个Row特别大的时候应该怎么处理呢?要知道cache的值增加,那么在client process 占用的内存就会随着row的增大而增大。
- 在HBase中同样为解决这种情况提供了类似的操作:Batch。
- 可以这么理解,cache是面向行的优化处理,batch是面向列的优化处理。
- 它用来控制每次调用next()操作时会返回多少列,比如你设置setBatch(5),那么每一个Result实例就会返回5列,如果你的列数为17的话,那么就会获得四个Result实例,分别含有5,5,5,2个列。
- 下面会以表格的形式来帮助理解,假设我们拥有10Row,每个row拥有2个family,每个family拥有10个列。(也就是说每个Row含有20列) ![alt](https://www.icode9.com/i/ll/?i=20190703191927503.png) - RPCs=(Rows* Cols per Row) / Min(Cols per Row, Batch size) / Scanner caching
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
※ 世间诱惑何其多,坚定始终不动摇。
企业在实施网上培训时,应该注意哪些事项?
…
A、应以线下培训为主,网上培训为辅,将两者进行有效结合。
B、应明确网上培训计划。
C、网上培训系统的设计应满足教与学双方不同层面的要求。
D、要有一套完整的教学软硬体。
E、应该选择适合本企业经营特色及培训要求的网络产品。
…
BCDE
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端。
我知道我的不足,我也知道你的挑剔,但我就是我,不一样的烟火,谢谢你的指指点点,造就了我的点点滴滴:)!
标签:R01,setBatch,setCache,cache,next,操作,hbase,Row 来源: https://blog.csdn.net/weixin_42464054/article/details/94555372