大数据性能调优总结

本文档详细介绍了大数据集群的性能调优,涵盖HBase、HDFS、Hive、Kafka、MapReduce、Solr、Spark和Storm等多个组件。调优内容包括配置原则、Manager服务参数优化、HBase的BulkLoad效率提升、实时读写性能优化、JVM参数调整以及YARN的容器重用和任务抢占等,旨在提升整个集群的运行效率和数据处理性能。
摘要由CSDN通过智能技术生成

 

目录

12.1 配置原则

如何发挥集群最佳性能

影响性能的因素

12.2 Manager

12.2.1 提升Manager配置服务参数的效率

12.2.2 根据集群节点数优化Manager配置

12.3 HBase

12.3.1 提升BulkLoad效率

12.3.2 提升连续put场景性能

12.3.3 Put和Scan性能综合调优

12.3.4 提升实时写数据效率

12.3.5 提升实时读数据效率

12.3.6 JVM参数优化

12.4 HDFS

12.4.1 提升写性能

12.4.2 JVM参数优化

12.4.3 使用客户端元数据缓存提高读取性能

12.4.4 使用当前活动缓存提升客户端与NameNode的连接性能

12.5 Hive

12.5.1 建立表分区

12.5.2 Join优化

12.5.3 Group By优化

12.5.4 数据存储优化

12.5.5 SQL优化

12.5.6 使用Hive CBO优化查询

12.6 Kafka

12.6.1 Kafka性能调优

12.7 MapReduce

12.7.1 多CPU内核下的调优配置

12.7.2 确定Job基线

12.7.3 Shuffle调优

12.7.4 大任务的AM调优

12.7.5 推测执行

12.7.6 通过“Slow Start”调优

12.7.7 MR job commit阶段优化

12.8 Solr

12.8.1 索引集分片划分建议

12.8.2 Solr公共读写调优建议

12.8.3 Solr over HBase调优建议

12.8.4 Solr over HDFS调优建议

12.9 Spark

12.9.1 Spark Core调优

12.9.2 SQL和DataFrame调优

12.9.3 Spark Streaming调优

12.9.4 Spark CBO调优

12.9.5 Carbon性能调优

12.10 Storm

12.10.1 Storm性能调优

12.11 YARN

12.11.1 通过容器可重用性提高任务的完成效率

12.11.2 抢占任务

12.11.3 任务优先级

12.11.4 节点配置调优

12.11.5 JVM参数优化


12.1 配置原则

如何发挥集群最佳性能

原则1:CPU核数分配原则

  • 数据节点:建议预留2~4个核给OS和其他进程(数据库,HBase等)外,其他的核分配给YARN。
  • 控制节点:由于运行的进程较多,建议预留6~8个核。

原则2:内存分配

除了分配给OS、其他服务的内存外,剩余的资源应尽量分配给YARN。

原则3:虚拟CPU个数分配

节点上YARN可使用的虚拟CPU个数建议配置为逻辑核数的1.5~2倍之间。如果上层计算应用对CPU的计算能力要求不高,可以配置为2倍的逻辑CPU。

原则4:提高磁盘IO吞吐率

尽可能挂载较多的盘,以提高磁盘IO吞吐率。

影响性能的因素

因素1:文件服务器磁盘I/O

一般磁盘顺序读写的速度为百兆级别,如第二代SATA盘顺序读的理论速度为300Mbps,只从一个盘里读,若想达到1Gbps每秒的导入速度是不可能的。并且若从一个磁盘读,单纯依靠增加map数来提高导入速率也不一定可以。因为随着map数变多,对于一个磁盘里的文件读,相当由顺序读变成了随机读,map数越多,磁盘读取文件的随机性越强,读取性能反而越差。如随机读最差可变成800Kbps。 因此需要想办法增大文件服务器的磁盘IO读效率,可以使用专业的文件服务器,如NAS系统,或者使用更简单的方法,把多个磁盘进行Raid0或者Raid5。

因素2:文件服务器网络带宽

单个文件服务器的网络带宽越大越好,建议在10000Mb/s以上。

因素3:集群节点硬件配置

集群节点硬件配置越高,如CPU核数和内存都很多,可以增大同时运行的map或reduce个数,如果单个节点硬件配置难以提升,可以增加集群节点数。

因素4:SFTP参数配置

不使用压缩、加密算法优先选择aes128-cbc,完整性校验算法优先选择umac-64@openssh.com

因素5:集群参数配置

因素6:Linux文件预读值

设置磁盘文件预读值大小为16384,使用linux命令:

echo 16384 > /sys/block/sda/queue/read_ahead_kb

 说明:

sda表示当前磁盘的磁盘名。

12.2 Manager

 

12.2.1 提升Manager配置服务参数的效率

操作场景

在安装集群或者扩容节点以后,集群中可能添加了较多数量的节点。此时如果系统管理员在FusionInsight Manager上修改服务参数、保存新配置并重启服务时,Manager的Controller进程可能占用大量内存,增加了CPU工作负荷,用户需要等待一段时间才能完成参数修改。系统管理员可以根据实际业务使用情况,手动增加Controller的JVM启动参数中内存参数,提升配置服务参数的效率。

对系统的影响

该操作需要在主管理节点重新启动Controller,重启期间会造成FusionInsight Manager暂时中断。备管理节点Controller无需重启。

前提条件

已确认主备管理节点IP。

操作步骤

  1. 使用PuTTY,以omm用户登录主管理节点。
  2. 执行以下命令,切换目录。

     

    cd ${BIGDATA_HOME}/om-server/om/sbin

     

  3. 执行以下命令修改Controller启动参数文件“controller.sh”,并保存退出。

     

    vi controller.sh

    修改配置项“JAVA_HEAP_MAX”的参数值。例如,集群中包含了400个以上的节点,建议修改如下,表示Controller最大可使用8GB内存:

    JAVA_HEAP_MAX=-Xmx8192m

     

  4. 执行以下命令,重新启动Controller。

     

    sh ${BIGDATA_HOME}/om-server/om/sbin/restart-controller.sh

    提示以下信息表示命令执行成功:

    End into start-controller.sh

    执行sh ${BIGDATA_HOME}/om-server/om/sbin/status-oms.sh,查看Controller的“ResHAStatus”是否为“Normal”,并可以重新登录FusionInsight Manager表示重启成功。

     

  5. 使用PuTTY,以omm用户登录备管理节点,并重复步骤 2步骤 3

12.2.2 根据集群节点数优化Manager配置

操作场景

FusionInsight集群规模不同时,Manager相关参数差异较大。在集群容量调整前或者安装集群时,用户可以手动指定Manager集群节点数,系统将自动调整相关进程参数。

 说明:

在安装集群时,可以通过Manager安装配置文件中的“cluster_nodes_scale”参数指定集群节点数。

操作步骤

  1. 使用PuTTY,以omm用户登录主管理节点。
  2. 执行以下命令,切换目录。

     

    cd ${BIGDATA_HOME}/om-server/om/sbin

     

  3. 执行以下命令查看当前集群Manager相关配置。

     

    sh oms_config_info.sh -q

     

  4. 执行以下命令指定当前集群的节点数。

     

    命令格式:sh oms_config_info.sh -s 节点数

    例如:

    sh oms_config_info.sh -s 10

    根据界面提示,输入“y”:

    The following configurations will be modified:
         Module              Parameter                            Current                         Target                  
         Controller          controller.Xmx                       4096m                      =>   8192m                    
         Controller          controller.Xms                       1024m                      =>   2048m                   
         ...
    Do you really want to do this operation? (y/n):

    界面提示以下信息表示配置更新成功:

    ...
    Operation has been completed. Now restarting OMS server.                  [done]
    Restarted oms server successfully.
     说明:
    • 配置更新过程中,OMS会自动重启。
    • 相近数量的节点规模对应的Manager相关配置是通用的,例如100节点变为101节点,并没有新的配置项需要刷新。

     

12.3 HBase

12.3.1 提升BulkLoad效率

操作场景

批量加载功能采用了MapReduce jobs直接生成符合HBase内部数据格式的文件,然后把生成的StoreFiles文件加载到正在运行的集群。使用批量加载相比直接使用HBase的API会节约更多的CPU和网络资源。

ImportTSV是一个HBase的表数据加载工具。

前提条件

在执行批量加载时需要通过“Dimporttsv.bulk.output”参数指定文件的输出路径。

操作步骤

参数入口:执行批量加载任务时,在BulkLoad命令行中加入如下参数。

表12-1 增强BulkLoad效率的配置项

参数

描述

配置的值

-Dimporttsv.mapper.class

用户自定义mapper通过把键值对的构造从mapper移动到reducer以帮助提高性能。mapper只需要把每一行的原始文本发送给reducer,reducer解析每一行的每一条记录并创建键值对。

说明:

当该值配置为“org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper”时,只在执行没有HBASE_CELL_VISIBILITY OR HBASE_CELL_TTL选项的批量加载命令时使用。使用“org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper”时可以得到更好的性能。

org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper

org.apache.hadoop.hbase.mapreduce.TsvImporterTextMapper

12.3.2 提升连续put场景性能

操作场景

对大批量、连续put的场景,配置下面的两个参数为“false”时能大量提升性能。

  • “hbase.regionserver.wal.durable.sync”
  • “hbase.regionserver.hfile.durable.sync”

当提升性能时,缺点是对于DataNode(默认是3个)同时故障时,存在小概率数据丢失的现象。对数据可靠性要求高的场景请慎重配置。

操作步骤

参数入口:

在FusionInsight Manager系统中,选择“服务管理 > HBase > 服务配置”,“参数类别”类型设置为“全部配置”。在搜索框中输入参数名称。

表12-2 提升连续put场景性能的参数

参数

描述

默认值

hbase.regionserver.wal.durable.sync

每一条wal是否持久化到硬盘。

true

hbase.regionserver.hfile.durable.sync

hfile写是否立即持久化到硬盘。

true

12.3.3 Put和Scan性能综合调优

操作场景

HBase有很多与读写性能相关的配置参数。读写请求负载不同的情况下,配置参数需要进行相应的调整,本章节旨在指导用户通过修改RegionServer配置参数进行读写性能调优。

操作步骤

  • JVM GC参数

    RegionServer GC_OPTS参数设置建议:

    • -Xms与-Xmx设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能,可以参考参数“hfile.block.cache.size”(见表12-4)和参数“hbase.regionserver.global.memstore.size”(见表12-3)的介绍进行设置。
    • -XX:NewSize与-XX:MaxNewSize设置相同值,建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”。
    • -XX:CMSInitiatingOccupancyFraction建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过90。
    • -XX:MaxDirectMemorySize表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”。
  • Put相关参数

    RegionServer处理put请求的数据,会将数据写入memstore和hlog,

    • 当memstore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,memstore就会刷新到HDFS生成HFile。
    • 当当前region的列簇的HFile数量达到“hbase.hstore.compaction.min”参数值时会触发compaction。
    • 当当前region的列簇HFile数达到“hbase.hstore.blockingStoreFiles”参数值时会阻塞memstore刷新生成HFile的操作,导致put请求阻塞。
    表12-3 Put相关参数

    参数

    描述

    默认值

    hbase.regionserver.wal.durable.sync

    每一条wal是否持久化到硬盘。

    参考提升连续put场景性能

    true

    hbase.regionserver.hfile.durable.sync

    hfile写是否立即持久化到硬盘。

    参考提升连续put场景性能

    true

    hbase.hregion.memstore.flush.size

    建议设置为HDFS块大小的整数倍,在内存足够put负载大情况下可以调整增大。单位:字节。

    134217728

    hbase.regionserver.global.memstore.size

    建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。

    0.4

    hbase.hstore.flusher.count

    memstore的flush线程数,在put高负载场景下可以适当调大。

    2

    hbase.regionserver.thread.compaction.small

    HFile compaction线程数,在put高负载情况下可以适当调大。

    10

    hbase.hstore.blockingStoreFiles

    当列簇的HFile数达到该阈值,阻塞该region的所有操作,直到compcation完成,在put高负载场景下可以适当调大。

    15

  • Scan相关参数表12-4 Scan相关参数

    参数

    描述

    默认值

    hbase.client.scanner.timeout.period

    客户端和RegionServer端参数,表示scan租约的时间,建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。

    60000

    hfile.block.cache.size

    数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能。默认值为“0.25”,表示使用RegionServer GC -Xmx的25%。

    0.25

  • Handler相关参数表12-5 Handler相关参数

    参数

    描述

    默认值

    hbase.regionserver.handler.count

    RegionServer上的RPC服务器实例数,建议设置为200 ~ 400之间。

    200

    hbase.regionserver.metahandler.count

    RegionServer中处理优先请求的程序实例的数量,建议设置为200 ~ 400之间。

    100

12.3.4 提升实时写数据效率

操作场景

需要把数据实时写入到HBase中或者对于大批量、连续put的场景。

前提条件

调用HBase的put或delete接口,把数据保存到HBase中。

操作步骤

  • 写数据服务端调优

    参数入口:

    在FusionInsight Manager系统中,选择“服务管理 > HBase > 服务配置”,“参数类别”类型设置为“全部配置”。在搜索框中输入参数名称。

    表12-6 影响实时写数据配置项

    配置参数

    描述

    默认值

    hbase.regionserver.wal.durable.sync

    控制HLog文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。

    把该值设置为false比true在写入性能上会更优。

    true

    hbase.regionserver.hfile.durable.sync

    控制HFile文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。

    把该值设置为false比true在写入性能上会更优。

    true

    GC_OPTS

    HBase利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。GC_OPTS主要需要调整HeapSize的大小和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/9。

    • HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。
    • RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。
    说明:

    主HMaster的HeapSize为4G的时候,HBase集群可以支持100000Region数的规模。根据经验值,单个RegionServer的HeapSize不建议超过20GB。

    • HMaster:

      -Xms2G -Xmx2G -XX:NewSize=256M -XX:MaxNewSize=256M

    • RegionServer:

      -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M

    hbase.regionserver.handler.count

    表示RegionServer在同一时刻能够并发处理多少请求。如果设置过高会导致激烈线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。根据资源情况,适当增加处理线程数。

    建议根据CPU的使用情况,可以选择设置为100至300之间的值。

    200

    hbase.hregion.max.filesize

    表示HBase中Region的文件总大小的最大值。当Region中的文件大于该参数时,将会导致Region分裂。 该参数设置过小时,可能会导致Split操作过于频繁。当设置过大时,可能导致Compact需要处理的文件大小增加,影响Compact执行效率。

    10737418240(单位:字节)

    hbase.hregion.memstore.flush.size

    在RegionServer中,当写操作内存中存在超过memstore.flush.size大小的memstore,则MemStoreFlusher就启动flush操作将该memstore以hfile的形式写入对应的store中。

    如果RegionServer的内存充足,而且活跃Region数量也不是很多的时候,可以适当增大该值,可以减少compaction的次数,有助于提升系统性能。

    同时,这种flush产生的时候,并不是紧急的flush,flush操作可能会有一定延迟,在延迟期间,写操作还可以进行,Memstore还会继续增大,最大值为“memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”。当超过最大值时,将会阻塞操作。适当增大“hbase.hregion.memstore.block.multiplier”可以减少阻塞,减少性能波动。

    134217728(单位:字节)

    hbase.regionserver.global.memstore.size

    RegionServer中,负责flush操作的是MemStoreFlusher线程。该线程定期检查写操作内存,当写操作占用内存总量达到阈值,MemStoreFlusher将启动flush操作,按照从大到小的顺序,flush若干相对较大的memstore,直到所占用内存小于阈值。

    阈值 = “hbase.regionserver.global.memstore.size” * “hbase.regionserver.global.memstore.size.lower.limit” * “HBase_HEAPSIZE”

    说明:

    该配置与“hfile.block.cache.size”的和不能超过0.8,也就是写和读操作的内存不能超过HeapSize的80%,这样可以保证除读和写外其它操作的正常运行。

    0.4

    hbase.hstore.blockingStoreFiles

    在region flush前首先判断file文件个数,是否大于hbase.hstore.blockingStoreFiles。

    如果大于需要先compaction并且让flush延时90s(这个值可以通过hbase.hstore.blockingWaitTime进行配置),在延时过程中,将会继续写从而使得Memstore还会继续增大超过最大值 “memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”,导致写操作阻塞。当完成compaction后,可能就会产生大量写入。这样就导致性能激烈震荡。

    增加hbase.hstore.blockingStoreFiles,可以减低BLOCK几率。

    15

    hbase.regionserver.thread.compaction.throttle

    控制一次Minor Compaction时,进行compaction的文件总大小的阈值。Compaction时的文件总大小会影响这一次compaction的执行时间,如果太大,可能会阻塞其它的compaction或flush操作。

    1610612736(单位:字节)

    hbase.hstore.compaction.min

    当一个Store中文件超过该值时,会进行compact,适当增大该值,可以减少文件被重复执行compaction。但是如果过大,会导致Store中文件数过多而影响读取的性能。

    6

    hbase.hstore.compaction.max

    控制一次compaction操作时的文件数量的最大值。与“hbase.hstore.compaction.max.size”的作用基本相同,主要是控制一次compaction操作的时间不要太长。

    10

    hbase.hstore.compaction.max.size

    如果一个HFile文件的大小大于该值,那么在Minor Compaction操作中不会选择这个文件进行compaction操作,除非进行Major Compaction操作。

    这个值可以防止较大的HFile参与compaction操作。在禁止Major Compaction后,一个Store中可能存在几个HFile,而不会合并成为一个HFile,这样不会对数据读取造成太大的性能影响。

    9223372036854775807(单位:字节)

    hbase.hregion.majorcompaction

    设置Major Compaction的执行周期。默认值为604800000毫秒。由于执行Major Compaction会占用较多的系统资源,如果正在处于系统繁忙时期,会影响系统的性能。

    如果业务没有较多的更新、删除、回收过期数据空间时,可以把该值设置为0,以禁止Major Compaction。

    如果必须要执行Major Compaction,以回收更多的空间,可以适当增加该值,同时配置参数“hbase.offpeak.end.hour”和“hbase.offpeak.start.hour”以控制Major Compaction发生在业务空闲的时期。

    604800000(单位:毫秒)

    • hbase.regionserver.maxlogs
    • hbase.regionserver.hlog.blocksize
    • 表示一个RegionServer上未进行Flush的Hlog的文件数量的阈值,如果大于该值,RegionServer会强制进行flush操作。
    • 表示每个HLog文件的最大大小。如果HLog文件大小大于该值,就会滚动出一个新的HLog文件,旧的将被禁用并归档。

    这两个参数共同决定了RegionServer中可以存在的未进行Flush的hlog数量。当这个数据量小于MemStore的总大小的时候,会出现由于HLog文件过多而触发的强制flush操作。这个时候可以适当调整这两个参数的大小,以避免出现这种强制flush的情况。

    • 32
    • 134217728(单位:字节)
  • 写数据客户端调优

    写数据时,在场景允许的情况下,最好使用Put List的方式,可以极大的提升写性能。每一次Put的List的长度,需要结合单条Put的大小,以及实际环境的一些参数进行设定。建议在选定之前先做一些基础的测试。

  • 写数据表设计调优表12-7 影响实时写数据相关参数

    配置参数

    描述

    默认值

    COMPRESSION

    配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。

    说明:

    并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。 常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。

    NONE

    BLOCKSIZE

    配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。

    如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。

    65536(单位:字节)

    IN_MEMORY

    配置这个表的数据优先缓存在内存中,这样可以有效提升读取的性能。对于一些小表,而且需要频繁进行读取操作的,可以设置此配置项。

    false

12.3.5 提升实时读数据效率

操作场景

需要读取HBase数据场景。

前提条件

调用HBase的get或scan接口,从HBase中实时读取数据。

操作步骤

  • 读数据服务端调优

    参数入口:

    在FusionInsight Manager系统中,选择“服务管理 > HBase > 服务配置”,“参数类别”类型设置为“全部配置”。在搜索框中输入参数名称。

    表12-8 影响实时写数据配置项

    配置参数

    描述

    默认值

    GC_OPTS

    HBase利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。

    GC_OPTS主要需要调整HeapSize的大小和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/9。

    • HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。
    • RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。
    说明:

    主HMaster的HeapSize为4G的时候,HBase集群可以支持100000Region数的规模。根据经验值,单个RegionServer的HeapSize不建议超过20GB。

    • HMaster:

      -Xms2G -Xmx2G -XX:NewSize=256M -XX:MaxNewSize=256M

    • RegionServer:

      -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M

    hbase.regionserver.handler.count

    表示RegionServer在同一时刻能够并发处理多少请求。如果设置过高会导致激烈线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。根据资源情况,适当增加处理线程数。

    建议根据CPU的使用情况,可以选择设置为100至300之间的值。

    200

    hfile.block.cache.size

    HBase缓存区大小,主要影响查询性能。根据查询模式以及查询记录分布情况来决定缓存区的大小。如果采用随机查询使得缓存区的命中率较低,可以适当降低缓存区大小。

    0.25

     说明:

    如果同时存在读和写的操作,这两种操作的性能会互相影响。如果写入导致的flush和Compaction操作频繁发生,会占用大量的磁盘IO操作,从而影响读取的性能。如果写入导致阻塞较多的Compaction操作,就会出现Region中存在多个HFile的情况,从而影响读取的性能。所以如果读取的性能不理想的时候,也要考虑写入的配置是否合理。

  • 读数据客户端调优

    Scan数据时需要设置caching(一次从服务端读取的记录条数,默认是1),若使用默认值读性能会降到极低。

    当不需要读一条数据所有的列时,需要指定读取的列,以减少网络IO。

    只读取RowKey时,可以为Scan添加一个只读取RowKey的filter(FirstKeyOnlyFilter或KeyOnlyFilter)。

  • 读数据表设计调优表12-9 影响实时读数据相关参数

    配置参数

    描述

    默认值

    COMPRESSION

    配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。

    说明:

    并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。 常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。

    NONE

    BLOCKSIZE

    配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。

    如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。

    65536(单位:字节)

    DATA_BLOCK_ENCODING

    配置HFile中block块的编码方法。当一行数据中存在多列时,一般可以配置为“FAST_DIFF”,可以有效的节省数据存储的空间,从而提供性能。

    NONE

12.3.6 JVM参数优化

操作场景

当集群数据量达到一定规模后,JVM的默认配置将无法满足集群的业务需求,轻则集群变慢,重则集群服务不可用。所以需要根据实际的业务情况进行合理的JVM参数配置,提高集群性能。

操作步骤

参数入口:

HBase角色相关的JVM参数需要配置在“${HBASE_HOME}/conf”目录下的“hbase-env.sh”文件中。

每个角色都有各自的JVM参数配置变量,如表12-10

表12-10 HBase相关JVM参数配置变量

变量名

变量影响的角色

HBASE_OPTS

该变量中设置的参数,将影响HBase的所有角色。

SERVER_GC_OPTS

该变量中设置的参数,将影响HBase Server端的所有角色,例如:Master、RegionServer等。

CLIENT_GC_OPTS

该变量中设置的参数,将影响HBase的Client进程。

HBASE_MASTER_OPTS

该变量中设置的参数,将影响HBase的Master。

HBASE_REGIONSERVER_OPTS

该变量中设置的参数,将影响HBase的RegionServer。

HBASE_THRIFT_OPTS

该变量中设置的参数,将影响HBase的Thrift。

配置方式举例:

export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

12.4 HDFS

12.4.1 提升写性能

操作场景

在HDFS中,通过调整属性的值,使得HDFS集群更适应自身的业务情况,从而提升HDFS的写性能。

操作步骤

参数入口:

在FusionInsight Manager系统中,选择“服务管理 > HDFS > 服务配置”,“参数类别”类型设置为“全部配置”。在搜索框中输入参数名称。

表12-11 HDFS写性能优化配置

参数

描述

默认值

dfs.datanode.drop.cache.behind.reads

设置为true表示丢弃缓存的数据(需要在DataNode中配置)。

当同一份数据,重复读取的次数较少时,建议设置为true,使得缓存能够被其他操作使用。重复读取的次数较多时,设置为false能够提升重复读取的速度。

true

dfs.client-write-packet-size

当HDFS Client往DataNode写数据时,将数据生成一个包。然后将这个包在网络上传出。此参数指定传输数据包的大小,可以通过各Job来指定。单位:字节。

在万兆网部署下,可适当增大该参数值,来提升传输的吞吐量。

262144

12.4.2 JVM参数优化

操作场景

当集群数据量达到一定规模后,JVM的默认配置将无法满足集群的业务需求,轻则集群变慢,重则集群服务不可用。所以需要根据实际的业务情况进行合理的JVM参数配置,提高集群性能。

操作步骤

参数入口:

HDFS角色相关的JVM参数需要配置在“${HADOOP_HOME}/etc/hadoop”目录下的“hadoop-env.sh”文件中。

JVM各参数的含义请参见其官网:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

每个角色都有各自的JVM参数配置变量,如表12-12

表12-12 HDFS相关JVM参数配置变量

变量名

变量影响的角色

HADOOP_OPTS

该变量中设置的参数,将影响HDFS的所有角色。

HADOOP_NAMENODE_OPTS

该变量中设置的参数,将影响HDFS的NameNode。

HADOOP_DATANODE_OPTS

该变量中设置的参数,将影响HDFS的DataNode。

HADOOP_JOURNALNODE_OPTS

该变量中设置的参数,将影响HDF

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值