Hbase性能优化

 

    1. Hbase性能优化
      1. dataName线程数设置

设置处理文件线程数量:

Hbase性能优化_第1张图片

 

      1. 文件句柄和进程限制

修改/etc/sysctl.conf,设置fs.file-max值。

      1. 时间同步

ntp设置服务器时间一致。

 

      1. 设置交换区

编辑文件/etc/sysctl.conf,增加vm.swappingess=5, 可以尝试设置0-5,减少使用交换空间的概率。

 

      1. exts文件系统

如果服务器使用exts文件系统,则设置noatime禁止记录文件访问时间戳减少内核管理开销。

挂在禁用时间戳:

/dev/sda1 /data  ext3  defaults,noatime 0  0

 

数据磁盘设置:

通过tune2fs减少保留块的数量,获取更多磁盘空间,默认情况每块磁盘保留块是5%,可以减少到1%。

tune2fs -m  1   , 例如设置/dev/sda1空余磁盘。tune2fs -m  1 /dev/sda1。

该设置只适合数据磁盘,master或者操作系统依赖磁盘不能使用设置。

 

 

      1. 设置查询缓存

在hbase-site.xml中设置。

1、设置表级别缓存,当提交数据达到20MB时,自动提交。或者调用close()方式是提交,或者调用flushcommit()方法提交。

   <property>

      <name>hbase.client.write.buffername>

      <value>20971520value>

   property>

 

//开启客户端缓存,禁止自动提交,默认缓存是2MB,当达到缓存值时,自动提交。

      hTable.setAutoFlush(false);

      //显示刷新推送服务器

      hTable.flushCommits();

      // 关闭连接,自动提交服务器

      hTable.close();

 

2、设置扫描缓存,即获取结果缓存。

   <property>

      <name>hbase.client.scanner.cachingname>

      <value>10value>

   property>

 

      // 创建表对象

      HTable hTable = new HTable(conf, "t_user");

      Scan scan = new Scan();

      //设置表级缓存

      hTable.setScannerCaching(10);

      //设置扫描缓存10

      scan.setCaching(10);

      //每次批量处理10

      scan.setBatch(10);

 

3、设置扫描租约,及region超时时间

  

   <property>

      <name>hbase.regionserver.lease.periodname>

      <value>120000value>

   property>

 

      1. 设置memstore缓存大小

 

hbase.hregion.memstore.flush.size 设置memstore缓存大小,当达到指定值,刷写到hfile中保存到磁盘。

在hbase-en.sh中,通过HBASE_OPTS或者HBASE_REGIONSERVER_OPT设置垃圾回收选择.

设置新生代空间大小:

-XX:MaxNewSize=128M -XX:NewSize=128M 或者通过设置 -Xmn128M

 

设置jre日志输出

-verbose:gc -XX:+PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.logs/gc-$

 

使用并行垃圾回收策略

-XX:+UseParNewGC and -XX:UseConcMarkSweepGC

 

 

设置 本地memstore缓存大小

hbase.hregion.memstore.mslab.enabled=true

设置mslab固定缓冲去大小,默认是2MB

hbase.hregion.memstore.mslab.chunksize=2MB

设置mslab固定缓冲区最大值,默认是256MB

hbase.hregion.memstore.mslab.max.allocation=256MB

 

 

      1. 压缩方式

 

Hbase性能优化_第2张图片

 

hbase压缩测试用法:

[root@y3 ~]# hbase org.apache.hadoop.hbase.util.CompressionTest

18/08/08 05:01:11 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

Usage: CompressionTest lzo|gz|none|snappy|lz4

For example:

  hbase class org.apache.hadoop.hbase.util.CompressionTest file:///tmp/testfile gz

 

[root@y3 ~]#

在hbase-site.xml中设置hbase压缩方式。

 

创建表时启用压缩方式:

create 'test',{NAME=>'INFO',COMPRESSION=>'SNAPPY'}

 

 

 

      1. 优化拆分与合并

 

1、预先设置拆分region:

create 'test',{NAME=>'INFO',COMPRESSION=>'SNAPPY',SPLITS=>['row-100','row-200','row-300']}

2、通过hbase提供的工具拆分

[root@y3 conf]# hbase org.apache.hadoop.hbase.util.RegionSplitter

usage: RegionSplitter

                      SPLITALGORITHM is a java class name of a class

                      implementing SplitAlgorithm, or one of the special

                      strings HexStringSplit or UniformSplit, which are

                      built-in split algorithms. HexStringSplit treats

                      keys as hexadecimal ASCII, and UniformSplit treats

                      keys as arbitrary bytes.

 -c         Create a new table with a pre-split number of

                          regions

 -D       Override HBase Configuration Settings

 -f    Column Families to create with new table.

                          Required with -c

    --firstrow       First Row in Table for Split Algorithm

 -h                       Print this usage help

    --lastrow        Last Row in Table for Split Algorithm

 -o                Max outstanding splits that have unfinished

                          major compactions

 -r                       Perform a rolling split of an existing region

    --risky               Skip verification steps to complete

                          quickly.STRONGLY DISCOURAGED for production

                          systems.

[root@y3 conf]#

例如:

hbase org.apache.hadoop.hbase.util.RegionSplitter -c 10 test -f info

 

 

 

      1. 负载均衡

默认master负载均衡是5分钟执行一次,通过hbase-site.xml中设置hbase.balancer.period

设置banlancer上限hbase.balancer.max.balancing

 

合并region:

[root@y3 conf]# hbase org.apache.hadoop.hbase.util.Merge

For hadoop 0.21+, Usage: bin/hbase org.apache.hadoop.hbase.util.Merge [-Dfs.defaultFS=hdfs://nn:port]

 

[root@y3 conf]#

 

查询并存储信息:

scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}

Hbase性能优化_第3张图片

 

执行合并region:

Hbase性能优化_第4张图片

 

 

 

      1. 配置优化

 

1、减少zk超时

设置region和zk链接超时时间,默认是3分钟,可以设置小一点,master就能快速发现故障

zookeeper.session.timeout

 

2、增加处理线程

hbase.regionserver.handler.count: 响应外部用户访问数据表请求线程数。默认10个线程。

 

3、增加堆大小

hbase-env.sh中设置HBASE_HEAPSIZE值

4、启用压缩算法

5、增加region大小

hbase.hregion.max.filesize ,默认region大小256MB

6、设置缓存块大小

perf.hfile.block.cache.size 值为百分比,默认是20%,默认占用堆内存空间60%。

7、调整memstore限制

hbase.regionserver.global.memstore.lowerLimt 值为百分比,默认是35%,设置为0.35

hbase.regionserver.global.memstore.upperLimt 值为百分比,默认是40%,设置为0.4

将上下限设置接近,用于控制服务器清空memstore是,防止过度刷新

 

8、增加阻塞时存储文件数目

hbase.hstore.blockingStoreFiles,默认是7, 设置当存储文件达到指定值时,put/delete/modify阻塞,给合并文件留出时间减少文件数目。

hbase.hregion.memstore.block.multiplier,增加阻塞倍率,默认值2,用于阻塞客户端更新数据请求安全阀门。当memstore达到属性multiplier*flush的大小限制时会阻塞更新

9、减少最大日志文件限制

hbase.regionserver.maxlogs 控制磁盘wal文件数,控制写日志频率。默认值32

 

 

命令行vm设置:

$ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \

  -XX:+PrintGCDetails -Xloggc:$HBASE_HOME/logs/gc-hbase.log" ./bin/hbase shell

 

 

 

    1. Hbase集群管理

 

      1. 节点任务

 

减少节点:

./bin/hbase-deamon.sh  stop regionserver

./bin/hbase-deamon.sh  start master

./bin/hbase-deamon.sh  start master --backup #备用master

 

禁用负载均衡:

shell命令行执行:

balance_switch false

启用负载均衡

balance_switch true

 

 

 

      1. 导入导出工具

 

导入导出:

Hbase性能优化_第5张图片

Hbase性能优化_第6张图片

例如:

hadoop jar $HBASE_HOME/hbase-0.91-SNAPSEHOT.jar import 表名称 输出数据存储路径

hadoop jar $HBASE_HOME/hbase-0.91-SNAPSEHOT.jar import test /user/test-backup

 

 

 

 

CopyTable工具:

Hbase性能优化_第7张图片

例如:

hadoop jar $HBASE_HOME/hbase-0.91-SNAPSEHOT.jar copytable --new.name=新表名称 原表名称

hadoop jar $HBASE_HOME/hbase-0.91-SNAPSEHOT.jar copytable --new.name=test2 test

 

 

批量导入:

importtsv.bulk.output 设置使用hfileOutPutFormat生成文件

 

 

 

复制:

在hbase-site.xml中设置如下:

Hbase性能优化_第8张图片

开启复制。

Hbase性能优化_第9张图片

Hbase性能优化_第10张图片

 

 

停止复制:

 

 

验证复制数据正确性:

Hbase性能优化_第11张图片

 

      1. Hbase服务端口

Hbase端口:

Hbase性能优化_第12张图片

 

 

 

      1. 故障检测

 

故障处理:

[root@y3 hbase]#

[root@y3 hbase]# hbase hbck -h

18/08/09 04:48:49 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS

Usage: fsck [opts] {only tables}

 where [opts] are:

   -help Display help options (this)

   -details Display full report of all regions.

   -timelag   Process only regions that  have not experienced any metadata updates in the last  seconds.

   -sleepBeforeRerun Sleep this many seconds before checking if the fix worked if run with -fix

   -summary Print only summary of the tables and status.

   -metaonly Only check the state of the hbase:meta table.

   -sidelineDir HDFS path to backup existing meta.

   -boundaries Verify that regions boundaries are the same between META and store files.

   -exclusive Abort if another hbck is exclusive or fixing.

   -disableBalancer Disable the load balancer.

 

  Metadata Repair options: (expert features, use with caution!)

   -fix              Try to fix region assignments.  This is for backwards compatiblity

   -fixAssignments   Try to fix region assignments.  Replaces the old -fix

   -fixMeta          Try to fix meta problems.  This assumes HDFS region info is good.

   -noHdfsChecking   Don't load/check region info from HDFS. Assumes hbase:meta region info is good. Won't check/fix any HDFS issue, e.g. hole, orphan, or overlap

   -fixHdfsHoles     Try to fix region holes in hdfs.

   -fixHdfsOrphans   Try to fix region dirs with no .regioninfo file in hdfs

   -fixTableOrphans  Try to fix table dirs with no .tableinfo file in hdfs (online mode only)

   -fixHdfsOverlaps  Try to fix region overlaps in hdfs.

   -fixVersionFile   Try to fix missing hbase.version file in hdfs.

   -maxMerge      When fixing region overlaps, allow at most regions to merge. (n=5 by default)

   -sidelineBigOverlaps  When fixing region overlaps, allow to sideline big overlaps

   -maxOverlapsToSideline   When fixing region overlaps, allow at most regions to sideline per group. (n=2 by default)

   -fixSplitParents  Try to force offline split parents to be online.

   -removeParents    Try to offline and sideline lingering parents and keep daughter regions.

   -ignorePreCheckPermission  ignore filesystem permission pre-check

   -fixReferenceFiles  Try to offline lingering reference store files

   -fixEmptyMetaCells  Try to fix hbase:meta entries not referencing any region (empty REGIONINFO_QUALIFIER rows)

 

  Datafile Repair options: (expert features, use with caution!)

   -checkCorruptHFiles     Check all Hfiles by opening them to make sure they are valid

   -sidelineCorruptHFiles  Quarantine corrupted HFiles.  implies -checkCorruptHFiles

 

  Metadata Repair shortcuts

   -repair           Shortcut for -fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps -fixReferenceFiles -fixTableLocks -fixOrphanedTableZnodes

   -repairHoles      Shortcut for -fixAssignments -fixMeta -fixHdfsHoles

 

  Table lock options

   -fixTableLocks    Deletes table locks held for a long time (hbase.table.lock.expire.ms, 10min by default)

 

  Table Znode options

   -fixOrphanedTableZnodes    Set table state in ZNode to disabled if table does not exists

 

 Replication options

   -fixReplication   Deletes replication queues for removed peers

 

You have new mail in /var/spool/mail/root

[root@y3 hbase]#

 

 

      1. 日志级别

 

日志级别:

Hbase性能优化_第13张图片

 

 

      1. 常见问题

 

查询文件句柄:

[root@y3 hbase]# ulimit -n

1024

[root@y3 hbase]#

检查ulimit设置

[root@y3 hbase]# cat /proc//limits

 

 

查看交换分区使用:

[root@y3 hbase]# vmstat 20

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 0  0      0 7657760 229368 11115556    0    0     0    44    4    4  3  1 96  0  0

^C

[root@y3 hbase]#

[root@y3 hbase]# free -m

             total       used       free     shared    buffers     cached

Mem:         32008      24532       7476        237        223      10857

 

-/+ buffers/cache:      13451      18557

Swap:        16071          0      16071

[root@y3 hbase]#

 

/proc/sys/vm/swappiness设置内核swappiness的值为5或者10,防止总内存小于可用内存时使用交换分区

 

 

 

你可能感兴趣的:(hbase,大数据-hadoop)