Hbase 优化参数

在Hbase使用中,除了进行预分区,rowkey合理的设计外,平时也会对系统的内置参数进行优化

1、 堆内存的优化

HBase-site.xml

 <!-- regionServer的全局memstore的大小,超过该大小会触发flush到磁盘的操作,默认是堆大小的40%,而且regionserver级别的
        flush会阻塞客户端读写 -->
    <property>
        <name>hbase.regionserver.global.memstore.size</name>
        <value></value>
        <description>Maximum size of all memstores in a region server before
            new
            updates are blocked and flushes are forced. Defaults to 40% of heap (0.4).
            Updates are blocked and flushes are forced until size of all
            memstores
            in a region server hits
            hbase.regionserver.global.memstore.size.lower.limit.
            The default value in this configuration has been intentionally left
            emtpy in order to
            honor the old hbase.regionserver.global.memstore.upperLimit property if
            present.
        </description>
    </property>  

    <!--可以理解为一个安全的设置,有时候集群的“写负载”非常高,写入量一直超过flush的量,这时,我们就希望memstore不要超过一定的安全设置。
        在这种情况下,写操作就要被阻塞一直到memstore恢复到一个“可管理”的大小, 这个大小就是默认值是堆大小 * 0.4 * 0.95,也就是当regionserver级别
        的flush操作发送后,会阻塞客户端写,一直阻塞到整个regionserver级别的memstore的大小为 堆大小 * 0.4 *0.95为止 -->
    <property>
        <name>hbase.regionserver.global.memstore.size.lower.limit</name>
        <value></value>
        <description>Maximum size of all memstores in a region server before
            flushes are forced.
            Defaults to 95% of hbase.regionserver.global.memstore.size (0.95).
            A 100% value for this value causes the minimum possible flushing to
            occur when updates are
            blocked due to memstore limiting.
            The default value in this configuration has been intentionally left
            emtpy in order to
            honor the old hbase.regionserver.global.memstore.lowerLimit property if
            present.
        </description>
    </property>

这个参数并不是越大越好,因为内存如果设置得很大,当数据量一旦积压到阻塞条件,要想刷写到恢复正常的数据量(堆大小 * 0.4 * 0.95)也会加大,这样一来阻塞的时间就会加长

2、优化DataNode允许的最大文件打开数

hdfs-site.xml

<!--  HBase一般都会同一时间操作大量的文件,根据集群的数量和规模以及数据动作,设置为4096或者更高。-->
<property>
  <name>dfs.datanode.max.transfer.threads</name>
  <value>4096</value>
  <description>
        Specifies the maximum number of threads to use for transferring data
        in and out of the DN.
  </description>
</property>

3、优化延迟高的数据操作的等待时间

hdfs-site.xml

<!--如果对于某一次数据操作来讲,延迟非常高,socket需要等待更长的时间,建议把该值设置为更大的值(默认60000毫秒),以确保socket不会被timeout掉。 -->
<property>
  <name>dfs.image.transfer.timeout</name>
  <value>60000</value>
  <description>
        Socket timeout for image transfer in milliseconds. This timeout and the related
        dfs.image.transfer.bandwidthPerSec parameter should be configured such
        that normal image transfer can complete successfully.
        This timeout prevents client hangs when the sender fails during
        image transfer. This is socket timeout during image transfer.
  </description>
</property>

4、优化数据的写入效率(即开启压缩)

mapred-site.xml

<property>
  <name>mapreduce.map.output.compress</name>
  <value>false</value>
  <description>Should the outputs of the maps be compressed before being
               sent across the network. Uses SequenceFile compression.
  </description>
</property>

<property>
  <name>mapreduce.map.output.compress.codec</name>
  <value>org.apache.hadoop.io.compress.DefaultCodec</value>
  <description>If the map outputs are compressed, how should they be
               compressed?
  </description>
</property>

5、设置RPC监听数量

hbase-site.xml

<!-- regionServer端默认开启的RPC监控实例数,也即RegionServer能够处理的IO请求线程数
        当客户端过多或者读写请求过多时,可增加该值-->
    <property>
        <name>hbase.regionserver.handler.count</name>
        <value>30</value>
        <description>Count of RPC Listener instances spun up on RegionServers.
            Same property is used by the Master for count of master handlers.
        </description>
    </property> 

6、优化HStore文件大小

hbase-site.xml

<!--HStoreFile最大的大小,当某个region的某个列族超过这个大小会进行region拆分
        如果需要运行HBase的MR任务,可以减小此值,因为一个region对应一个map任务,如果单个region过大,会导致map任务执行时间过长。-->
    <property>
        <name>hbase.hregion.max.filesize</name>
        <value>10737418240</value>
        <description>
            Maximum HStoreFile size. If any one of a column families‘ HStoreFiles has
            grown to exceed this value, the hosting HRegion is split in two.
        </description>
    </property> 

7、增大读缓存,写缓存

hbase-site.xml

 <!-- hbase客户端每次 写缓冲的大小(也就是客户端批量提交到server端),这块大小会同时占用客户端和服务端,缓冲区更大可以减少RPC次数,但是更大意味着内存占用更多 -->
    <property>
        <name>hbase.client.write.buffer</name>
        <value>2097152</value>
        <description>Default size of the HTable client write buffer in bytes.
            A bigger buffer takes more memory -- on both the client and server
            side since server instantiates the passed write buffer to process
            it -- but a larger buffer size reduces the number of RPCs made.
            For an estimate of server-side memory-used, evaluate
            hbase.client.write.buffer * hbase.regionserver.handler.count
        </description>
    </property>
<!-- 在执行hbase scan操作的时候,客户端缓存的行数,设置小意味着更多的rpc次数,设置大比较吃内存 -->
    <property>
        <name>hbase.client.scanner.caching</name>
        <value>2147483647</value>
        <description>Number of rows that we try to fetch when calling next
            on a scanner if it is not served from (local, client) memory. This
            configuration
            works together with hbase.client.scanner.max.result.size to try and use
            the
            network efficiently. The default value is Integer.MAX_VALUE by default so
            that
            the network will fill the chunk size defined by
            hbase.client.scanner.max.result.size
            rather than be limited by a particular number of rows since the size of
            rows varies
            table to table. If you know ahead of time that you will not require more
            than a certain
            number of rows from a scan, this configuration should be set to that row
            limit via
            Scan#setCaching. Higher caching values will enable faster scanners but will eat up
            more
            memory and some calls of next may take longer and longer times when the
            cache is empty.
            Do not set this value such that the time between invocations is greater
            than the scanner
            timeout; i.e. hbase.client.scanner.timeout.period
        </description>
    </property> 

原文地址:https://www.cnblogs.com/yangxusun9/p/12546048.html

时间: 2024-10-04 05:04:21

Hbase 优化参数的相关文章

网易视频云:HBase优化实战

网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台.现在,网易视频云的技术专家给大家分享一则技术文:HBase优化实战. 背景 Datastream一直以来在使用HBase分流日志,每天的数据量很大,日均大概在80亿条,10TB的数据.对于像Datastream这种数据量巨大.对写入要求

MySql常用命令--优化参数以及日常管理

显示插入查询的优化参数: show variables like "concurrent_insert"; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | concurrent_insert | AUTO | +-------------------+-------+ set GLOBAL concurrent_insert=2; 插入数据时MySQL会对插入

模拟优化参数optimizer_switch选项mrr(Multi_Range Read)对查询优化的影响

11.1背景:模拟优化参数optimizer_switch选项mrr(Multi_Range Read)对查询优化的影响 11.2建表语句 mysql> show create table order_line\G; *************************** 1. row *************************** Table: order_line Create Table: CREATE TABLE `order_line` ( `ol_o_id` int(11)

Spark 读取 Hbase 优化 --手动划分 region 提高并行数

一. Hbase 的 region 我们先简单介绍下 Hbase 的 架构和 region : 从物理集群的角度看,Hbase 集群中,由一个 Hmaster 管理多个 HRegionServer,其中每个 HRegionServer 都对应一台物理机器,一台 HRegionServer 服务器上又可以有多个 Hregion(以下简称 region).要读取一个数据的时候,首先要先找到存放这个数据的 region.而 Spark 在读取 Hbase 的时候,读取的 Rdd 会根据 Hbase 的

Hbase&#173;优化方案

1.预分区设计 真正存储数据的是region要维护一个区间段的rowkey startRow~endRowkey ->手动设置预分区 create 'user_p','info','partition',SPLITS => ['101','102','103','104'] 存在-∞ +∞ 第一个分区 -∞ ~ 101 第二个分区 101~102 第三个分区 102~103 第四个分区 103~104 第五个分区 104 ~ +∞ ->生成16进制序列预分区 create 'user_p

php-fpm优化参数介绍

1.php-fpm优化参数介绍他们分别是:pm.pm.max_children.pm.start_servers.pm.min_spare_servers.pm.max_spare_servers. pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态).在更老一些的版本中,dynamic被称作apache-like.这个要注意看配置文件的说明. 下面4个参数的意思分别为: pm.max_children:静态方式下开启的php-fpm进程数量pm.star

HBase优化实战

本文来自网易云社区. 背景 Datastream一直以来在使用HBase分流日志,每天的数据量很大,日均大概在80亿条,10TB的数据.对于像Datastream这种数据量巨大.对写入要求非常高,并且没有复杂查询需求的日志系统来说,选用HBase作为其数据存储平台,无疑是一个非常不错的选择. HBase是一个相对较复杂的分布式系统,并发写入的性能非常高.然而,分布式系统从结构上来讲,也相对较复杂,模块繁多,各个模块之间也很容易出现一些问题,所以对像HBase这样的大型分布式系统来说,优化系统运行

hbase优化方向说明

如何对hbase用的好,怎么定义把hbase用的好?在保证系统稳定性.可用性的基础上能够用最少的系统资源(CPU,IO等)获得最好的性能(吞吐量,读写延迟)就是'用的好'.优化方向为:(1)HDFS相关配置优化,(2)HBase服务器端优化(GC优化.Compaction优化.硬件配置优化),(3)列族设计优化,(4)客户端优化等,其中第四点(4)客户端优化在前面已经通过超时机制.重试机制讲过,参考链接为:HBase客户端Rpc的重试机制以及客户端参数优化.:https://blog.51cto

Hbase优化总结

1.JVM参数优化: –Xmn=12G –Xms=24G  -Xmx=24G  根据实际机器情况调整,一般为整个机器内存的一半,同时建议regionServer的堆内存建议不要超过32G ; -XX:PermSize=512M -XX:MaxPermSize=512M; -XX:+UseConcMarkSweepGC -XX:+UseParNewGC (建议使用CMS垃圾收集器, 其它JVM参数使用默认比较好) 2.HBase客户端使用优化: 用表池或创建多个客户端,适当提高HBase客户端写入