Hbase优化

Hbase优化:内存分配

  • 目标

    • 了解Hbase中内存的管理及分配
  • 分析

    • 写缓存:Memstore
    • 读缓存:BlockCache
    • 使用的RegionServer的JVM堆内存
      • 注意:所有使用JVM堆内存工具,都会有一个共同的问题:GC停顿
      • 合理设计垃圾回收的机制来回收内存,避免GC停顿
  • 实现

    • MemStore:写缓存

      hbase.regionserver.global.memstore.size = 0.4
      
      • 如果存多了,Flush到HDFS
    • BlockCache:读缓存

      hfile.block.cache.size = 0.4
      
      • LRU淘汰算法,将最近最少被使用的数据从缓存中剔除
    • 读多写少,降低MEMStore比例

    • 读少写多,降低BlockCache比例

  • 总结

    • 可以根据实际的工作场景的需求,调整内存比例分配,提高性能

Hbase优化:压缩机制

  • 目标

    • 了解Hbase中支持的压缩类型及配置实现
  • 分析

    • Hbase的压缩源自于Hadoop对于压缩的支持

    • 检查Hadoop支持的压缩类型

      hadoop checknative
      
    • 需要将Hadoop的本地库配置到Hbase中

  • 实现

    • 关闭Hbase的服务

      配置Hbase的压缩本地库: lib/native/Linux-amd64-64

      cd /export/server/hbase-2.1.0/
      mkdir lib/native
      
    • 将Hadoop的压缩本地库创建一个软链接到Hbase的lib/native目录下

      ln -s /export/server/hadoop-2.7.5/lib/native /export/server/hbase-2.1.0/lib/native/Linux-amd64-64
      
    • 启动Hbase服务

      start-hbase.sh
      hbase shell
      
    • 创建表

      create 'testcompress',{NAME=>'cf1',COMPRESSION => 'SNAPPY'}
      put 'testcompress','001','cf1:name','laoda'
      
  • 总结

    • Hbase提供了多种压缩机制实现对于大量数据的压缩存储,提高性能
    • 压缩属于列族的属性:基于列族设计压缩

Hbase优化:布隆过滤

  • 目标

    • 了解布隆过滤器的功能及使用
  • 分析

    • 什么是布隆过滤器?
      • 是列族的一个属性,用于数据查询时对数据的过滤,类似于ORC文件中的布隆索引
  • 实现

    • 列族属性:BLOOMFILTER => NONE | ‘ROW’ | ROWCOL
    • NONE :不开启布隆过滤器
    • ROW:开启行级布隆过滤
      • 生成StoreFile文件时,会将这个文件中有哪些Rowkey的数据记录在文件的头部
      • 当读取StoreFile文件时,会从文件头部或者这个StoreFile中的所有rowkey,自动判断是否包含需要的rowkey,如果包含就读取这个文件,如果不包含就不读这个文件
    • ROWCOL:行列级布隆过滤
      • 生成StoreFile文件时,会将这个文件中有哪些Rowkey的以及对应的列族和列的信息数据记录在文件的头部
      • 当读取StoreFile文件时,会从文件头部或者这个StoreFile中的所有rowkey以及列的信息,自动判断是否包含需要的rowkey以及列,如果包含就读取这个文件,如果不包含就不读这个文件
  • 总结

    • Hbase通过布隆过滤器,在写入数据时,建立布隆索引,读取数据时,根据布隆索引加快数据的检索

Hbase优化:列族属性

  • 目标

    • 了解其他常用列族属性
  • 分析

    {NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}   
    
  • 实现

    • NAME:表示列族的名称
    • VERSIONS:最大版本数
      • 表示这个列族中的列最多可以存储几个版本的值
    • TTL:设置版本的自动过期时间,默认永不过期的,修改单位为秒
      • VERSIONS = 5
      • MIN_VERSIONS = 2
      • 一旦到达TTL时间,会自动清理过期的版本,只保留2个版本
    • MIN_VERSIONS:最小版本数
    • BLOCKCACHE:开启缓存,如果列族开启了缓存,这个列族从HDFS的查询就会放入缓存中
      • 默认就开启的
      • 工作中要将不是经常读的列族的缓存关闭
      • 使用LRU算法淘汰过期的数据
    • IN_MOMERY:最高缓存级别,meta表就是这个级别,一般情况下不建议开启
      • 不会被优先淘汰
    • BLOCKSIZE:存储文件的块的大小
    • 块越小,索引越多,查询越快,占用内存越多
      • 块越大,索引越少,查询相对较慢,占用内存越少
      • 一般不建议调整

Hbase优化:其他优化

  • 目标

    • 了解Linux、HDFS、Zookeeper、Hbase其他属性优化
  • 实现

    • Linux系统优化

      • 开启文件系统的预读缓存可以提高读取速度

        sudo blockdev --setra 32768 /dev/sda
        
      • 最大限度使用物理内存

        sudo sysctl -w vm.swappiness=0
        
      • 调整文件及进程句柄数

        sudo vi /etc/security/limits.conf 修改打开文件数限制
        末尾添加:
        *                soft    nofile          1024000
        *                hard    nofile          1024000
        Hive             -       nofile          1024000
        hive             -       nproc           1024000 
        $ sudo vi /etc/security/limits.d/20-nproc.conf 修改用户打开进程数限制
        修改为:
        #*          soft    nproc     4096
        #root       soft    nproc     unlimited
        *          soft    nproc     40960
        root       soft    nproc     unlimited
        
    • HDFS优化

      • 保证RPC调用会有较多的线程数

        dfs.namenode.handler.count = 20
        dfs.datanode.handler.count = 20
        
      • 文件块大小的调整

        dfs.blocksize = 256M
        
      • 文件句柄数

        dfs.datanode.max.transfer.threads = 4096
        
      • 超时时间

        dfs.image.transfer.timeout = 60000
        
      • 避免DN错误宕机

        dfs.datanode.failed.volumes.tolerated = 1
        
    • Zookeeper优化

      • 优化Zookeeper会话超时时间

        zookeeper.session.timeout = 90000
        
    • Hbase属性优化

      • 设置RPC监听数量

        hbase.regionserver.handler.count = 50
        
      • 优化hbase客户端缓存

        hbase.client.write.buffer = 2097152
        
      • 指定scan.next扫描HBase所获取的行数

        hbase.client.scanner.caching = 2147483647
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值