zoukankan      html  css  js  c++  java
  • Hbase 笔记(11) 性能优化

    1、垃圾回收优化

    (1)、HMaster:通常不会产生问题,因为master没有处理任何过重的负载,并且实际的数据服务并不经过它。默认配置:

    -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -Xmx4g -XX:+UseConcMarkSweepGC  -Dhbase.log.dir=/opt/hbase/logs -Dhbase.log.file=hbase-admin-master-wk129.log -Dhbase.home.dir=/opt/hbase -Dhbase.id.str=admin -Dhbase.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop/lib/native -Dhbase.security.logger=INFO,RFAS  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/hbase/logs/gc-master-hbase.log 

    (2)、HRegionServer:regionserver 处理特定负载时,特别是写入量过大的负载时,繁重的负载会迫使内存分配策略无法安全地只依赖 JRE 对程序行为的各种假设。memstore 写入磁盘的数据由客户端在不同时间写入,其占据的JVM的Heap空间可能不连续,从而导致JVM的Heap出现空洞。

    -Dproc_regionserver -XX:OnOutOfMemoryError=kill -9 %p   -Xmx12g -Xms12g-Xmn128m -XX:+UseParNewGC-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/hbase/bin/../logs/gc-regionserver-hbase.log --Dhbase.log.dir=/opt/hbase/bin/../logs -Dhbase.log.file=hbase-admin-regionserver-VA128.log -Dhbase.home.dir=/opt/hbase/bin/.. -Dhbase.id.str=admin -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS 

    细节: 

    -Xmx12g: 最大堆内存

    -Xms12g初始分配的堆内存

    -Xmn128m新生代内存

    -XX:+UseParNewGC: 年轻代使用 Parallel New Collector 垃圾回收策略 (停止运行Java进程而去清空年轻代堆,新生代很小,耗费时间很短)

    -XX:++UseConcMarkSweepGC:老生代使用(Concurrent Mark-Sweep Collector) 垃圾回收策略 (不停止Java进程异步并行,避免重写老生代Heap碎片时的停顿)

    -XX:CMSInitiatingOccupancyFraction=70:初始占用为70%时,后台线程开始启用 (防止发生Heap空间不足导致并发模式失败)

    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/hbase/bin/../logs/gc-regionserver-hbase.log :打印日志


    (3)、ZooKeeper

    -Dproc_zookeeper -XX:OnOutOfMemoryError=kill -9 %p -Xmx1g -XX:+UseConcMarkSweepGC  -Dhbase.log.dir=/opt/hbase/bin/../logs -Dhbase.log.file=hbase-admin-zookeeper-VA128.log -Dhbase.home.dir=/opt/hbase/bin/.. -Dhbase.id.str=admin -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS -verbose:gc-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/hbase/bin/../logs/gc-zookeeper-hbase.log

    (4)、NameNode

    -Dproc_namenode -Xmx8g -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.2.0/logs  -Dhadoop.home.dir=/opt/hadoop-2.2.0 -Dhadoop.id.str=admin  -Djava.library.path=/opt/hadoop-2.2.0/lib/native  -Dhadoop.log.file=hadoop-admin-namenode-wk129.log  -Dhadoop.root.logger=INFO,RFA   -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/logs/gc-namenode-hadoop.log

    (5)、SecondaryNameNode

    -Dproc_secondarynamenode -Xmx8g -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.2.0/logs  -Dhadoop.home.dir=/opt/hadoop-2.2.0 -Dhadoop.id.str=admin  -Djava.library.path=/opt/hadoop-2.2.0/lib/native  -Dhadoop.log.file=hadoop-admin-secondarynamenode-wk129.log  -Dhadoop.root.logger=INFO,RFA   -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/logs/gc-secondarynamenode-hadoop.log

    (6)、DataNode

    -Dproc_datanode -Xmx1g -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.2.0/logs  -Dhadoop.home.dir=/opt/hadoop-2.2.0 -Dhadoop.id.str=admin  -Djava.library.path=/opt/hadoop-2.2.0/lib/native  -Dhadoop.log.file=hadoop-admin-datanode-CO43.log   -Dhadoop.root.logger=INFO,RFA  -server -Dhadoop.security.logger=ERROR,RFAS  -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/logs/gc-datanode-hadoop.log 

    (7)、另外 Java Agent

    -Xmx2048M 

    GlassFish

    -XX:+UnlockDiagnosticVMOptions -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:MaxPermSize=384m-XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=30 -XX:+UseCMSInitiatingOccupancyOnly -XX:+LogVMOutput -XX:LogFile=/opt/glassfish3/glassfish/domains/domain1/logs/jvm.log -XX:+UseParNewGC -XX:+DisableExplicitGC -XX:NewRatio=7 -XX:ReservedCodeCacheSize=128m -Xmx3072m -Xms3072m -server-DANTLR_USE_DIRECT_CLASS_LOADING=true -Dgosh.args=--nointeractive -Dcom.sun.enterprise.server.logging.max_history_files=20  


    2、本地 memstore 分配缓冲区(Memstore-Local Allocation Buffers, MSLAB)

    memstore 的扰动(不断创建和释放内存空间),会造成 region server 的内存碎片问题, JVM 老生代的Heap产生孔洞。本地memstore 分配缓存可以解决这个问题。

    MSALB 只允许从堆中分配相同大小的对象,一旦这些对象分配并且最终回收,它们将在堆中留下固定大小的孔洞。之后相同大小的新对象会重新使用这些孔洞,不产生提升错误。

    配置 hbase.hregion.memstore.mslab.enabled              默认false

    配置 hbase.hregion.memstore.mslab.chunksize           默认2M

    配置hbase.hregion.memstore.mslab.max.allocation    默认256k


    缺点:浪费堆空间;需要额外的内存复制工作,速度比直接使用KeyValue慢一点。


    3、压缩

    类型:GZIP、LZO、SNAPPY

    测试: hbase org.apache.hadoop.hbase.util.CompressionTest /tmp/aaaa  snappy

    启动检查:

    <property>
         <name>hbase.regionserver.codecs</name>
         <value>snappy,gz</value>
    </property>

    使用: create 't2',{NAME=>'cf1',COMPRESSION=>'SNAPPY'}


    4、拆分和合并优化

    拆分风暴:当所有region大小以恒定的速度保持增长,region拆分会在同一个时间发生,引起IO上升。这时可以采用手动拆分。可以使用crontab 定时运行 split(). majorCompact() 命令。

    region 热点:采用salting 行键,或者随机行键;使用move 函数把region从一个server 移动到另一个server。

    预拆分region:create 't7', {NAME=>'cf1',COMPRESSION=>'GZ'}, {SPLITS=> ['row-111111','row-222222','row-44444444']}


    5、负载均衡

    默认开启。

    配置周期:hbase.balancer.period  默认5分钟, 

     hbase.balancer.max.balancing  默认 hbase.balancer.period  的一半


    6、合并region

    命令: hbase org.apache.hadoop.hbase.util.Merge


    7、客户端API

    (1).  禁止自动刷写:HTable.setAutoFlush(false)

    (2).  使用扫描缓存:   Scanner 设置 setCaching(500) 

    (3).   限定扫描范围: Scan.addFamily("cf1")

    (4).   扫描完成之后记得关闭:  scanner.close()

    (5).  使用块缓存: scan.setCacheBlocks(true)

    (6).  优化获取行键的方式:

    (7).   特定条件下关闭WAL


    8、配置

    (1). 减少ZooKeeper 超时的发生: 配置 zookeeper.session.timeout, 默认3分钟。

    (2). 增加处理线程:配置hbase.regionserver.handler.count ,默认10

    (3). 增大Heap:配置hbase-env.sh的 HBASE_HEAPSIZE

    (4). 启用数据压缩:Snappy 或 LZO

    (5). 增加Resion大小 : hbase.hregion.max.filesize, 默认256M

    (6). 调整块缓存大小:  perf.hfile.block.cache.size,默认0.2 (20%)

    (7). 调整memstore:调整 hbase.regionserver.global.memstore.upperLimit,   hbase.regionserver.global.memstore.lowerLimit, 默认分别为0.4, 0.35

    (8). 增加阻塞时存储文件数目:调整 hbase.hstore.blockingStoreFiles,默认7

    (9).增加阻塞倍率:调整hbase,hregion.memstore.block.multiplier, 默认2

    (10). 减少最大日志文件(WAL)限制:调整hbase.regionsrver.maxlogs . 默认32


    9、负载测试

    (1)、性能评价  Performance Evaluation hbase  org.apache.hadoop.hbase.PerformanceEvaluation 
    [--nomapred] [--rows=ROWS] [--table=NAME]   [--compress=TYPE] [--blockEncoding=TYPE] [-D<property=value>]* <command> <nclients>

    Command:
     filterScan      Run scan test using a filter to find a specific row based on it's value (make sure to use --rows=20)
     randomRead      Run random read test
     randomSeekScan  Run random seek and scan 100 test
     randomWrite     Run random write test
     scan            Run scan test (read every row)
     scanRange10     Run random seek scan with both start and stop row (max 10 rows)
     scanRange100    Run random seek scan with both start and stop row (max 100 rows)
     scanRange1000   Run random seek scan with both start and stop row (max 1000 rows)
     scanRange10000  Run random seek scan with both start and stop row (max 10000 rows)
     sequentialRead  Run sequential read test
     sequentialWrite Run sequential write test

    (2)、YCSB


  • 相关阅读:
    isMemberOf与isKindOf的区别
    当你的工程出现了问题,在别的电脑上可以正常运行。你该怎么做。。
    iOS 声明属性关键字的总结
    UISegmentedControl方法与属性的总结
    UILabel与UIFont的用法和属性的一些总结
    UIActivityIndicatorView控件的属性和方法
    第四百六十一天 how can I 坚持
    《Java基础知识》Java集合(Collection)
    《Java基础知识》Java线程的概念
    《Java基础知识》Java断言
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276337.html
Copyright © 2011-2022 走看看