暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

0116C. 大规模CDP集群 HDFS namenode优化

rundba 2022-01-05
2523

       对于大规模CDP集群,namenode性能直接影响集群的整体性能,文中通过数项参数的优化来提升HDFS的namenode性能。


0. ENV




CDP7.1.6;

CM7.4.4。


1. 问题现象






HDFS Log4j StateChange 配置(log4j.logger.org.apache.hadoop.hdfs.StateChange)设置的日志级别高于ERROR。Cloudera 建议将此值更改为 ERROR 以匹配 log4j.logger.BlockStateChange属性。因为,除非出现错误,否则不需要详细记录 StateChange 操作,这可能会导致明显的性能下降。



2. 优化过程




2.1 仅在启用调试时审核日志特定操作

        默认情况下,以下属性设置为空白,因此没有限制 Namenode 操作进入审计日志。

        诸如getfileinfo 之类的操作 会导致获取与文件关联的元数据,并且在大型/读取密集型集群中,它可能会生成过多的审计日志。因此,建议仅在启用审计日志调试时才审计日志 getfileinfo 。

在hdfs-site.xml调整:

 <property>
<name>dfs.namenode.audit.log.debug.cmdlist<\name>
<value>getfileinfo<\value>
<description>A comma separated list of NameNode commands that are written to the HDFS
namenode audit log only if the audit log level is debug.
<\description>
<\property>


        在 Cloudera Manager 中,您可以在“ NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml ”下添加属性。

CM > 配置 > Configuration Search,搜索“hdfs-site.xml”,找到“hdfs-site.xml 的 NameNode 高级配置代码段(安全阀)”,添加配置:

名称:dfs.namenode.audit.log.debug.cmdlist
值:getfileinfo
点击“保存更改”。


2.2 降低日志记录频率

        此外,BlockStateChange 和 StateChange 相关的日志记录只有在这些操作失败时才有用,即这些类的日志条目是 ERROR。在默认的 INFO 级别,这两个类会在 Namenode 日志中生成大量日志条目。您可以通过在 Hadoop 配置中的log4j.properties文件中添加以下行来降低日志记录频率。在 Cloudera Manager 下,可以在“ NameNode Logging Advanced Configuration Snippet (Safety Valve)”下添加这些属性。

log4j.logger.BlockStateChange=ERROR
log4j.logger.org.apache.hadoop.hdfs.StateChange=ERROR


        CM > 配置 > Configuration Search,搜索“namenode log”,找到“NameNode 日志记录高级配置代码段(安全阀)”,添加上面两行配置,点击“保存更改”。


2.3 避免为getContentSummary递归调用外部授权方

        getContentSummary通常是一个昂贵的操作。在安全性由 Apache Ranger 等外部组件管理的安全环境中,它变得更加昂贵,因为权限检查是通过递归调用执行的,以检查路径中的所有后代。HDFS-14112引入了一项改进,只需使用subaccess进行一次调用,因为通常他们不必评估路径的每个组件。

hdfs-site.xml中的更改:

<property>
<name>dfs.permissions.ContentSummary.subAccess</name>
<value>false</value>
<description>
If "true", the ContentSummary permission checking will use subAccess.
If "false", the ContentSummary permission checking will NOT use subAccess.
subAccess means using recursion to check the access of all descendants.
</description></property>


        再次在 Cloudera Manager 中将属性放在“NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml ”下

建议将此属性设置为 true 以便使用subAccess。

CM > 配置 > Configuration Search,搜索“hdfs-site.xml”,找到“hdfs-site.xml 的 NameNode 高级配置代码段(安全阀)”,添加配置:

名称:dfs.permissions.ContentSummary.subAccess
值:true

点击“保存更改”。


注意:此改进仅在 CDP 版本中可用,较旧的 CDH/HDP 版本没有此改进,因此不建议在 CDH/HDP 版本上添加此配置。


2.4 优化块报告

        在繁忙的大型集群(例如 200 个 Datanodes)中,重要的是不要让 NameNode 过于频繁地从 datanode 报告完整块。如果 NameNode 已经降级,则块报告会进一步增加 NameNode 的压力。NameNode 处理块报告的速度可能很慢,以至于您最终会在 NameNode 日志中看到诸如“块报告队列已满”之类的消息。

        有趣的是,要注意的是,虽然默认块报告队列大小设置为1024,我们可以看到这款“阻止报告队列满,即使在我们称之为块报告一遇的洪水,也当你的NameNode的RPC一个NameNode会启动”消息处理时间太长,无法表明 NameNode 严重降级,从而导致报告积压,最终导致队列溢出。 

虽然块报告队列大小是可配置的,并且您基本上可以增加队列大小,但更好的方法是优化数据节点发送块报告的方式。

 

我们建议使用三管齐下的方法来更改hdfs-site.xml 中的以下内容:


1) 按体积拆分块报告(默认值 1000000)

<property>
<name>dfs.blockreport.split.threshold</name>
<value>0</value>
<description>
If the number of blocks on the DataNode is below this threshold then it will send block reports for all Storage Directories in a single message. If the number of blocks exceeds this threshold then the DataNode will send block reports for each Storage Directory in separate messages. Set to zero to always split.
</description>
</property>



2) 将完整区块报告频率从默认的6小时减少到12小时

<property>
<name>dfs.blockreport.intervalMsec</name>
<value>43200000</value>
<description>
Determines block reporting interval in milliseconds.
</description>
</property>


3) 批处理增量报告(默认值0禁用批处理)

<property>
<name>dfs.blockreport.incremental.intervalMsec</name>
<value> 100 </value>
<description>
If set to a positive integer, the value in ms to wait between sending incremental block reports from the Datanode to the Namenode.
</description>
</property>


        所有 3 个都属于Cloudera Manager 中的“ NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml ”。

同样在“hdfs-site.xml 的 NameNode 高级配置代码段(安全阀)”,添加上述3处配置:


2.5 重启服务
        CM首页点击“过期配置,需要重启”


        点击“重启过时服务”


        如果不允许停止业务,默认使用“滚动重启”。在业务允许停止时,建议去掉“滚动重启”对勾,点击立即重启。


        重启正常,点击继续。


        重启后,确保各项服务正常。


3. 小结




        对hdfs的namenode中hdfs-site.xml和log4j.properties部分参数进行了优化,调试日志审核、日志记录频率、getContentSummary递归调用、优化块报告数项优化,来提升大规模集群的namenode性能。


4. Ref



https://community.cloudera.com/t5/Community-Articles/Scaling-the-HDFS-NameNode-part-5/ta-p/327450



-  完  -


旨在交流,不

::rundba

wx: landnow


 



                             长按二维码                                   


欢迎加入>>国产DB学习交流群


       

                  请注明:来自rundba,加入国产DB学习交流群                

             



文章转载自rundba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论