资讯专栏INFORMATION COLUMN

HDFS参数调优

IT那活儿 / 1323人阅读
HDFS参数调优

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!! 

01


NameNode数据目录


dfs.name.dir, dfs.namenode.name.dir
指定一个本地文件系统路径,决定NN在何处存放fsimage和editlog文件。可以通过逗号分隔指定多个路径. 目前我们的产线环境只配置了一个目录,并存放在了做了RAID1或RAID5的磁盘上。

02


DataNode数据路径


dfs.data.dir, dfs.datanode.data.dir
指定DN存放块数据的本地盘路径,可以通过逗号分隔指定多个路径。在生产环境可能会在一个DN上挂多块盘。

03


数据块的副本数


dfs.replication
数据块的副本数,默认值为3。

04


数据块大小


dfs.block.size
HDFS数据块的大小,默认为128M,目前我们产线环境配置的是1G。

05


HDFS做均衡时使用的最大带宽


dfs.datanode.balance.bandwidthPerSec
HDFS做均衡时使用的最大带宽,默认为1048576,即1MB/s,对大多数千兆甚至万兆带宽的集群来说过小。不过该值可以在启动balancer脚本时再设置,可以不修改集群层面默认值。目前目前我们产线环境设置的是50M/s~100M/s。

06


磁盘可损坏数


dfs.datanode.failed.volumes.tolerated
DN多少块盘损坏后停止服务,默认为0,即一旦任何磁盘故障DN即关闭。对盘较多的集群(例如每DN12块盘),磁盘故障是常态,通常可以将该值设置为1或2,避免频繁有DN下线。

07


数据传输连接数


dfs.datanode.max.xcievers
DataNode可以同时处理的数据传输连接数,即指定在DataNode内外传输数据使用的最大线程数。官方将该参数的命名改为dfs.datanode.max.transfer.threads,默认值为4096,推荐值为8192,我们产线环境也是8192。

08


NameNode处理RPC调用的线程数


dfs.namenode.handler.count
NameNode中用于处理RPC调用的线程数,默认为10。对于较大的集群和配置较好的服务器,可适当增加这个数值来提升NameNode RPC服务的并发度,该参数的建议值:集群的自然对数 * 20。
python -c import math ; print int(math.log(N) * 20)
我们800+节点产线环境配置的是200~500之间。

09


NameNode处理datanode 上报数据块和心跳的线程数


dfs.namenode.service.handler.count
用于处理datanode 上报数据块和心跳的线程数量,与dfs.namenode.handler.count算法一致。

10


DataNode处理RPC调用的线程数


dfs.datanode.handler.count
DataNode中用于处理RPC调用的线程数,默认为3。可适当增加这个数值来提升DataNode RPC服务的并发度,线程数的提高将增加DataNode的内存需求,因此,不宜过度调整这个数值。我们产线环境设置的是10。

11


DataNode最大传输线程数


dfs.datanode.max.xcievers
最大传输线程数 指定在 DataNode 内外传输数据使用的最大线程数。
这个值是指定 datanode 可同時处理的最大文件数量,推荐将这个值调大,默认是256,最大值可以配置为65535,我们产线环境配置的是8192。

12


读写数据时的缓存大小


io.file.buffer.size


–设定在读写数据时的缓存大小,应该为硬件分页大小的2倍。

 我们产线环境设置的为65536 ( 64K) 。

13


冗余数据块删除

在日常维护hadoop集群的过程中发现这样一种情况:
某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡,HDFS马上自动开始数据块的容错拷贝;当该节点重新添加到集群中时,由于该节点上的数据其实并没有损坏,所以造成了HDFS上某些block的备份数超过了设定的备份数。
通过观察发现,这些多余的数据块经过很长的一段时间才会被完全删除掉,那么这个时间取决于什么呢?
该时间的长短跟数据块报告的间隔时间有关。Datanode会定期将当前该结点上所有的BLOCK信息报告给NameNode,参数dfs.blockreport.intervalMsec就是控制这个报告间隔的参数。
hdfs-site.xml文件中有一个参数:
<property>
<name>dfs.blockreport.intervalMsecname>

<value>3600000value>
<description>Determines block reporting interval in milliseconds.description>
property>
其中3600000为默认设置,3600000毫秒,即1个小时,也就是说,块报告的时间间隔为1个小时,所以经过了很长时间这些多余的块才被删除掉。通过实际测试发现,当把该参数调整的稍小一点的时候(60秒),多余的数据块确实很快就被删除了。

14


新增块延迟汇报
当datanode上新写完一个块,默认会立即汇报给namenode。在一个大规模Hadoop集群上,每时每刻都在写数据,datanode上随时都会有写完数据块然后汇报给namenode的情况。因此namenode会频繁处理datanode这种快汇报请求,会频繁地持有锁,其实非常影响其他rpc的处理和响应时间。
通过延迟快汇报配置可以减少datanode写完块后的块汇报次数,提高namenode处理rpc的响应时间和处理速度。
<property>   
<name>dfs.blockreport.incremental.intervalMsecname>
   
<value>300value>
property>
我们产线环境HDFS集群上此参数配置为500毫秒,就是当datanode新写一个块,不是立即汇报给namenode,而是要等待500毫秒,在此时间段内新写的块一次性汇报给namenode。

15


增大同时打开的文件描述符和网络连接上限
使用ulimit命令将允许同时打开的文件描述符数目上限增大至一个合适的值。同时调整内核参数net.core.somaxconn网络连接数目至一个足够大的值。
补充:net.core.somaxconn的作用 
net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?
backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,它会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。
在Hadoop 1.0中,参数ipc.server.listen.queue.size控制了服务端socket的监听队列长度,即backlog长度,默认值是128。而Linux的参数net.core.somaxconn默认值同样为128。
当服务端繁忙时,如NameNode或JobTracker,128是远远不够的。这样就需要增大backlog,例如我们的集群就将ipc.server.listen.queue.size设成了32768,为了使得整个参数达到预期效果,同样需要将kernel参数net.core.somaxconn设成一个大于等于32768的值。


END



 

本文作者:刘光肆

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129498.html

相关文章

  • cdh调优

      CDH(Cloudera Distribution Including Apache Hadoop)是一个用于在企业中部署和管理Apache Hadoop生态系统的分发版本。CDH包含了Hadoop核心组件,如HDFS、YARN和MapReduce,以及许多其他工具,如Apache Hive、Apache Pig、Apache Spark和Apache HBase。  在CDH中进行调优的...

    白马啸西风 评论0 收藏0
  • Spark面试题(七)——Spark程序开发调优

    摘要:过程中,各个节点上的相同都会先写入本地磁盘文件中,然后其他节点需要通过网络传输拉取各个节点上的磁盘文件中的相同。因此在过程中,可能会发生大量的磁盘文件读写的操作,以及数据的网络传输操作。Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)——数据倾斜调优 Spark面试题(...

    taowen 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<