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

相关文章

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

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {