datanode产线环境配置参数( 二 )


hdfs-site.xml文件中有一个参数:
dfs.blockreport.intervalMsec
3600000
Determinesblockreportingintervalinmilliseconds.
其中3600000为默认设置 , 3600000毫秒 , 即1个小时 , 也就是说 , 块报告的时间间隔为1个小时 , 所以经过了很长时间这些多余的块才被删除掉 。通过实际测试发现 , 当把该参数调整的稍小一点的时候(60秒) , 多余的数据块确实很快就被删除了
14.新增块延迟汇报
当datanode上新写完一个块 , 默认会立即汇报给namenode 。在一个大规模Hadoop集群上 , 每时每刻都在写数据 , datanode上随时都会有写完数据块然后汇报给namenode的情况 。因此namenode会频繁处理datanode这种快汇报请求 , 会频繁地持有锁 , 其实非常影响其他rpc的处理和响应时间 。
通过延迟快汇报配置可以减少datanode写完块后的块汇报次数 , 提高namenode处理rpc的响应时间和处理速度 。
dfs.blockreport.incremental.intervalMsec
300
我们产线环境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 。而socketserver可以一次性处理backlog中的所有请求 , 处理后的请求不再位于监听队列中 。当server处理请求较慢 , 以至于监听队列被填满后 , 新来的请求会被拒绝 。在Hadoop1.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的值 。