每一个用户的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 命令来查看拓扑。