Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将
引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平
衡是非常重要的。
在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下:
sh $HADOOP_HOME/bin/start-balancer.sh --t 10%
这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。
Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:
1. 在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。
2. 系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。
3. Block在移动的过程中,不能暂用过多的资源,如网络带宽。
4. 数据重分布程序在执行的过程中,不能影响name node的正常工作。
基于这些基本点,目前Hadoop数据重分布程序实现的逻辑流程如下图所示:
Rebalance程序作为一个独立的进程与name node进行分开执行。
1 Rebalance Server从Name Node中获取所有的Data Node情况:每一个Data Node磁盘使用情况。
2 Rebalance Server计算哪些机器需要将数据移动,哪些机器可以接受移动的数据。并且从Name Node中获取需要移动的数据分布情况。
3 Rebalance Server计算出来可以将哪一台机器的block移动到另一台机器中去。
4,5,6 需要移动block的机器将数据移动的目的机器上去,同时删除自己机器上的block数据。
7 Rebalance Server获取到本次数据移动的执行结果,并继续执行这个过程,一直没有数据可以移动或者HDFS集群以及达到了平衡的标准为止。
Hadoop现有的这种Balancer程序工作的方式在绝大多数情况中都是非常适合的。
现在我们设想这样一种情况:
1 数据是3份备份。
2 HDFS由2个rack组成。
3 2个rack中的机器磁盘配置不同,第一个rack中每一台机器的磁盘空间为1TB,第二个rack中每一台机器的磁盘空间为10TB。
4 现在大多数数据的2份备份都存储在第一个rack中。
在这样的一种情况下,HDFS级群中的数据肯定是不平衡的。现在我们运行Balancer程序,但是会发现运行结束以后,整个HDFS集群中的数据依旧不平衡:rack1中的磁盘剩余空间远远小于rack2。
这是因为Balance程序的开发原则1导致的。
简单的说,就是在执行Balancer程序的时候,不会将数据中一个rack移动到另一个rack中,所以就导致了Balancer程序永远无法平衡HDFS集群的情况。
针对于这种情况,可以采取2中方案:
1 继续使用现有的Balancer程序,但是修改rack中的机器分布。将磁盘空间小的机器分叉到不同的rack中去。
2 修改Balancer程序,允许改变每一个rack中所具备的block数量,将磁盘空间告急的rack中存放的block数量减少,或者将其移动到其他磁盘空间富余的rack中去。
分享到:
相关推荐
hadoop hdfs balancer数据均衡,在集群扩容或数据缺失的情况下,可以重新均衡数据
3. Balancer工具:使用HDFS Balancer工具平衡数据节点间的负载,确保数据均匀分布。 六、云计算中的Hadoop 在云计算环境中,Hadoop被广泛应用于数据仓库、实时分析、流处理等场景。例如,Amazon EMR提供了托管的...
【HDFS Balancer】HDFS Balancer 是Hadoop提供的一个工具,用于在集群中自动平衡数据分布。它通过移动数据块来达到目标,使得每个DataNode的存储利用率在一定阈值范围内波动,以避免某几个节点过于繁忙,而其他节点...
### 大数据中Hadoop Shell介绍 在大数据处理领域,Hadoop无疑占据着举足轻重的地位。Hadoop是一款能够高效存储和处理大规模数据集的开源软件框架,它支持在集群环境中运行分布式应用程序。为了更好地管理和操作...
### HDFS 命令原理介绍 #### HDFS 概述 HDFS(Hadoop Distributed File System)是一种专为大规模数据处理设计的分布式文件系统。它具有高度容错性、可扩展性和高吞吐率等特点,非常适合存储和处理大规模数据集。 ...
自动Balancer是Hadoop集群中的一种负载均衡机制,可以根据集群中的数据分布情况,自动地将数据重新分布到不同的节点上,以提高集群的性能和可靠性。 启动Balancer的命令: hadoop balancer 配置Balancer时传输...
为避免“数据风暴”,即大量数据快速移动,可以使用`hdfs balancer`命令进行手动数据均衡。设置合适的`dfs.balance.bandwidthPerSec`参数限制数据传输速率,防止网络过载。 3. **合并碎小文件**: 碎小文件会增加...
- `balancer`:平衡HDFS的数据节点,确保集群资源的均衡分配。 3. **MapReduce操作**: - `hadoop jar`:运行MapReduce作业,通常格式为`hadoop jar your-jar-file main-class input output`,其中输入和输出分别...
通过以上介绍可以看出,HDFS Shell命令是管理和维护HDFS的重要工具之一。无论是文件操作还是系统管理,Shell命令都能提供强大的支持。掌握这些命令对于高效地使用HDFS至关重要。例如,`fs`命令集主要用于文件操作,...
* 如果手动平衡,则使用 start-balancer.sh 和 bin/hadoop balancer 命令,添加参数 -threshold 5,可以调整平衡阈值。 在使用 start-balancer.sh 时,如果在 hdfs-site.xml 里面没有配置 dfs.balance....
可以使用 start-balancer.sh 命令来启动平衡进程,也可以使用 bin/hadoop balancer 命令来启动平衡进程。在使用 start-balancer.sh 命令时,如果在 hdfs-site.xml 文件中没有配置 dfs.balance.bandwidthPerSec 参数...
10. **balancer命令**:执行HDFS的均衡器,平衡不同DataNode之间的数据分布。 11. **fsck命令**:检查HDFS的健康状况,查找和修复错误。 除了上述命令,HDFS Shell还支持更多高级功能,如Erasure Coding(EC)配置...
3. **负载均衡**:通过`hdfs balancer`命令,可以自动平衡DataNode间的存储负载。 4. **副本放置策略**:通过自定义副本放置策略,可以优化数据访问性能,例如将副本放在离计算任务最近的节点上。 ### 六、HDFS的...
新版可以通过`hdfs balancer`命令实现,但手动重写所有数据或先集中数据再平衡可能更有效。 4. HDFS高可用性: - 支持NameNode HA,active和standby NameNode协同工作,JournalNodes用于日志同步,保证standby节点...
- `balancer`:HDFS数据均衡工具,用于重新分配HDFS中的数据块,确保集群的数据分布均匀。 为了在Windows 10上顺利运行Hadoop,还需要确保正确配置了`core-site.xml`、`hdfs-site.xml`、`yarn-site.xml`和`mapred-...
用于 Apache Hadoop HDFS 的 DataNode 卷重新平衡工具该项目旨在填补和系列的空白:当一个硬盘驱动器在 Datanode 上死机并被替换时,没有真正的方法将块从最常用的硬盘移动到新添加的硬盘上——因此是空的。...
配置Hadoop包括修改配置文件(如core-site.xml、hdfs-site.xml和mapred-site.xml)以及格式化HDFS文件系统。在Hadoop 0.20之后的版本中,配置文件被拆分成了三个部分,需要对每个部分单独进行配置。此外,还需要设置...
- 执行`$bin/hadoop balancer`命令来重新平衡数据分布,确保数据在所有节点间均匀分布。 5. **验证操作**: - 检查`jps`命令输出,确认新增节点上的DataNode和TaskTracker服务已成功启动。 - 使用`$bin/hadoop ...