hadoop 配置 机架感知 rack awareness

2023-11-25 11:51

本文主要是介绍hadoop 配置 机架感知 rack awareness,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Rack awareness 机架感知

1、什么是机架感知,hadoop的策略是什么

这是Hadoop的机架感知机制。

机架感知(RackAwareness)

通常,大型Hadoop集群会分布在很多机架上。在这种情况下,

  -- 希望不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架。

  -- 为了提高容错能力,名称节点会尽可能把数据块的副本放到多个机架上。

综合考虑这两点的基础上Hadoop设计了机架感知功能。

机架感知设计思想

首先,一个重要的假设前提是HDFS运行于一个具有树状网络拓扑结构的集群上。

例如集群由多个数据中心组成,每个数据中心里有多个机架,而每个机架上有多台计算机(数据节点)

网络拓扑(NetworkTopology)


在Hadoop里,以类似于一种文件目录结构的方式来表示节点。

例如,R1的位置可以表示为 /D1/R1,而H12的位置可以表示为 /D2/R4/H12。


当数据节点启动的时候,需要通过一种机制来明确它在集群中的位置,才能构建完整的网络拓扑图。

因此,首先它需要确认它的上级节点(通常也就是机架)的位置。数据节点程序支持选项”-p<id>”或”-parent<id>”从命令行读入上级节点位置。

如果没有指定这个选项,那么会使用一个默认的上级节点。

至于如何获取上级节点信息,由实施Hadoop的机构自行决定。一个常用的做法是使用脚本打印当前机器的上级节点信息到标准输出stdout。

这样数据节点启动的时候就可以获取到上级节点的信息(Hadoop应该是通过接口’DNSToSwitchMapping’来解析这个信息,具体请参考手册的Class说明)。



数据节点会把它的位置信息发给名称节点。

当名称节点收到数据节点的位置信息以后,它会先检查网络拓扑中是否已经有这个数据节点的记录。

如果有,它会把旧的记录删除,加入新的节点位置信息。


副本放置(ReplicaPlacement)


数据块的副本放置策略的目的是在以下两者之间取得平衡:

-- 使数据的可靠性和可用性最大化

-- 使写入数据产生的开销最小化

因此,当一个新的数据块被创建的时候,遵循以下规则:


-- 第1个副本放置于本地节点

-- 第2个副本放置于不同的机架

-- 第3个副本放置于本地机架的不同节点

-- 其余的副本在遵循以下限制的前提下随机放置

     -- 1个节点最多放置1个副本

     -- 如果副本数少于2倍机架数,不可以在同一机架放置超过2个副本


当重新复制一个数据块的时候,遵循以下规则:


-- 如果已有1个副本,把第2个副本放置在不同的机架

-- 如果已有2个副本且处于同一机架,把第3个副本放置在不同的机架

-- 如果已有2个副本但不处于同一机架,把第3个副本放置在和第1个副本相同的机架

-- 当可用副本数超过2个的时候,随机放置


当发生数据读取的时候,名称节点首先检查客户端是否位于集群中。

如果是的话,就可以按照由近到远的优先次序决定由哪个数据节点向客户端发送它需要的数据块。

也就是说,对于拥有同一数据块副本的节点来说,在网络拓扑中距离客户端近的节点会优先响应

2、编辑hadoop的配置文件 core-site.xml

        <property>
                <name>net.topology.script.file.name</name>
                <value>/home/hadoop/hadoop-2.7.1/rack.py</value>

        </property>

其中rack.py可以采有其它编程语言,例如shell,c等,路径也可改变,但要注意权限问题

3、在指定目录下编辑rack.py


#!/usr/bin/python
import sys
if sys.argv[1]=="192.168.137.13":
        print "/hadoop-rackA"
elif sys.argv[1]=="192.168.137.14":
        print "/hadoop-rackB"
elif sys.argv[1]=="192.168.137.15":
        print "/hadoop-rackB"
else:
        print "/default-rack"
保存后,加上执行权限

4、测试

stop-dfs.sh

start-dfs.sh

hdfs dfsadmin -printTopology

[hadoop@hadoop-namenode hadoop]$ hdfs dfsadmin -printTopology
Rack: /hadoop-rackA
   192.168.137.13:50010 (hadoop-datanode1)

Rack: /hadoop-rackB
   192.168.137.14:50010 (hadoop-datanode2)
   192.168.137.15:50010 (hadoop-datanode3)




这篇关于hadoop 配置 机架感知 rack awareness的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423750

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令