2021年大数据HBase(十七):❤️HBase的360度全面调优❤️

IT知识
321
0
0
2022-10-08
标签   HBase

🐇HBase的360度全面调优🐇

一、⚡️通用调优⚡️

1) NameNode的元数据备份使用SSD

2)  定时备份NameNode上的元数据     每小时或者每天备份,如果数据极其重要,可以5~10分钟备份一次。

备份可以通过定时任务复制元数据目录即可。

3)为NameNode指定多个元数据目录

     使用dfs.name.dir或者dfs.namenode.name.dir指定。一个指定本地磁盘,一个指定网络磁盘。这样可以提供元数据的冗余和健壮性,以免发生故障。

    设置dfs.namenode.name.dir.restore为true,允许尝试恢复之前失败的dfs.namenode.name.dir目录,在创建checkpoint时做此尝试,如果设置了多个磁盘,建议允许。

4) NameNode节点配置为RAID1(镜像盘)结构

5) 保持NameNode日志目录有足够的空间,有助于帮助发现问题。

6) Hadoop是IO密集型框架,所以尽量提升存储的速度和吞吐

img

二、☀️Linux调优☀️

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

$ sudo blockdev --setra 32768 /dev/sda   (尖叫提示:ra是readahead的缩写)

2) 最大限度使用物理内存

 $ sudo sysctl -w vm.swappiness=0

swappiness,Linux内核参数,控制换出运行时内存的相对权重

swappiness参数值可设置范围在0到100之间,低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间

默认值为60(当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)

对于大多数操作系统,设置为100可能会影响整体性能,而设置为更低值(甚至为0)则可能减少响应延迟

3) 调整ulimit上限, 默认值为比较小的数字

$ ulimit -n 查看允许最大进程数      

$ ulimit -u 查看允许打开最大文件数

4)开启集群的时间同步NTP

三、☔️HDFS调优☔️

1) 保证RPC调用会有较多的线程        

属性:dfs.namenode.handler.count        

解释:该属性是NameNode服务默认线程数,的默认值是10,根据机器的可用内存可以调整为50~100        

属性:dfs.datanode.handler.count        

解释:该属性默认值为10,是DataNode的处理线程数,如果HDFS客户端程序读写请求比较多,可以调高到15~20,设置的值越大,内存消耗越多,不要调整的过高,一般业务中,5~10即可。

2) 副本数量的调整

属性:dfs.replication    

解释:如果数据量巨大,且不是非常之重要,可以调整为2~3,如果数据非常之重要,可以调整为3~5。

3) 文件块大小的调整      

属性:dfs.blocksize      

解释:块大小定义,该属性应该根据存储的大量的单个文件大小来设置,如果大量的单个文件都小于100M,建议设置成64M块大小,对于大于100M或者达到GB的这种情况,建议设置成256M,一般设置范围波动在64M~256M之间。

四、🌊HBase的调优🌊

1)  优化DataNode允许的最大文件数

属性:dfs.datanode.max.transfer.threads      

文件:hdfs-site.xml      

解释:HBase一般都会同一时间操作大量的文件,根据集群的数量和规模以及数据动作,设置为4096或者更高。默认值:4096

2) 优化延迟高的数据操作的等待时间    

属性:dfs.image.transfer.timeout    

文件:hdfs-site.xml    

解释:如果对于某一次数据操作来讲,延迟非常高,socket需要等待更长的时间,建议把该值设置为更大的值(默认60000毫秒),以确保socket不会被timeout掉。

3) 优化数据的写入效率

属性:  

mapreduce.map.output.compress          

mapreduce.map.output.compress.codec

文件:mapred-site.xml

解释:开启这两个数据可以大大提高文件的写入效率,减少写入时间。第一个属性值修改为true,第二个属性值修改为:org.apache.hadoop.io.compress.GzipCodec

4) 优化DataNode存储

属性:dfs.datanode.failed.volumes.tolerated

文件:hdfs-site.xml      

解释:默认为0,意思是当DataNode中有一个磁盘出现故障,则会认为该DataNode shutdown了。如果修改为1,则一个磁盘出现故障时,数据会被复制到其他正常的DataNode上。

5) 设置RPC监听数量      

属性:hbase.regionserver.handler.count      

文件:hbase-site.xml      

解释:默认值为30,用于指定RPC监听的数量,可以根据客户端的请求数进行调整,读写请求较多时,增加此值。

6) 优化HStore文件大小      

属性:hbase.hregion.max.filesize      

文件:hbase-site.xml      

解释:默认值10737418240(10GB),如果需要运行HBase的MR任务,可以减小此值,因为一个region对应一个map任务,如果单个region过大,会导致map任务执行时间过长。该值的意思就是,如果HFile的大小达到这个数值,则这个region会被切分为两个Hfile。

7) 优化hbase客户端缓存      

属性:hbase.client.write.buffer      

文件:hbase-site.xml      

解释:用于指定HBase客户端缓存,增大该值可以减少RPC调用次数,但是会消耗更多内存,反之则反之。一般我们需要设定一定的缓存大小,以达到减少RPC次数的目的。

8) 指定scan.next扫描HBase所获取的行数

属性:hbase.client.scanner.caching

文件:hbase-site.xml      

解释:用于指定scan.next方法获取的默认行数,值越大,消耗内存越大。

五、🐷内存优化🐷

HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般会分配整个可用内存的70%给HBase的Java堆。但是不建议分配非常大的堆内存,因为GC过程持续太久会导致RegionServer处于长期不可用状态,一般16~48G内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。

1) JVM优化

2)并行GC

参数:-XX:+UseParallelGC    

解释:开启并行GC

3) 同时处理垃圾回收的线程数

参数:-XX:ParallelGCThreads=cpu_core – 1    

解释:该属性设置了同时处理垃圾回收的线程数。

4) 禁用手动GC    

参数:-XX:DisableExplicitGC    

解释:防止开发人员手动调用GC

六、🐈Zookeeper的调优🐈

参数:zookeeper.session.timeout

文件:hbase-site.xml

解释:In hbase-site.xml, set zookeeper.session.timeout to 30 seconds or less to bound failure detection (20-30 seconds is a good start).该值会直接关系到master发现服务器宕机的最大周期,默认值为30秒,如果该值过小,会在HBase在写入大量数据发生而GC时,导致RegionServer短暂的不可用,从而没有向ZK发送心跳包,最终导致认为从节点shutdown。一般20台左右的集群需要配置5台zookeeper。

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨