HDFS--如何动态刷新一个配置项
Posted Java不睡觉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS--如何动态刷新一个配置项相关的知识,希望对你有一定的参考价值。
背景:
目前,对HDFS的某些参数进行修改后,若想让其生效,必须滚动重启Namenode。
由于NN元数据量比较多,我们公司线上的NN重启一次要花费1h 15min左右,而且随着元数据量的增长以及块数量的增长重启NN花费的时间会越来越久。
Why
我们为什么需要把一些参数做成reconfig的?
因为我们想达到每次修改参数无须重启NN的目标。这样有以下好处:
1.缩短参数调优周期
2.提高开发自测效率
0x00 原生支持reconfig的参数配置demo
使用hdfs dfsadmin -reconfig namenode <替换成你Namenode域名>:8020 properties
命令列出支持reconfig的配置项。
以dfs.heartbeat.interval为例,默认值是3,我们在不重启NN的情况下,给他修改成4。首先修改hdfs-site.xml中的值,然后运行:hdfs dfsadmin -reconfig namenode <替换成你Namenode域名>:8020 start
运行完这条命令后,NN就会去加载新的配置。然后我们运行hdfs dfsadmin -reconfig namenode <替换成你Namenode域名>:8020 status查看reconfig的结果,显示reconfig successful。
到Namenode的Conf界面查看,确实修改成功了。
0x01 把自己感兴趣的配置项变为reconfig的
这里以dfs.namenode.blocks.per.postponedblocks.rescan这个配置项为例,把他改造成reconfig的。
首先在NameNode.java中import这个配置项:
接着,在NameNode类下,有个成员变量reconfigurableProperties用来记录哪些配置项是可reconfig的(也就是执行properties命令返回的内容)。
在这个TreeSet中添加刚才import的key。
然后在NameNode类的reconfigurePropertyImpl方法中添加一个else if分支,用来判断key是我们刚才添加的key。
最后添加else if里面的响应方法,本例为reconfigBlocksPerPostponedblocksRescan方法:
实验结果:
改完代码后,我们打包后上传到测试集群进行实验验证,实验结果如下:
reconfig start前:
reconfig start后:
大功告成。
以上是关于HDFS--如何动态刷新一个配置项的主要内容,如果未能解决你的问题,请参考以下文章