You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

HDFS 中的文件在物理上都是以分块block存储的hadoop2.x 默认块大小为128m 块大小可以通过 hdfs-site.xml 文件中的参数 dfs.block.size 进行设置:

<property> 
	<name>dfs.block.size</name> 
	<value>134217728</value> 
</property>

分块存储的好处有: 1一个文件有可能大于集群中的所有磁盘块机制可以很好地解决这个问题 2使用块作为文件存储的逻辑单位可以简化存储子系统 3块非常适合用于数据备份冗余的数据副本进而提供数据容错能力。 !1438655-20210220083347391-59878081.png

块大小的设置是否合理,对系统性能影响很大:

  1. 设置太小,会增加寻址时间:一个正常大小的文件,被拆分成很多小 block在读取的时候需要找到所有这些 block。
  2. 设置太大,从磁盘传输数据的时间会明显大于定位到这个 block 具体位置所需的时间,进而导致处理此 block 时速度变慢。

一、HDFS 的机架感知机制

HDFS 的机架感知,又叫机架策略,用来决定副本存放位置的策略。 以默认的副本数=3为例

  • 1st replica. 如果写请求方所在机器是其中一个datanode,则直接存放在本地,否则随机在集群中选择一个datanode.
  • 2nd replica. 第二个副本存放于不同第一个副本的所在的机架.
  • 3rd replica.第三个副本存放于第二个副本所在的机架,但是属于不同的节点. HDFS采用一种称为机架感知的策略来改进数据的可靠性、可用性和网络带宽的利用率。通过一个机架感知的过程NameNode可以确定每一个DataNode所属的机架id。

二、HDFS机架感知

2.1 网络拓扑结构

在海量数据处理中,主要限制原因之一是节点之间数据的传输速率,即带宽。因此,将两个节点之间的带宽作为两个节点之间的距离的衡量标准。

hadoop为此采用了一个简单的方法:把网络看作一棵树,两个节点之间的距离是他们到最近共同祖先的距离总和。该树中的层次是没有预先设定的, 但是相对与数据中心,机架和正在运行的节点,通常可以设定等级。具体想法是针对以下每个常见,可用带宽依次递减: 1>.同一节点上的进程 2>.同一机架上的不同节点 3>.同一数据中心中不同机架上的节点 4>.不同数据中心的节点

举个例子假设有数据中心d1机架r1中的节点n1。该节点可以表示为“/d1/r1/n1”。利用这种标记这里给出四种距离描述 !v2-bc178ed60f03fb733003a675e3828ba4_720w.webp 注意: 1当没有配置机架信息时全部的机器Hadoop都默认在同一个默认的机架下,以名为”/default-rack”。这样的情况下不论什么一台datanode机器无论物理上是否属于同一个机架。都会被觉得是在同一个机架下。 2一旦配置topology.script.file.name。就依照网络拓扑结构来寻找datanode。topology.script.file.name这个配置选项的value指定为一个可运行程序。通常为一个脚本。

三、HDFS负载均衡

3.1 HDFS负载均衡

Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况例如当集群内新增、删除节点或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时Map任务可能会分配到没有存储数据的机器这将导致网络带宽的消耗也无法很好的进行本地计算。 当HDFS负载不均衡时需要对HDFS进行数据的负载均衡调整即对各节点机器上数据的存储分布进行调整。从而让数据均匀的分布在各个DataNode上均衡IO性能防止热点的发生。进行数据的负载均衡调整必须要满足如下原则

  • 数据平衡不能导致数据块减少,数据块备份丢失
  • 管理员可以中止数据平衡进程
  • 每次移动的数据量以及占用的网络资源,必须是可控的
  • 数据均衡过程不能影响namenode的正常工作

3.2 HDFS负载均衡原理

数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。该数据均衡算法每次迭代的逻辑如下: !v2-1a675ef9a5b7e5d913c75e769a12c606_720w.webp 步骤分析如下:

  1. 数据均衡服务Rebalancing Server首先要求 NameNode 生成 DataNode 数据分布分析报告,获取每个DataNode磁盘使用情况
  2. Rebalancing Server汇总需要移动的数据分布情况计算具体数据块迁移路线图。数据块迁移路线图确保网络内最短路径
  3. 开始数据块迁移任务Proxy Source Data Node复制一块需要移动数据块
  4. 将复制的数据块复制到目标DataNode上
  5. 删除原始数据块
  6. 目标DataNode向Proxy Source Data Node确认该数据块迁移完成
  7. Proxy Source Data Node向Rebalancing Server确认本次数据块迁移完成。然后继续执行这个过程直至集群达到数据均衡标准

3.2.1 DataNode分组

在第2步中HDFS会把当前的DataNode节点根据阈值的设定情况划分到Over、Above、Below、Under四个组中。在移动数据块的时候Over组、Above组中的块向Below组、Under组移动。 !v2-1a675ef9a5b7e5d913c75e769a12c606_720w 1.webp

3.2.2 HDFS数据自动平衡脚本使用

在Hadoop中包含一个start-balancer.sh脚本通过运行这个工具启动HDFS数据均衡服务。该工具可以做到热插拔即无须重启计算机和 Hadoop 服务。HadoopHome/bin目录下的startbalancer.sh脚本就是该任务的启动脚本。启动命令为HadoopHome/bin目录下的startbalancer.sh脚本就是该任务的启动脚本。启动命令为Hadoop_home/bin/start-balancer.sh threshold

影响Balancer的几个参数

  • -threshold

  • 默认设置10参数取值范围0-100

  • 参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡

  • dfs.balance.bandwidthPerSec

  • 默认设置10485761M/S, 需要跟进自己的集群带宽情况进行设置一般为30M或者60M左右

  • 参数含义Balancer运行时允许占用的带宽