(全网独家)面试要懂运维真实案例:HDFS重新平衡(HDFS Balancer)没触发问题排查

news2024/10/27 7:22:10

在面试时,面试官为了考察面试者是否真的有经验,经常会问运维集群时遇到什么问题,解决具体流程。下面是自己遇到HDFS Balancer没执行,花了半天时间进行排查,全网独家的案例和解决方案。

目录

使用CDH自带重新平衡操作

用命令行来进行操作

平衡操作的触发依赖以下几个条件:

如何排查非 HDFS 使用的空间

1. 检查磁盘使用情况

具体步骤:

2. 排查常见的非 HDFS 空间占用来源

3. 自动化检查工具

4. 清理策略

HDFS Balancer使用高级技巧

设置包含和排除节点

设置最大迁移速率

增加并发迁移线程数


使用CDH自带重新平衡操作

在CDH的所有主机看到有1台服务器的磁盘空间使用80%多,别的服务器才使用50%多。在CDH6.3.2的HDFS管理界面,操作选择重新平衡,在之前公司用过好多次,现在竟然没有作用。

用命令行来进行操作

可以用下面的命令来查看hdfs balancer的操作参数:

hdfs balancer -help

于是怀疑是不是阈值低了,或者CDH没开启配置。用下面的命令 

阈值(threshold)用于控制触发平衡的使用率差异。CDH默认的阈值是10%,即当节点间磁盘使用率差异超过10%时,Balancer会启动平衡操作。可以通过以下命令来调整阈值,更低的阈值更容易触发:

hdfs balancer -threshold 5

用上面的命令行还是没有触发。觉得很不合理,阈值是超过5%。

平衡操作的触发依赖以下几个条件:
  1. 节点磁盘使用率差异超过阈值:默认的平衡器阈值是 10%。如果一个DataNode的磁盘使用率比集群中其他节点的平均使用率高出10%,那么HDFS Balancer 就会触发数据块迁移操作。

  2. HDFS 集群运行状态正常:Balancer 只在 HDFS 集群处于健康状态时运行。如果集群正在进行某些维护任务(如升级、修复等),Balancer 不会执行。

  3. 没有手动排除的节点:如果某些节点被排除在Balancer操作之外(通过 -exclude 参数或配置信息),这些节点将不会参与平衡操作,即使它们的使用率超出阈值。

为什么没触发平衡操作,HDFS Balancer计算的是节点DFS的磁盘空间使用率,并不包括不是不是HDFS占用的空间。

可以用hdfs dfsadmin -report 来观察集群配置情况。观察到

Hostname: cdh01
Rack: /default
Decommission Status : Normal
Configured Capacity: 16656052023296 (15.15 TB)
DFS Used: 4840676593599 (4.40 TB)
Non DFS Used: 8188630638657 (7.45 TB)
DFS Remaining: 2785643620165 (2.53 TB)
DFS Used%: 29.06%
DFS Remaining%: 16.72%
Configured Cache Capacity: 4294967296 (4 GB)
Cache Used: 0 (0 B)
Cache Remaining: 4294967296 (4 GB)
Cache Used%: 0.00%
Cache Remaining%: 100.00%
Xceivers: 31
Last contact: Fri Oct 11 15:09:51 CST 2024
Last Block Report: Fri Oct 11 15:03:24 CST 2024


Hostname: cdh02
Rack: /default
Decommission Status : Normal
Configured Capacity: 16656052023296 (15.15 TB)
DFS Used: 4827967553247 (4.39 TB)
Non DFS Used: 2653966696737 (2.41 TB)
DFS Remaining: 8333836684496 (7.58 TB)
DFS Used%: 28.99%
DFS Remaining%: 50.03%
Configured Cache Capacity: 4294967296 (4 GB)
Cache Used: 0 (0 B)
Cache Remaining: 4294967296 (4 GB)
Cache Used%: 0.00%
Cache Remaining%: 100.00%
Xceivers: 15
Last contact: Fri Oct 11 15:44:00 CST 2024
Last Block Report: Fri Oct 11 12:34:33 CST 2024



Hostname: cdh03
Rack: /default
Decommission Status : Normal
Configured Capacity: 16656052023296 (15.15 TB)
DFS Used: 4746786218883 (4.32 TB)
Non DFS Used: 2817949895805 (2.56 TB)
DFS Remaining: 8250599884860 (7.50 TB)
DFS Used%: 28.50%
DFS Remaining%: 49.54%
Configured Cache Capacity: 4294967296 (4 GB)
Cache Used: 0 (0 B)
Cache Remaining: 4294967296 (4 GB)
Cache Used%: 0.00%
Cache Remaining%: 100.00%
Xceivers: 25
Last contact: Fri Oct 11 15:43:59 CST 2024
Last Block Report: Fri Oct 11 14:15:08 CST 2024

上面的3个节点,cdh01的磁盘空间使用了80%多,另外2个节点磁盘空间只使用50%多。但为什么没有触发,觉得应该是由于HDFS Balance应该只是看DFS Used,这3个节点利用率差不多,所以没有触发操作。

如何排查非 HDFS 使用的空间
1. 检查磁盘使用情况

使用 Linux 命令行工具来查看文件系统中各个目录的磁盘使用情况。可以通过 du 命令逐层排查,识别占用大量空间的文件或目录。

具体步骤:
  1. 查看磁盘总使用情况
    使用 df -h 命令查看各个挂载点的磁盘使用情况。

    df -h

    输出示例:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1       500G  450G   50G  90% /
    

    Filesystem Size Used Avail Use% Mounted on /dev/sda1 500G 450G 50G 90% /

    重点关注非 HDFS 数据所在的文件系统挂载点,确认使用情况。

  2. 使用 du 排查具体目录
    使用 du 命令可以查看目录的具体磁盘使用情况,并逐层定位占用磁盘空间较大的目录或文件。可以从根目录(或 dfs.data.dir 的父目录)开始进行排查。

    du -h --max-depth=1 /

    输出示例:

    12G     /var
    30G     /usr
    8.1G    /lib
    50G     /home
    90G     /
    

    此时,可以看到 /var/usr/home 等目录的使用情况。通过将 --max-depth 参数调整为更深的层级,可以进一步深入查看子目录的使用情况。

  3. 递归查找特定目录内占用空间较大的文件 一旦发现了占用较大空间的目录,可以进一步使用 du 命令查找目录内的文件或子目录。

    du -h --max-depth=1 /var

    例如:

    2.5G    /var/log
    9.5G    /var/lib
    12G     /var
    

  4. 查看具体文件大小 一旦定位到具体的子目录,可以使用 ls -lh 命令查看目录内的文件及其大小。

    ls -lh /var/log

2. 排查常见的非 HDFS 空间占用来源

以下是一些常见的占用非 HDFS 空间的地方:

  1. 系统日志文件 日志文件通常存储在 /var/log 目录下,特别是 Hadoop 相关日志文件(如 HDFS、YARN、MapReduce)可能会占用大量空间。
    检查 /var/log 目录下是否有过大的日志文件,例如:

    ls -lh /var/log

    可以定期清理旧日志或配置日志轮转机制(log rotation),避免日志文件无限增长。

  2. 本地临时文件 Hadoop 的数据节点和其他服务可能会在本地磁盘上创建临时文件,这些文件可能会积累过多,尤其是在任务失败或系统崩溃后。检查 /tmp/var/tmp 等临时目录的空间使用:

    du -h --max-depth=1 /tmp

  3. YARN/Nodemanager 的本地目录 Hadoop 的 YARN 框架在节点上运行任务时,会产生本地数据,特别是在 YARN Nodemanager 的本地目录中。这个目录通常配置为 yarn.nodemanager.local-dirs,可以查找该配置指向的目录并检查使用情况。

    du -h --max-depth=1 /path/to/yarn/local-dir

  4. 应用程序生成的临时数据 如果节点上运行了其他应用程序或服务(例如数据库、监控系统),这些服务生成的文件可能占用较多磁盘空间。可以检查 /opt/usr/local 或者特定应用程序的存储目录。

3. 自动化检查工具

如果你不想手动排查,可以使用一些系统工具或脚本帮助识别大文件:

  1. ncdu 工具
    ncdu 是一个基于 ncurses 的磁盘使用分析工具,可以通过图形化界面方便地查看每个目录占用的空间。 安装并使用:

    sudo apt-get install ncdu  # Ubuntu/Debian
    sudo yum install ncdu      # CentOS/RHEL
    ncdu /
    

  2. find 命令查找大文件 你也可以使用 find 命令直接查找系统中超过一定大小的文件。例如,查找系统中超过 1 GB 的文件:

    find / -type f -size +1G -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

4. 清理策略

排查到占用大量非 HDFS 空间的文件后,可以采取以下措施进行清理和优化:

  • 删除不必要的日志文件或临时文件
  • 配置日志轮转:通过设置 logrotate 来自动清理过时的日志文件。
  • 定期清理临时目录:通过计划任务 (cron) 定期清理 /tmp、YARN 本地目录等临时存储。
  • 调整系统或应用程序配置:检查 Hadoop 或其他服务的配置文件,避免过度使用磁盘空间(例如设置合理的本地临时文件清理策略)。

HDFS Balancer使用高级技巧

设置包含和排除节点

如果想对特定节点进行平衡操作,或者排除某些节点,可以使用 -include 或 -exclude 参数。例如:

  • 包含节点:

hdfs balancer -include <node1,node2,...>

只对指定的节点进行平衡操作。

  • 排除节点:

hdfs balancer -exclude <node1,node2,...>

排除指定的节点不进行平衡操作。

设置最大迁移速率

平衡操作可能会消耗较多带宽和系统资源,因此可以控制最大数据迁移速率。HDFS中通过参数 dfs.balance.bandwidthPerSec 控制每秒最大数据传输速率。默认值是 1 MiB/s,如果要加快或减慢平衡过程,可以通过以下方式修改:

  • 修改 HDFS 配置文件

hdfs-site.xml 中的 dfs.balance.bandwidthPerSec 值:

<property>
  <name>dfs.balance.bandwidthPerSec</name>
  <value>10485760</value> <!-- 10 MiB/s -->
</property>
  • 或者在命令行运行 Balancer 时指定速率:
hdfs balancer -bandwidth <字节数/秒>

例如,设置为每秒传输 10 MiB 数据:

hdfs balancer -bandwidth 10485760
增加并发迁移线程数

在一些大集群中,默认的并发迁移线程数可能不足以快速完成平衡操作。可以通过增加 dfs.balancer.moverThreads 参数,来允许更多的数据块同时迁移。例如,默认值是1000,可以根据集群负载情况适当增大这个值:

<property>

<name>dfs.balancer.moverThreads</name>

<value>2000</value>

</property>

小结

HDFS Balancer 判断节点是否不平衡,主要依据的是每个节点的 磁盘使用率差异(DFS的使用率),不包括非DFS空间。集群节点之间的磁盘利用率一旦超过设定的阈值(threshold),HDFS Balancer 就会认为集群处于不平衡状态,进而触发数据块迁移操作。具体步骤如下:

  1. 收集节点磁盘使用情况:HDFS NameNode 会定期统计所有 DataNode 的磁盘使用情况。
  2. 比较节点之间的使用率差异:Balancer 会根据设定的 阈值(threshold),比较集群中不同节点的磁盘使用率。如果某些节点的使用率比其他节点高出设定的阈值,Balancer 就会认为集群不均衡。
  3. 决定数据块迁移:当节点间的使用率差异超过阈值,Balancer 会尝试将一些数据块从高使用率的节点迁移到低使用率的节点,以减小这种差异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 ——— 顺序表oj题:最长公共前缀

目录 题目要求 代码实现 题目要求 编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;如果不存在公共前缀&#xff0c;返回空字符串 "" 代码实现 代码演示&#xff1a; void CommonPrefix(char** strs, int strsSize, char* returnStr) {char* first_r…

利用session机制造测试账号,无需前端也可以测试后端接口

适用场景&#xff1a;我们在测试的时候经常会遇到前端还没有开发完毕&#xff0c;后端已经结束开发了&#xff0c;但是后端的有些接口是需要特定的账号身份调用才会生效&#xff0c;此时因为前端未开发完毕&#xff0c;所以我们不能通过web页面进行登录&#xff0c;那么如何解决…

【Python Django + Vue】酒店在线预订系统:用技术说话!

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Parallels Desktop意外退出,Parallels Desktop安装软件很卡闪退怎么办?

Parallels Desktop是目前很优秀的虚拟机软件&#xff0c;操作简单&#xff0c;兼容性强而且安装也非常方便&#xff0c;备受苹果用户的喜爱和满意。然而&#xff0c;部分用户在使用Parallels Desktop的时候&#xff0c;会遇到意外退出或终端关机的情况&#xff0c;这不仅会影响…

VS2017 编译 SQLite3 动态库

首先官方下载源码: Tags sqlite/sqlite (github.com) 1.安装 VS2017 community edition 2.打开VS2017命令行工具 3.安装TCL 开发库,推荐 TCL 9.0 先下载源码: Tcl/Tk 9.0 使用vs2017编译tcl&

CRC码计算原理:按位讲解计算过程

CRC8 这里先以CRC8来说明CRC的计算过程 1、CRC8在线计算器 通过CRC在线计算器可以看见CRC8的特征多项式&#xff1a;x8x2x1&#xff0c;初始值为0000’0000。 CRC计算的核心是&#xff1a;反转异或移位&#xff08;此处的CRC8没有涉及反转&#xff0c;见后面CRC16&#xff0…

基于Langchain框架下Prompt工程调教大模型(LLM)[输入输出接口、提示词模板与例子选择器的协同应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下基于Langchain框架下Prompt工程调教大模型(LLM)[输入输出接口、提示词模板与例子选择器的协同应用。本文深入探讨了Langchain框架下的Prompt工程在调教LLM&#xff08;大语言模型&#xff09;方面的应用&#xff0c…

C++入门基础知识110—【关于C++嵌套 if 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 嵌套 if 语句的相关内容&#xff01; …

全院级、流程化的医院安全不良事件管理系统源码——等级医院评审工作的辅助工具

前言&#xff1a; 冰山理论”指出“每件严重不良事件背后可能隐藏着10件轻微的不良事件”“存在30件未造成伤害的差错可能存在600件引发意外的异常事件”没有一件不良事件应该被忽视&#xff01; 一项研究也指出95%医生曾目睹错误的发生&#xff0c;61%的医务人员认为医疗错误…

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…

Unity 3d 鼠标设置的问题——隐藏/显示鼠标、锁定/解锁/限制鼠标、自定义鼠标形状

在unity开发的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;有时会发现鼠标不见了&#xff0c;有时发现鼠标在屏幕中心不能动&#xff0c;有时又想有图片自己定义一个鼠标形状。本文将对这些问题逐一进行探讨。 一、设置鼠标的可见性 使用语句&#xff1a; Cursor.vis…

网络初识基本概念总结

网络发展背景 经历了 单机阶段 -> 局域网阶段 -> 广域网阶段 -> 移动互联网阶段 (简单介绍一下) 其他一些小概念 局域网LAN: 是把一些设备通过交换机 / 路由器连接, 形成的私有网络广域网WAN: 是把更多的局域网相互连接起来,当规模足够大时形成广域网交换机和路由器…

Rhymes AI发布首款开源多模态AI模型Aria 性能超越GPT-4o mini等多家知名AI模型

最近&#xff0c;日本东京的初创公司 Rhymes AI 推出了他们的首款人工智能模型 ——Aria。该公司自称&#xff0c;Aria 是全球首个开源的多模态混合专家&#xff08;MoE&#xff09;模型。这个模型不仅具有处理多种输入模态的能力&#xff0c;还声称在能力上与一些知名的商业模…

大一高等数学速成指南

大一高等数学速成指南 高等数学作为大学理工科学生的基础课程&#xff0c;对于许多新生来说&#xff0c;既是挑战也是机遇。本文将为你提供一个高效的学习指南&#xff0c;帮助你快速掌握高等数学的核心内容。 1. 理解课程大纲 首先&#xff0c;你需要了解高等数学的课程大纲…

Linux(1. 基本操作_命令)

目录 关于超级用户root&#xff1a; root用户可以做什么&#xff1f; 避免灾难&#xff1a; 格式约定&#xff1a; 浏览硬盘&#xff1a; 命令行补全和通配符&#xff1a; 命令行补全&#xff1a; 通配符&#xff1a; 常用基本命令&#xff1a; 查看目录和文件&#xff…

使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题

一、使用SpringMVC搭建WEB项目时报错404的问题排查解决 很早前&#xff08;4年前&#xff09;就把这个搭建过&#xff0c;但今天运行的时候就是报404错误&#xff0c;见文章&#xff1a; JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例…

Unity3d折叠Inspector中的变量

InspectorFoldoutGroup插件 [Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpDownGraph aimStabilityGraph;[Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpGraph aimDensityGraph;[Pixeye.Unity.Foldout("【曲线图】")] p…

libssh2编译部署详解

libssh2编译部署详解 一、准备工作二、编译libssh2方法一:使用Autotools构建方法二:使用CMake构建三、验证安装四、使用libssh2五、结论libssh2是一个用于实现SSH2协议的开源库,它支持建立安全的远程连接、传输文件等操作。本文将详细介绍如何在Linux系统下编译和部署libssh…

AI+视频监控:EasyCVR安防平台赋能火电制造行业的视频智能管理方案

随着信息技术的飞速发展和智能制造的深入推进&#xff0c;火电制造行业作为国民经济的重要组成部分&#xff0c;正面临着智能化转型的迫切需求。为了提升生产效率、保障设备安全、优化管理流程&#xff0c;火电制造企业迫切需要引入先进的视频监控与人工智能技术。EasyCVR安防监…

【Canvas与标牌】立入禁止标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>立入禁止Draft1</title><style type"text/css"&g…