• 使用MR编程hbase和hbase调优-布隆过滤器


    使用MR编程操纵hbase
    ======================================
    
        1、TableInputFormat输入K,V格式
            ImmutableBytesWritable    //相当于textInputFormat中的偏移量
            Result            //真实数据
    
    
            使用conf设置table配置文件
                conf.set(TableInputFormat.INPUT_TABLE,"ns1:t1");    //指定表名
                //还需手动添加
                conf.set("hbase.zookeeper.quorum","s102:2181,s103:2181");    //指定zk连接地址
    
        2、TableOutputFormat输出K,V格式
            ignore        //当指定value时,此项可忽略,建议使用NullWritable
            Put || Delete    //hbase的put或delete
    
    
            使用conf设置table配置文件
                conf.set(TableOutputFormat.OUTPUT_TABLE,"ns1:wc");    //指定表名              
                //还需手动添加                                                                  
                conf.set("hbase.zookeeper.quorum","s102:2181,s103:2181");    //指定zk连接地址
    
    
    
    
    布隆过滤器
    =============================
        是hbase的文件格式,以k/v形式存储,k/v均是字节数组
    
        HFile包括以下内容:
            读取或写入压缩块的存储空间。 
            每个块所指定的I/O操作的压缩编解码器
            临时的key存储
            临时的value存储
            hfile索引,存在于内存,占用空间约为(56+AvgKeySize)*NumBlocks.
            性能优化建议
        ****    最小块大小,推荐在 8KB to 1MB之间
                顺序读写推荐大块,但不便于随机访问(因为需要解压更多的数据)
                小块便于随机读写,但是需要占用更多内存,但是创建起来更慢(因为块多,每次压缩都需要flush操作)
                由于压缩缓存,最小块大小应该在20KB-30KB.
    
    
        hfile中的索引,在每次加载region的时候会加载到内存
    
        region:文件夹/cf:文件夹 --------> HFile
    
        在进行查询时,会将cf文件夹中所有的hfile索引进行LSM树遍历查找(近似于二分查找),
        所以在查找的时候会遍历所有的索引
    
        布隆过滤器为了解决此问题,可以立刻判断此文件没有制定的rowKey。帮助过滤掉一些不需要扫描的文件
        比块索引粒度粗
    
        所以hbase在定位rowKey的时候,首先通过布隆过滤器排除一些肯定不存在的hfile
                         然后在剩下可能存在hfile的文件中通过块索引遍历数据。
    
    
        布隆过滤器配置:BLOOMFILTER
            NONE        //不适用,不占用
            ROW        //推荐只扫描行级别的操作,占用资源不大
            ROWCOL        //推荐扫描行+列级别操作,占用资源稍大
    
    
        alter 'ns1:t1', NAME => f1, BLOOMFILTER => ROWCOL
    
    
    
    HBase调优:
    =================================
        1、调整新生代堆内存大小
            export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    
        2、配置减少垃圾回收产生的内存碎片
            hbase.hregion.memstore.mslab.enabled ===> true    
    
        3、采用压缩    //只能在空表采用压缩
            alter 'ns1:t1', NAME => 'f1', COMPRESSION => 'LZ4'
    
        4、优化拆分和合并:
            split:避免切割风暴        //region默认10G,当所有表同时增长到指定阈值,就会同时进行切割
                            //极大影响集群性能
                            //解决方案:1、设置超大值,进行手动切分
                                    2、进行预切割
                   
                   避免热点数据:        //rowKey设计原则:在集群范围分散,在区域范围连续
                                           1、组合键
                                    2、调整组合键权重
                                    3、进行盐析:随机加盐x    hash加盐-  手动设计前缀:在集群范围分散,在区域范围连续
                                    4、数字比较,使用MAX_VALUE-num 进行倒排
                                    5、格式化数字串    DecimalFormat
                   手动移动区域:
    
    
    
                        
            merge:merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME' 
    
        5、负载均衡:    //超过半数region由一个regionServer管辖,导致压力过大
    
            close_region    //关闭区域
            assign        //注册区域
            unassign    //注销当前regionserver,并在其他节点重新注册
    
            balancer    //均衡器,unassign所有的region并重新注册
    
    
        6、API
            1、关闭自动刷写
                table.setAutoFlush(false, false);
    
            2、设置扫描缓存 || 批次
                scan.setCaching()
    
            3、限定扫描范围        //避免全表扫描
    
            4、关闭resultScanner    //影响性能问题
                rs.close()
    
            5、扫描设置快缓存    //默认true
                将扫描结果缓存到客户端以便下次使用
    
            6、设置过滤器:        
                RowFilter
                FamilyFilter
                QualifierFilter
                ValueFilter
    
                SingleColumnValueFilter
    
                FilterList
    
            7、put设置禁止写入WAL    //不推荐    WAL的生命周期
                put.setDurability(Durability.SKIP_WAL);
    
        7、配置
            1、增加处理线程
                hbase.regionserver.handler.count
    
            2、增加堆内存:hbase-env.sh
                export HBASE_HEAPSIZE=1G    //默认1G
                
            3、调整快缓存大小
                hfile.block.cache.size=0.4    //堆内存的40%
    
            4、调整memstore大小
                hbase.regionserver.global.memstore.size            //最大memstore,默认堆内存40%
                hbase.regionserver.global.memstore.size.lower.limit    //最小memstore,默认最大memstore的95%
    
            
    
                
            
    
    
    
    
    
    
        
    
            
  • 相关阅读:
    『Python基础』第4节:基础数据类型初识
    『Python基础练习题』day02
    『Python基础』第1节 Windows环境下安装Python3.x
    Windows安装Mysql5.7.22
    jar 运行报错:找不到或无法加载主类
    linux 下的mysql 连接报错
    将本地Jar包安装到maven仓库中去
    Mysql 中的伪列用法
    Mysql 中的伪列用法1
    关于springboot中文件上传,properties配置
  • 原文地址:https://www.cnblogs.com/zyde/p/9015827.html
Copyright © 2020-2023  润新知