• 用mapreduce来操作hbase的优化


    (1)scan.setCacheBlocks(false);

    初始化map任务    TableMapReduceUtil.initTableMapperJob

     本次mr任务scan的所有数据不放在缓存中,一方面节省了交换缓存的操作消耗,可以提升本次mr任务的效率,另一方面,一般mr任务scan的数据都是 一次性或者非经常用到的,因此不需要将它们替换到缓存中,缓存中还是放一些正常的多次访问的数据,这样可以提升查询性能。

    (2)conf.setBoolean("mapred.map.tasks.speculative.execution", false);

    是否开启mr的map备用任务机制,如果设为true,则如果一个map任务占用时间较其他的明显长很多(策略由内部设置),在其他TT节点上新建一个map任务,两个一起做,谁先做完,便结束。    

    优化项是将其设为false,为何呢,跟hbase存储机制有 关,hbase本地存储机制,即hbase会尽量把hdfs上的数据文件和rs上对应region存在一台机器上,即当前的map的数据肯定在当前的机器 上有本地数据,不需要网络传输。如果启用备用任务机制,则新创建备用任务时,很有可能新建备用任务的机器上没有所需要的数据的备份,如此便需要网络传输数 据,增加了网络的开销,其效率会大大的降低,还不如不开启备用任务,就让原来的map任务正常做呢。当然,即便关闭了此机制,如果创建map失败(比如由 于oom异常)仍然会在其他节点上重新创建此map任务。

    (3)HBase提供了scan.setCaching设置 cache数量,但是很多时候 如果设置不当,会相当耗内存。
    如果不设置该值,默认是1条。如果设置该值很大,是可以加快速度,同时也消耗了太多的内存。
    所以 合理的设置就很重要了。
    当设置了setCaching(n)后,我们的server会从regin server上读取出n条数据。
    那么client端读取数据的时候会直接从server的缓存中返回,
    但是如果每次你只需要读取100条记录,但是设置了setCaching(1000),那么每次
    都会从region server 多余的拿出900条记录,这样会让应用的server内存吃不消了
    比较好的解决方案就是 设置setCaching(n)为实际需要的记录数。

  • 相关阅读:
    Notepad++技巧
    LinuxTips从命令行到脚本
    Linux任务前后台的切换
    win7 中使用NFS共享
    Python实例31[批量对目录下文件重命名]
    rsync 的核心算法
    linux/unix设计思想
    linux进程的状态
    Perforce查看workspace sync到的changlist
    python类库26[sqlite]
  • 原文地址:https://www.cnblogs.com/sunxucool/p/3238152.html
Copyright © 2020-2023  润新知