Datanode磁盘IO高 hdfs du -sk 导致机器load高

2023-12-06 20:20

本文主要是介绍Datanode磁盘IO高 hdfs du -sk 导致机器load高,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

hdfs 会定期(默认10分钟)使用 du -sk 命令统计BP的大小,
在大硬盘机器上该操作耗时将会很长(可能超过10分钟),尤其是共享盘或者磁盘IO不高情况下,
这会导致 iowait 以及 load的提升,从而导致IO高,数据读写并不高的现象。

问题现象:

社区问题单:

[HDFS-14313] Get hdfs used space from FsDatasetImpl#volumeMap#ReplicaInfo in memory instead of df/du - ASF JIRA

iotop排查有大量的du -sk 操作占用IO比较高,且执行很长时间;

iostat -x 5: 磁盘IOutil 一直处于比较高的使用率,且iowait值比较大,io有一定的等待延迟;

问题原因:

Datanode进程启动时,启动DU线程定期执行du –sk命令统计各blockpool目录的占用情况,随着心跳汇报给namenode。

执行周期默认为600000ms, 配置项为fs.du.interval;

临时优化方案:
增加fs.du.interval 磁盘检测时间间隔,调整至适当大的值30min,尽量减缓这种io占用高的情况
<property>

  <name>fs.du.interval</name>

  <value>1800000</value>

</property>
————————————————

所以,对于DN来说,默认的Du,会产生大量的du -sk的操作,会造成集群严重的IO Wait增加,从而导致任务会变得缓慢。
————————————————

相关代码:

社区为了解决这个问题,主要在两个方面进行了改造:
https://issues.apache.org/jira/browse/HADOOP-9884


  <property>
    <name>fs.getspaceused.classname</name>
    <value></value>
    <description>
      The class that can tell estimate much space is used in a directory.
      There are four impl classes that being supported:
      org.apache.hadoop.fs.DU(default), org.apache.hadoop.fs.WindowsGetSpaceUsed
      org.apache.hadoop.fs.DFCachingGetSpaceUsed and
      org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.ReplicaCachingGetSpaceUsed.
      And the ReplicaCachingGetSpaceUsed impl class only used in HDFS module.
    </description>
  </property>

  <property>
    <name>fs.getspaceused.jitterMillis</name>
    <value>60000</value>
    <description>
      fs space usage statistics refresh jitter in msec.
    </description>
  </property>
 </configuration>

临时解决方案 

  1. 使用 df 命令替换 du
  2. 允许用户自定义检查间隔时间

解决方案(优化):

社区优化方案:
使用 df 命令替换 du(可配置,使用df前提条件磁盘目录下存储只有hdfs单块池占用);
增加检查间隔时间随机抖动机制;(将一个节点上同时产生的多个du操作,加个随机数,随机到集群的不同时间段,)
Fix version: 2.8.0, 3.0.0-alpha1

    相关patch:

https://issues.apache.org/jira/browse/HADOOP-9884

https://issues.apache.org/jira/browse/HADOOP-12973

https://issues.apache.org/jira/browse/HADOOP-12974

https://issues.apache.org/jira/browse/HADOOP-12975

相关代码截图:

 

问题虽然被解决了,不过低于hadoop2.8的版本需要升级或者打patch的方式进行优化,较为麻烦。

不过也有一些临时的方案,比如说捕获到hdfs调用的 du -sk 命令,使用 df -k 进行替换。

tip: 这个方法的前提是每个BP目录单独位于一个磁盘上。

du 脚本,对正常的du命令不进行修改

mv /usr/bin/du /usr/bin/du_bak
vim /usr/bin/du#!/bin/sh
if [[ $2 == */current/BP-* ]] && [ $1 == -sk ]
thenused=`df -k $2 | grep -vE 'Used|可用' | awk '{print $3}'`echo -e "$used\t$2"
elseecho -e "$(du_bak $@)"
fichmod +x /usr/bin/du

红框为某机器替换后的du命令的效果,1图黄色部分为iowait比例:

cpu util

load

这篇关于Datanode磁盘IO高 hdfs du -sk 导致机器load高的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/463185

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss