【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后:

大功告成。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叹了口丶气

觉得有收获就支持一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值