关于HDFS Balancer的一些小技巧

2023-05-16

关于HDFS Balancer的一些小技巧

  • 前言
  • 正文
    • 原因分析
    • Balancer工具做均衡
      • 带宽设置
      • 限定均衡范围
      • 参数调优
  • 结语

前言

使用HDFS的过程中,难免会出现数据不均衡的情况,直观表现就是有的服务器磁盘使用率高的吓人,有的服务器空闲的离谱;我在运维过程中也遇到很多这种情况,使用balancer工具做均衡也是总结了一些点,特意再次记录一下。
在这里插入图片描述

正文

原因分析

对于HDFS来说,数据不均衡是个再正常不过的事情,就我所遇到的原因总结起来大概如下:

  • 组件部署导致:如NIFI等组件,同步数据至HDFS,若部署的节点同时也有DataNode,总会有块写在当前节点,很快节点就会使用率很高;
  • 磁盘更换导致:大数据量的集群会出现磁盘损坏的情况,无法修复时,就要更换磁盘,这个时候新上的磁盘就会是空的;
  • 数据的生命周期管理导致:数据不是一成不变的,进行生命周期管理是,删除数据对于集群分布的数据来说是随机的;
  • 配置导致:实际上这个是容易令人忽略的问题,使用Ambari等工具管理集群时,部署DN的时候会默认设置dfs.datanode.du.reserve,即预留的非HDFS可用的空间,比如10TB的磁盘,这个值被默认设置为1TB,这就会导致在评估DataNode可用空间的时候,只评估9TB,就会发现物理磁盘使用率不高,但是从WebUI看会很高;我一般来说都会手动设置为200-500GB;
  • 节点宕机维修导致:有时候,节点会发生宕机,如果短时间无法恢复,当节点再次上线,就会和其他节点出现不均衡的情,这个比较好理解。

Balancer工具做均衡

balancer工具的使用方式网速已经说烂了,这里我就写一下我使用Balancer工具过程中值得大家注意的地方,首先基本使用参数简单说下:

hdfs balancer
        [-policy <policy>]      平衡策略,可选datanode级别或者blockpool级别;
        [-threshold <threshold>]        平衡的百分比差值,假设HDFS整体使用率60%,该参数默认值10,则在每次迭代中,只有整体使用率在60%±10%的节点会参与到数据均衡中;
        [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]  排除在均衡动作之外的DataNode节点,这部分节点不会进行均衡评估和操作;
        [-include [-f <hosts-file> | <comma-separated list of hosts>]]  包含在均衡动作之内的DataNode节点,只有这部分节点进行均衡评估和操作;
        [-source [-f <hosts-file> | <comma-separated list of hosts>]]   指定作为数据源的节点,在将高利用率的节点数据均衡到低使用率节点上时,这个参数很有用;
        [-blockpools <comma-separated list of blockpool ids>]   运行均衡操作的blockpool,若不是联邦集群,一般不会用到;
        [-idleiterations <idleiterations>]      本次均衡操作计划进行多少次迭代;
        [-runDuringUpgrade]    HDFS正在升级时,是否需要运行balancer,这个参数还没用到过

如果发现有的参数没有,那可能是因为hdfs的版本问题,不过大部分参数肯定都是有的。

带宽设置

balancer命令直接使用的话,一般只需要几个基础参数,但是默认的带宽速度是很低的,印象中只有10M,如果服务器性能好,可以适当调整,我一般就调到2G,动态调整方法如下:

hdfs dfsadmin -setBalancerBandwidth 2147483648

然后执行均衡命令:

hdfs balancer -policy datanode -threshold 10

限定均衡范围

集群比较大的时候,我们一般不会做全局的数据均衡,所以这个时候就要用include或者exclude进行节点的限制了,对于我来说include用的居多一些,首先创建一个节点清单文件include.txt,一行写一个IP或者主机名:

ttt101100.node
ttt101101.node
ttt101102.node
ttt101103.node

然后执行均衡命令:

hdfs balancer -policy datanode -threshold 10 -include -f include.txt

参数调优

迁移过程中注意运行日志会打印一些比较关键的信息:

22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.movedWinWidth = 5400000 (default=5400000)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.moverThreads = 1000 (default=1000)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.dispatcherThreads = 200 (default=200)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.datanode.balance.max.concurrent.moves = 50 (default=50)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.getBlocks.size = 2147483648 (default=2147483648)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.getBlocks.min-block-size = 10485760 (default=10485760)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.balancer.max-size-to-move = 10737418240 (default=10737418240)
22/01/20 09:28:41 INFO balancer.Balancer: dfs.blocksize = 134217728 (default=134217728)

此处涉及了多个参数,解释几个比较重要的:

  • dfs.balancer.moverThreads:用于执行均衡的线程池大小,默认值是1000;
  • dfs.balancer.max-size-to-move:单次迭代中最大移动的数据量,默认是10GB,指单个source DataNode;
  • dfs.datanode.balance.max.concurrent.moves:并行移动的block数量,默认是50;

首先,我尝试单独设置max-size-to-move参数,在这之前先把默认参数下运行的日志保存:

记录时间							迭代				已均衡数据量			剩余待均衡数据量		本次迭代需要均衡的数据量
Jan 20, 2022 9:19:42 AM           0             10.04 GB            30.84 TB              10 GB
Jan 20, 2022 9:20:36 AM           1             20.08 GB            30.84 TB              10 GB

大概算一下速率在0.185GB/s
然后在启动balancer实例的节点的hdfs客户端文件中配置如下项:

<property>
  <name>dfs.balancer.max-size-to-move</name>
  <value>107374182400</value>
</property>

再次运行balancer命令并查看日志:

记录时间							迭代				已均衡数据量			剩余待均衡数据量		本次迭代需要均衡的数据量
Jan 20, 2022 9:43:40 AM           0            100.06 GB            30.80 TB             100 GB
Jan 20, 2022 9:48:51 AM           1            200.12 GB            30.77 TB             100 GB
Jan 20, 2022 9:53:14 AM           2            300.15 GB            30.75 TB             100 GB
Jan 20, 2022 9:58:08 AM           3            400.18 GB            30.72 TB             100 GB
Jan 20, 2022 10:02:40 AM          4            500.19 GB            30.69 TB             100 GB

大概算一下速率在0.311GB/s
配置实时生效了,单次迭代平衡的数据量从10GB增加到100GB,速率从0.185GB/s增加到0.311GB/s

而有关线程数的设置,必须重启HDFS才能生效,这是比较可惜的,根据社区的建议,dfs.datanode.balance.max.concurrent.moves参数可以尽可能设置大,因为在做平衡的时候,回取值balancer实例和DataNode之间的最小值,所以不用担心这个值太大造成磁盘IO的负担。

结语

除了集群各个节点间的数据同步以外,在Hadoop3.0+也提供了对于单个DataNode内部各个磁盘进行数据均衡的工具,以后如果使用到再做记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于HDFS Balancer的一些小技巧 的相关文章

  • 写入 Hadoop 中 HDFS 中的文件

    我一直在寻找一个磁盘密集型 Hadoop 应用程序来测试 Hadoop 中的 I O 活动 但我找不到任何此类应用程序可以使磁盘利用率保持在上述水平 例如 50 或者某些此类应用程序实际上使磁盘保持繁忙 我尝试了 randomwriter
  • 一个目录中有多少个子目录?

    如何查找HDFS中指定目录下的子目录数量 当我做hadoop fs ls mydir 我收到 Java 堆空间错误 因为目录太大 但我感兴趣的是该目录中的子目录数量 我试过 gsamaras gwta3000 hadoop fs find
  • 使用带有迭代器的 mapPartition 保存 Spark RDD

    我有一些中间数据需要存储在 HDFS 和本地 我正在使用 Spark 1 6 在 HDFS 作为中间形式中 我正在获取数据 output testDummy part 00000 and output testDummy part 0000
  • Hive 数据存储在哪里?

    我对配置单元存储数据的位置有点困惑 它将数据存储在 HDFS 还是 RDBMS 中 Hive Meta 存储是否使用 RDBMS 来存储 Hive 表元数据 提前致谢 Hive 数据存储在其中之一Hadoop 兼容文件系统 https cw
  • 将 Solr HDFS 数据复制到另一个集群

    我有一个 solr 云 v 4 10 安装 位于 Cloudera CDH 5 4 2 HDFS 之上 有 3 个 solr 实例 每个实例托管每个核心的一个分片 我正在寻找一种将 solr 数据从生产集群增量复制到开发集群的方法 有 3
  • PySpark:使用 newAPIHadoopFile 从多行记录文本文件中读取、映射和减少

    我正在尝试解决一个类似于这个帖子 https stackoverflow com questions 31227363 creating spark data structure from multiline record 我的原始数据是一
  • 什么是“HDFS 写入管道”?

    当我阅读 hadoop 权威指南时 我坚持以下句子 写入reduce输出确实会消耗网络带宽 但仅作为 与普通 HDFS 写入管道消耗的量差不多 问题 1 能帮我更详细地理解上面这句话吗 2 HDFS写入管道 是什么意思 当文件写入 HDFS
  • 崩溃的 HDFS 客户端 - 如何关闭剩余的打开文件?

    我的 Hadoop 应用程序遇到一些问题 每当我的客户端在未关闭文件的情况下退出 例如由于崩溃 时 Hadoop 中就会有打开的文件从未关闭 当我尝试重新启动客户端时 重新打开这些文件以附加数据时会失败 请参阅下面的异常消息 有没有一种好方
  • Hadoop 块大小 vs 分割 vs 块大小

    我对 Hadoop 的概念有点困惑 有什么区别Hadoop Chunk size Split size and Block size 提前致谢 块大小和块大小是一样的 分体尺寸可能不同于块 块 size 地图缩减算法不适用于文件的物理块 它
  • Hadoop 中的分割大小与块大小

    Hadoop 中的分割大小和块大小之间有什么关系 当我读到this http willddy github io 2012 08 25 Hadoop Split and Block html 分割大小必须是块大小的n倍 n是整数并且n gt
  • 如何更有效地从spark重命名hdfs中的文件?

    我有 450K JSON 我想根据某些规则在 hdfs 中重命名它们 为了简单起见 我只添加一个后缀 finished给他们每个人 A 成功地做到了这一点 代码如下 import org apache hadoop fs val hdfs
  • 无法创建目录 /home/hadoop/hadoopinfra/hdfs/namenode/current

    我收到错误 Cannot create directory home hadoop hadoopinfra hdfs namenode current 尝试在我的本地 Mac 上安装 hadoop 时 这可能是什么原因 仅供参考 我将我的
  • 格式化 HDFS 时出现 UnknownHostException

    我已经使用以下命令在伪分布式模式下在 CentOS 6 3 64 位上安装了 CDH4指示 https ccp cloudera com display CDH4DOC Installing CDH4 on a Single Linux N
  • 如何更改 Spark 程序的 HDFS 复制因子?

    我需要将 Spark 程序的 HDFS 复制因子从 3 更改为 1 在搜索时 我想出了 spark hadoop dfs replication 属性 但是通过查看https spark apache org docs latest con
  • 如何访问Hadoop HDFS中的文件?

    我的 Hadoop HDFS 中有一个 jar 文件 包含我想要修改的 Java 项目 我想在 Eclipse 中打开它 当我打字时hdfs dfs ls user 我可以看到 jar 文件在那里 但是 当我打开 Eclipse 并尝试导入
  • 如何将位于 HDFS 上的类型安全配置文件添加到 Spark-Submit(集群模式)?

    我有一个 Spark Spark 1 5 2 应用程序 它将数据从 Kafka 流式传输到 HDFS 我的应用程序包含两个 Typesafe 配置文件来配置某些内容 例如 Kafka 主题等 现在我想在集群中使用spark submit 集
  • 为什么map任务总是运行在单节点上

    我有一个具有 4 个节点的完全分布式 Hadoop 集群 当我将作业提交给 Jobtracker 时 Jobtracker 认为 12 个映射任务对我的工作来说很酷 但奇怪的事情发生了 这 12 个映射任务始终在单个节点上运行 而不是在整个
  • HDFS 在大量小文件和 128 Mb 块大小上的行为

    我有很多 多达数十万个 小文件 每个文件 10 100 Kb 我的 HDFS 块大小等于 128 MB 我的复制因子等于 1 为每个小文件分配 HDFS 块有什么缺点吗 我见过相当矛盾的答案 答案说最小的文件占用整个块 https stac
  • 使用Spring批处理从HDFS读取文件

    我必须编写一个 Spring 批处理 它将从 HDFS 读取文件并更新 MySQL DB 中的数据 HDFS 中的源文件包含一些 CSV 格式的报告数据 有人能给我举一个从 HDFS 读取文件的例子吗 Thanks The FlatFile
  • 非 hdfs 文件系统上的 hadoop/yarn 和任务并行化

    我已经实例化了 Hadoop 2 4 1 集群 并且发现运行 MapReduce 应用程序的并行化方式会有所不同 具体取决于输入数据所在的文件系统类型 使用 HDFS MapReduce 作业将生成足够的容器 以最大限度地利用所有可用内存

随机推荐

  • 标准数独的求解

    上机题目中有一道题目的要求是通过编程实现数独的求解 xff0c 然后想起了初三去后来所在的高中面试提前录取的时候里面的压轴题便是数独 xff0c 当时做了好长时间也没搞出来 xff0c 我还记得监考老师当时和我说 xff1a 做不出来就别勉
  • 利用定义求解传递闭包的关系矩阵

    题目描述 给定有限集合上二元关系的关系矩阵 xff0c 利用传递闭包的定义式 xff08 不是warshall算法 xff09 求其传递闭包的关系矩阵 源代码 span class token macro property span cla
  • 【Android】解决Expecting member declaration

    问题截图 刚刚安装的android studio安装完成就出现异常错误 原因 新建project的时候 xff0c language项选错了 xff0c 应选java 解决错误的办法 新建一个Project的时候 xff0c Languag
  • 矩阵乘法的实现(一般形式及单个矩阵的n次幂)

    目录 一般矩阵乘法实现矩阵的n次幂的实现 一般矩阵乘法实现 题目描述1 给定m k的布尔矩阵A xff0c 和k n的布尔矩阵B xff0c 求布尔矩阵的乘积AB 源代码1 span class token macro property s
  • 根据给出的关系矩阵,判断该关系所具有的特性

    目录 自反性与反自反性的判断对称性与反对称性的判断传递性的判断 自反性与反自反性的判断 关系R是自反的 xff0c 当且仅当其关系矩阵的主对角线上元素都为1 xff1b 关系R是反自反的 xff0c 当且仅当其关系矩阵的主对角线上元素都为0
  • 输出所有满足条件的关系

    目录 for循环解决简单问题调用库函数解决全排列问题 for循环解决简单问题 题目描述 源代码 span class token macro property span class token directive keyword inclu
  • 按字典序输出给定序列

    上机题目里面有不少挨着的相似的题 xff0c 下面所给的这两道偏简单 xff0c 就介绍一下用python和c实现的代码 题目描述 python实现的代码用到了sorted函数 xff0c 该函数在python3里面有三个参数 xff0c
  • 求给定图中某两点之间某一长度的路径条数

    无向图的一道例题 输出c到d长度为以下长度的路径条数 xff1a 源代码 span class token macro property span class token directive keyword include span spa
  • 洛谷题目CF96B Lucky Numbers的分析

    题目描述 xff1a 佩佳喜欢幸运数字 每个人都知道 xff0c 如果正整数的小数表示不包含除4和7以外的数字 xff0c 那么它们是幸运的 例如 xff0c 数字47 744 xff0c 4是幸运的 xff0c 5 xff0c 17 46
  • VMware Player 虚拟机中音乐播放无声音 问题

    虚拟机中安装的Win7 xff0c 音乐播放无声音 解决办法 xff1a VMware Player 右下角 Sound Card gt connect 即可解决
  • 解决M1芯片 MAC 下 Goland(Intellij系列都适用) 无法 Debug 的问题

    解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题 解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题报错信
  • Java例15.13——使用MVC结构计算三角形面积

    MVC是一种通过模型 视图 控制器构造一个软件或组件的理想办法 在例15 13中首先编一个封装三角形的类 xff0c 然后再编写一个窗口 要求窗口使用3个文本框和1个文本区为三角形对象中的数据提供视图 xff0c 其中3个文本框用来显示和更
  • 网卡远程唤醒功能

    远程唤醒功能配置文档 功能简介 网络唤醒功能可以让用户从一个局域网或者是跨网络环境中远程管理一台或者是多台计算机的开关机状态 下面是在ubuntu桌面版上实现远程唤醒功能的设置步骤 第一步 xff1a 计算机BIOS设置 在计算机开机时按F
  • Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!

    Python 典藏篇 Microsoft Visual C 43 43 14 0 is required xff0c 官方vc 43 43 运行库工具一键式解决 xff01 前言 xff1a error Microsoft Visual C
  • LwIP在stm32上的无操作系统移植

    LwIP是一个轻型IP协议 xff0c 有无操作系统的支持都可以运行 这里的移植是无操作系统移植 LwIP虽然是一个轻型的IP协议 xff0c 但是TCP IP基本功能都有 而且占用的资源不多 xff0c 非常适合用于嵌入式系统 移植的平台
  • HTML5初体验——蛮神奇的

    记得去年在一个公司实习的时候 xff0c 听当时的领导说起过HTML5 xff0c 当时就大体了解了一下 知道了是新的下一代HTML的新标准 xff0c 去掉了HTML4中的一些标签 xff0c 扩展了一些标签内容 其他的就没有继续深入的去
  • Serilog初识(一)————分别Console、Web程序简单使用Serilog

    Serilog简介 Serilog是 NET应用程序的诊断日志库 它易于设置 xff0c 具有干净的API xff0c 并可在所有最新的 NET平台上运行 虽然它在最简单的应用程序中也很有用 xff0c 但Serilog对结构化日志记录的支
  • intellij idea 开发中,创建Maven项目中的子模块以及相关错误解决

    现在开发 xff0c 很多企业都用Maven来进行项目构建 xff0c 关于Maven的优点 xff0c 本文在此不再赘述 而平时我们学习或者做练习基本用到的都是 单项目 单模块模式 xff0c 即一个Maven项目仅包含一个模块 xff0
  • Windows server 2012 出现大量无名已断开连接用户解决办法

    打开cmd命令窗口 xff0c 执行 taskkill f im winlogon exe t
  • 关于HDFS Balancer的一些小技巧

    关于HDFS Balancer的一些小技巧 前言正文原因分析Balancer工具做均衡带宽设置限定均衡范围参数调优 结语 前言 使用HDFS的过程中 xff0c 难免会出现数据不均衡的情况 xff0c 直观表现就是有的服务器磁盘使用率高的吓