zoukankan      html  css  js  c++  java
  • HBase scan setBatch和setCaching的区别【转】

    转自:http://blog.csdn.net/caoli98033/article/details/44650497

    HBase的查询实现只提供两种方式:

    1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)

    2、按指定的条件获取一批记录,scan方法(org.apache.Hadoop.Hbase.client.Scan)

    实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:
    1、scan可以通过setCaching与setBatch方法提高速度(以空间换时间);
    2、scan可以通过setStartRow与setEndRow来限定范围([start,end)start是闭区间,end是开区间)。范围越小,性能越高。
    通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。
    3、scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

    scan中的setCaching与setBatch方法的区别是什么呢?

    setCaching设置的值为每次rpc的请求记录数,默认是1;cache大可以优化性能,但是太大了会花费很长的时间进行一次传输。

    setBatch设置每次取的column size;有些row特别大,所以需要分开传给client,就是一次传一个row的几个column。

    batch和caching和hbase table column size共同决意了rpc的次数。

    通过下表可以看出caching/batch/rpc次数的关系:

    10 rows, 2 families, 10column per family,total:200 cell
     

    缓存批量处理Result个数RPC次数说明
    1 1 200 201 每个列都作为一个Result实例返回。最后还多一个RPC确认扫描完成
    200 1 200 2 每个Result实例都只包含一列的值,不过它们都被一次RPC请求取回
    2 10 20 11 批量参数是一行所包含的列数的一半,所以200列除以10,需要20个result实例。同时需要10次RPC请求取回。
    5 100 10 3 对一行来讲,这个批量参数实在是太大了,所以一行的20列都被放入到了一个Result实例中。同时缓存为5,所以10个Result实例被两次RPC请求取回。
    5 20 10 3 同上,不过这次的批量值与一行列数正好相同,所以输出与上面一种情况相同
    10 10 20 3 这次把表分成了较小的result实例,但使用了较大的缓存值,所以也是只用了两次RPC请求就返回了数据

    要计算一次扫描操作的RPC请求的次数,用户需要先计算出行数和每行列数的乘积。然后用这个值除以批量大小和每行列数中较小的那个值。最后再用除得的结果除以扫描器缓存值。 用数学公式表示如下:

     RPC请求的次数=(行数x每行的列数)/
      Min(每行的列数,批量大小)/扫描器缓存

    此外,还需要一些请求来打开和关闭扫描器。用户或许需要把这两次请求也考虑在内。 

    下图展示了缓存和批量两个参数如何联动。 


    扫描器缓存和批量两个参数控制RPC的次数 

    小的批量值使服务器端把3个列装入一个Result实例,同时扫描器缓存为6,使每个RPC请求传输6行,即6个被批量封装的Result实例。如果没有指定批量大小,而是指定了扫描器缓存,那么一个调用结果就能包含所有的行,因为每一行都包含在一个Result实例中。只有当用户使用批量模式后,行内(intra-row)扫描功能才会启用。
     
     
  • 相关阅读:
    SSH、SCP和SFTP 解析(转)
    SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 (转载)
    Git版本控制与工作流详解(转)
    IQueryable,IEnumberable,.AsEnumerable() 和 .AsQueryable() (转载)
    ASP.NET 中Http处理流程与 HttpModule,HttpHandler学习之初步认知
    xml Node 是否存在
    MVC-前台调用后台action 传递upload file 参数问题
    ResXResourceWriter 与ResourceWriter
    "= ="与 equals 的区别 摘录
    jpg文件格式分析
  • 原文地址:https://www.cnblogs.com/seaspring/p/6861957.html
Copyright © 2011-2022 走看看