前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hadoop HDFS 数据平衡原理

Hadoop HDFS 数据平衡原理

作者头像
我脱下短袖
发布于 2019-12-23 07:20:05
发布于 2019-12-23 07:20:05
2.8K00
代码可运行
举报
文章被收录于专栏:算法无遗策算法无遗策
运行总次数:0
代码可运行

来源:IBM 本文章介绍HDFS数据平衡以及测试结果,我觉得写得非常不错,建议食用

Hadoop 分布式文件系统(Hadoop Distributed FilSystem),简称 HDFS,被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有很多的共同点。HDFS 是一个高容错性的文件系统,提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS 是 Apache Hadoop Core 项目一部分。

数据平衡期望满足的需求

当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值时,我们需要对 Hadoop 底层负责存储数据的 HDFS 进行数据的负载均衡调整,也可以说是各节点机器上数据的存储分布调整。当数据不平衡时,由于 Map 任务可能会被分配给没有存储数据的机器,这会最终导致网络带宽的消耗。另一方面,当一些数据节点数据完全满载时,新的数据块只会被存放在有空余数据的节点机器上,造成了并行读取的可能性。

我们所希望的方式必须满足先决条件:

  1. 数据平衡不会导致数据块减少,数据块备份丢失;
  2. 管理员可以中止数据平衡进程;
  3. 每次数据块移动的大小应该是可控的,这样可以放置阻塞网络;
  4. namenode 不会因为数据平衡服务而导致过于繁忙。

Hadoop 提供的自带工具可以来完成这个任务,并且该工具可以做到热插拔,即无须重启计算机和 Hadoop 服务。$Hadoop_Home/bin 目录下的 start-balancer.sh 脚本就是该任务的启动脚本。

Hadoop HDFS 数据自动平衡原理

数据平衡过程由于平衡算法的原因造成它是一个迭代的、周而复始的过程。每一次迭代的最终目的是让高负载的机器能够降低数据负载,所以数据平衡会最大程度上地使用网络带宽。下图 1 数据平衡流程交互图显示了数据平衡服务内部的交互情况,包括 NameNode 和 DataNode。

图 1. 数据平衡流程交互图

图 1 所示步骤分析如下:

  1. 数据平衡服务首先要求 NameNode 生成 DataNode 数据分布分析报告。
  2. 选择所有的 DataNode 机器后,要求 NameNode 汇总数据分布的具体情况。
  3. 确定具体数据块迁移路线图,保证网络内最短路径,并且确保原始数据块被删除。
  4. 实际开始数据块迁移任务。
  5. 数据迁移任务完成后,通过 NameNode 可以删除原始数据块。
  6. NameNode 在确保满足数据块最低副本条件下选择一块数据块删除。
  7. NameNode 通知数据平衡服务任务全部完成。

HDFS 数据在各个数据节点间可能保存的格式不一致。当存放新的数据块 (一个文件包含多个数据块) 时,NameNode 在选择数据节点作为其存储地点前需要考虑以下几点因素:

  1. 当数据节点正在写入一个数据块时,会自动在本节点内保存一个副本。
  2. 跨节点备份数据块。
  3. 相同节点内的备份数据块可以节约网络消耗。
  4. HDFS 数据均匀分布在整个集群的数据节点上。

Hadoop HDFS 数据自动平衡脚本使用方法

运行 start-balancer.sh 脚本

格式:$Hadoop_home/bin/start-balancer.sh –threshold<threshold>

清单 1. 运行脚本
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$Hadoop_home/bin/start-balancer.sh
启动数据平衡,默认阈值为 10%
bin/start-balancer.sh –threshold 5
启动数据平衡,阈值 5%
如何停止数据平衡:
$Hadoop_home/bin/stop-balancer.sh

hdfs-site.xml 文件里可以设置每秒钟数据节点间移动数据块的最大速度。

清单 2. 设置数据块移动速度
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value>
<description> Specifies the maximum bandwidth that each datanode can utilize for the
balancing purpose in term of the number of bytes per second. </description>
</property>

上面默认是 1MB/s,速度越快完成任务时间也越短,但是这也对机器进程速度有要求。

注意事项:

  1. 阈值越小表示集群内各节点的 DFS 使用率越相近,每次需要的数据均衡时间也越久。
  2. 当应用程序正在使用集群,即对集群进行读写文件操作时,无法达到过于小的阈值。
  3. 每次数据节点的数据迁移交互不会超过 10GB 或者指定的阈值大小数据块。每一个交互过程不会大于 20 分钟。
  4. 上文说明的修改最大移动数据块速度值需要重新启动 HDFS 服务才能生效。
  5. 数据平衡是一个逐渐迭代的过程,可以通过查看输出日志知道这个过程,
清单 3. 日志输出
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
imeStamp Iteration# Bytes Already Moved Bytes LeftTo Move Bytes Being Moved
June 13, 2014 8:48:13 PM 0 0 KB 40.88 TB 2.03 TB
June 13, 2014 8:10:24PM 1 2 TB 38.29 TB 2.01 TB
June 13, 2014 8:31:06PM 2 3.98 TB 36.38 TB 1.98 TB
June 13, 2014 8:54:58PM 3 5.94 TB 34.42 TB 1.96 TB

该脚本不允许多进程运行。

失败原因包括下述因素:

  1. 脚本自动退出条件
  2. 集群内数据已经达到平衡条件了。
  3. 没有数据块可以被移动。
  4. 连续三次迭代中都没有数据块移动。
  5. NameNode 交互失败;
  6. 另外已经有数据平衡进程启动。
清单 4. 失败信息输出
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
The cluster is balanced. Exiting…
No block can be moved. Exiting...
No block has been moved for 3 iterations. Exiting...
Received an IO exception: failure reason. Exiting...
Another balancer is running. Exiting...

测试过程及结果

测试集群内有 2 个节点,集群内机器配置完全一致。分别对新增、删除 1 个节点做数据平衡调整。所有的数据平衡测试都是基于阈值 10%,非此默认值会予以特别说明。

集群机器配置说明如表 1 硬件配置表所示:

表 1. 硬件配置表

根据不同测试场景,举例出 18 种测试用例,如表 2 测试用例表所示:

表 2. 测试用例表

测试用例运行前,运行 hadoop dfsadmin –report 命令可以查看当前集群内各 DataNode 的数据存储情况。图 2 节点机器数据负载情况图所示,2 个存活的数据节点,分别使用了 21.71%和 21.48%,整个集群的使用是 22.83%,各节点上的百分比与总集群的百分比差距在 1%左右,小于默认的 10%,表明目前负载均衡。

图 2. 节点机器数据负载情况图

手动让集群内数据分布不均匀后开始测试用例测试,测试结果如表 3 测试结果表所示。

表 3. 测试结果表

其他性能改善方法

来自中国吉林大学的三位学者针对跨机架机器的数据平衡算法进行了深入研究。首先,他们将跨机架的数据节点根据其被使用情况划分为 4 个类型,

  1. 大于平均使用;
  2. 过度使用;
  3. 小于平均使用;
  4. 几乎没有被使用。

跨机架数据平衡步骤如下所示:

  1. 首先,数据从类型 2 机器移动到类型 4 机器;
  2. 其次,数据从类型 2 机器移动到类型 3 机器;
  3. 最后,数据从类型 1 机器移动到类型 3 机器。

以上步骤在负载没有达到指定阈值前会迭代式执行。

从实际测试过程来看,如果一个机架内某些机器负载均衡 (属于类型 1 和类型 3),剩余的机器一部分高负载 (属于类型 2),一部分几乎没有数据 (属于类型 4),但从整体来看该机架可能属于平均负载 (类型 1 和类型 3),所以在迭代过程中,机架内部信息没有被完整地收集清楚并且数据平衡前,该集群不会被加入到本轮迭代的平衡任务中。但是问题是如果错过本轮数据平衡,也许到下一轮迭代时部分机器已经数据超负荷,甚至导致更严重的宕机。

经过一番数学论证后,学者们给出了解决方案,

  1. 过度使用的机器和大于平均使用的机器以升序形式排序;
  2. 小于平均使用的机器和几乎没有使用的机器以降序形式排序。

结合上述算法上的改动后做了一些实验,实验集群包括 A、B、C 三个机架,其中 A 机架包括三台机器 A1、A2、A3,B 机架包括三台机器 B1、B2、B3,C 机架包括两台机器 C1、C2。集群架构图如下图 3 集群拓扑图所示:

图 3. 集群拓扑图

图 4 数据负载表中可以看出,数据平衡之前机架 A 基本达到高负荷,机架 B 内的三台机器数据没有分布均匀,机架 C 内的两台机器使用率达到平均值。

表 4. 数据负载表

基于两种算法的数据平衡测试结果显示,Hadoop 算法运行了 7.56 分钟,改进算法运行了 6.96 分钟。Hadoop 算法最终平衡了机架 A 上的数据,但是花费了 7.56 分钟。改进算法在任务运行 2.05 分钟后即平衡了机架 A 上的数据。所以对比可以看出改进算法的效率较高。具体数据图 4 数据负载分析图。

图 4. 数据负载分析图

结束语

通过本文的学习,读者了解了使用 Hadoop 自带工具对节点内机器数据存储进行平衡工作的方式。本文对其工作原理、工作流程等做了详细描述,从代码角度、交互角度等对数据平衡的设计原理做了深入探讨。读者了解到已经有针对 Hadoop 现有数据平衡算法的优化算法产生,并且通过论文提供的测试数据可以看到改进算法的效率相较 Hadoop 自带算法而言,更快速、更高效。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法无遗策 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hadoop学习笔记(二)之HDFS
面对各行各业日益增长的数据量,普通的机器无论在存储空间还是管理能力上都显得力不从心。既然单台机器的资源有限,那么增加机器的方式是否可行?答案是肯定的,于是乎出现了分布式的概念。分布式文件管理系统便可以将一堆机器组合在一起,并隐藏细节,让用户感觉与之前单机储存文件毫无差别,但其实文件是通过网络来访问的。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
小闫同学啊
2020/04/22
8830
HDFS分布式文件存储系统详解
优点: 1.处理超大文件 能用来存储管理PB级的数据 1PB = 1024TB 2.处理非结构化数据、半结构化数据、结构化数据 流式的访问数据 一次写入、多次读取 3.运行于廉价的商用机器集群上 可运行在低廉的商用硬件集群上 故障时能继续运行且不让用户察觉到明显的中断
全栈程序员站长
2022/08/22
1.6K0
HDFS分布式文件存储系统详解
HDFS设计原理最详讲解
我们都知道HDFS是来源于Google的GFS的分布式系统,它的特点是易于扩展,同时可以开发于廉价的机器上,同时他可以保证所有文件的备份数据维持在健康的数量上,同时非常适合进行批处理,因为设计之处就是在大数据文件大量的操作是顺序读的操作,同时也非常适合流处理。
Tim在路上
2020/08/05
9230
HDFS shell 快查
HDFS设计的主要目的是对海量数据进行处理,也就是说在其上能够储存很大量文件,HDFS提供多种的访问的策略,首先我们来认识其通过shell接口的访问方式。
Tim在路上
2020/08/05
4980
独家 | 一文读懂Hadoop(二)HDFS(上)
随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值。 读者可以通过阅读“一文读懂Hadoop”系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文章了解Hado
数据派THU
2018/01/30
2.4K0
独家 | 一文读懂Hadoop(二)HDFS(上)
Hadoop HDFS 实现原理图文详解
Hadoop分布式文件系统 (HDFS) 是运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。
一个会写诗的程序员
2021/12/16
1.5K0
Hadoop HDFS 实现原理图文详解
大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性
思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢?   如下是DataNode节点保证数据完整性的方法。
黑泽君
2019/03/04
7040
大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性
Hadoop使用(二)
前提和设计目标 硬件错误 硬件错误是常态而不是异常。HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据。我们面对的现实是构成系统的组件数目是巨大的,而且任一组件都有可能失效,这意味着总是有一部分HDFS的组件是不工作的。因此错误检测和快速、自动的恢复是HDFS最核心的架构目标。 流式数据访问 运行在HDFS上的应用和普通的应用不同,需要流式访问它们的数据集。HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。PO
cloudskyme
2018/03/20
7390
Hadoop使用(二)
HDFS原理 | 一文读懂HDFS架构与设计
HDFS(Hadoop Distributed File System)是我们熟知的Hadoop分布式文件系统,是一个高容错的系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS以流式数据访问模式存储超大文件,将数据按块分布式存储到不同机器上,并被设计成适合运行在普通廉价硬件之上。本文根据Hadoop官网HDFS Architecture这一章节提炼而成,加上笔者自己的理解,希望能够帮助读者快速掌握HDFS。
大数据技术架构
2020/04/21
5K0
HDFS原理 | 一文读懂HDFS架构与设计
hdfs的八大安全和可靠策略总结和设计基础与目标[通俗易懂]
hdfs 全称:Hadoop Distributed File System Hadoop分布式文件系统
全栈程序员站长
2022/08/05
6890
大数据Hadoop之HDFS认识
源自Google的GFS(Google分布式文件系统)论文,分布式文件系统(HDFS)是GFS的克隆版。HDFS负责数据文件的存储,可让多机器上分享存储空间,让实际上通过网络来访问文件的动作,用户就像是访问本地磁盘一样便捷。 即使HDFS集群中某些节点脱机, 整体来说系统仍然可以持续运作而不会有数据丢失。 HDFS提供了一个低成本、高可靠、高容错、高性能的分布式文件系统。 1.低成本主要体现在搭建HDFS主要是通过横向扩展机器数量而非花高价钱购进昂贵的服务器。 2.高可靠主要体现在 1)、HDFS
小小科
2018/05/04
9760
大数据Hadoop之HDFS认识
hdfs常用操作命令
  先说一下”hadoop fs 和hadoop dfs的区别”,看两本Hadoop书上各有用到,但效果一样,求证与网络发现下面一解释比较中肯。
全栈程序员站长
2022/08/09
1K0
hdfs常用操作命令
Hadoop集群调优大作战,这些技巧你掌握了吗?
HDFS的DataNode节点保存数据的路径由dfs.datanode.data.dir参数决定,其默认值为file://${hadoop.tmp.dir}/dfs/data,若服务器有多个磁盘,必须对该参数进行修改。如服务器磁盘如上图所示,则该参数应修改为如下的值。
TASKCTL 任务调度平台
2024/11/06
1980
Hadoop集群调优大作战,这些技巧你掌握了吗?
HDFS 基本概念及常用操作 学习笔记
Hadoop 附带了一个名为 HDFS(Hadoop Distributed File System, Hadoop分布式文件系统)的分布式文件系统,基于 Hadoop 的应用程序使用 HDFS 。HDFS 是专为存储超大数据文件,运行在集群的商品硬件上。它是容错的,可伸缩的,并且非常易于扩展。
大鹅
2021/06/16
5310
HDFS应用场景、原理、基本架构及使用方法
如果一个文件大小为10K,则1亿个文件大小仅为1TB(但要消耗掉NameNode 20GB内存)
王知无-import_bigdata
2020/08/20
1.8K0
HDFS应用场景、原理、基本架构及使用方法
Apache Hadoop HDFS 架构
HDFS(Hadoop Distributed File System)是Hadoop核心组成之一,是分布式计算中数据存储管理的基础,被设计成适合运行在通用硬件上的分布式文件系统。是一个块结构的文件系统,其中每个文件被划分为预定大小的块。这些块存储在一台或多台计算机的集群中。 HDFS可以部署在支持Java的各种机器上。虽然可以在一台机器上运行多个数据节点,但在实际世界中,这些数据节点分布在各种机器上。总的来说,HDFS架构中有两类节点,一类是NameNode,又叫“元数据节点”,另一类是DataNode,又叫“数据节点”,分别执行Master和Worker的具体任务。HDFS是一个(Master/Slave)体系结构,“一次写入,多次读取”。HDFS的设计思想:分而治之—将大文件、大批量文件分布式存放在大量独立的机器上。架构见下图:
jack.yang
2025/04/05
1410
Apache Hadoop HDFS 架构
快速学习-DataNode
1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。 3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。 4)集群运行中可以安全加入和退出一些机器。
cwl_java
2020/02/19
6610
【万字长文】HDFS最全知识点整理(建议收藏)
1)跟NN通信查询元数据(block所在的DN的节点),找到文件块所在的DN的服务器。2)挑选一台DN(就近原则,然后随机)服务器,请求建立socket流。3)DN开始发送数据(从磁盘里读取数据放入流,一packet为单位做校验) 4)客户端以packet为单位接收,现在本地缓存,然后写入目标文件中,后面的block块就相当于append到前面的block块,最后合成最终需要的文件。
857技术社区
2022/05/17
3.2K0
【万字长文】HDFS最全知识点整理(建议收藏)
hdfs平衡分布
这篇文章是从网上看到的,觉得很好就收藏了,但是最终不知道出处了。 Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。 在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下: sh $HAD
岑玉海
2018/02/28
1.7K0
hdfs平衡分布
HDFS极简教程
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。 HDFS有很多特点: ①保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。 ②运行在廉价的机器上。(商用机) ③适合大数据的处理。多大?多小?HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射
架构师小秘圈
2018/04/02
1.4K0
HDFS极简教程
相关推荐
Hadoop学习笔记(二)之HDFS
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档