机架感知

在这里插入图片描述
每一个用户的wifi和其他用户的wifi都是由交换机或者路由器来进行连接的,路由器,交换机之间也是由路由器交换机来进行连接的,最顶端的路由器交换机就是根,全球根服务器有13台。
https://blog.csdn.net/qq_43668119/article/details/105023668

NameNode依据什么返回三个Datanode
机架感知:
Hadoop1.x
首先按照距离最近找一个节点进行存储,在不同机架下找第二个节点,在与第二个节点同机架下找第3个节点。
缺点(第一个节点向第2个节点进行备份的过程中,可能因为距离太长的原因,发生故障,备份不了,数据丢失。)
Hadoop2.x解决了Hadoop1.x的缺点
Hadoop2.x:
首先按照距离最近找一个节点存储,在同机架下找到第二个节点存储,在其他机架上找第三个节点。
自定义机架感知的两种方式:
在配置文件core-default.xml中,分别能找到两个配置:
1.net.topology.node.switch.mapping.impl

<property>
  <name>net.topology.node.switch.mapping.impl</name>
  <value>org.apache.hadoop.net.ScriptBasedMapping</value>
  <description> The default implementation of the DNSToSwitchMapping. It
    invokes a script specified in net.topology.script.file.name to resolve
    node names. If the value for net.topology.script.file.name is not set, the
    default value of DEFAULT_RACK is returned for all node names.
  </description>

这个类是分配集群中节点机架情况的逻辑代码 ,通过这个类来实现自定义机架
2.
net.topology.script.file.name

<property>
  <name>net.topology.script.file.name</name>
  <value></value>
  <description> The script name that should be invoked to resolve DNS names to
    NetworkTopology names. Example: the script would take host.foo.bar as an
    argument, and return /rack1 as the output.
  </description>
</property>     

通过它设置一个路径,在中设置此路径,此路径是一个脚本文件,可以执行得到集群中的节点的机架分配情况。
自定义机架方式2代码:

package hdfs;

import org.apache.hadoop.net.DNSToSwitchMapping;

import java.util.ArrayList;
import java.util.List;

public class MyRackPerception implements DNSToSwitchMapping{

    public List<String> resolve(List<String> names) {
       List<String> rackList=new ArrayList<String>();
       for (String name:names){
           String rackAddr =null;
           String address = null;
           if(name.startsWith("node")){
                address = name.replace("node","");
           }else if(name.startsWith("192")){
               address = name.substring(name.lastIndexOf(".")+1);
           }
           int ip = Integer.parseInt(address);
           if (ip>=101 && ip<=102){
                rackAddr = "/rack1"+ip;
           }else if (ip>102 && ip<=103){
                rackAddr = "/rack2"+ip;
           }
           rackList.add(rackAddr);
       }
        return rackList;
    }

    public void reloadCachedMappings() {

    }

    public void reloadCachedMappings(List<String> names) {

    }
    
}

机架部署步凑:
1.将上面的代码打成jar包,并放入/hadoop/share/hadoop/common/lib中,并将此jar包同步到其他节点上。
2.修改core-site.xml,指定自定义机架的类,将有关机架的配置文件解开注释,并且修改指定的类路径(可以在idea中右键刚写的那个自定义机架的类,找到copy refenrence,再粘贴复制到core-site.xml中的

net.topology.node.switch.mapping.impl
hdfs.MyRackPerception

中)
3.使用xsync 命令,将core-site.xml同步到其他的节点。
4.重启服务。
5.使用 hdfs dfsadmin -printTopology 命令来查看拓扑。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值