1.自定义实现类
package com.it18zhang.hdfs.rackaware;
package com.it18zhang.hdfs.rackaware;
import org.apache.hadoop.net.DNSToSwitchMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
/**
*机架感知类
*/
public class MyRackAware implements DNSToSwitchMapping {
*机架感知类
*/
public class MyRackAware implements DNSToSwitchMapping {
public List<String> resolve(List<String> names) {
List<String> list = new ArrayList<String>();
for(String str : names){
//输出原来的信息,ip地址(主机名)
System.out.println(str);
//
if(str.startsWith("192")){
//192.168.133.202
String ip = str.substring(str.lastIndexOf(".") + 1);
if(Integer.parseInt(ip) <= 203) {
list.add("/rack1/" + ip);
}
else{
list.add("/rack2/" + ip);
}
}
else if(str.startsWith("s")){
String ip = str.substring(1);
if (Integer.parseInt(ip) <= 203) {
list.add("/rack1/" + ip);
} else {
list.add("/rack2/" + ip);
}
}
}
return list;
}
List<String> list = new ArrayList<String>();
for(String str : names){
//输出原来的信息,ip地址(主机名)
System.out.println(str);
//
if(str.startsWith("192")){
//192.168.133.202
String ip = str.substring(str.lastIndexOf(".") + 1);
if(Integer.parseInt(ip) <= 203) {
list.add("/rack1/" + ip);
}
else{
list.add("/rack2/" + ip);
}
}
else if(str.startsWith("s")){
String ip = str.substring(1);
if (Integer.parseInt(ip) <= 203) {
list.add("/rack1/" + ip);
} else {
list.add("/rack2/" + ip);
}
}
}
return list;
}
public void reloadCachedMappings() {
}
public void reloadCachedMappings(List<String> names) {
}
}
}
}
2.配置core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.133.201/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop</value>
</property>
<property>
<name>topology.node.switch.mapping.impl</name>
<value>com.hdfs.rackaware.MyRackAware</value>
</property>
</configuration>
3.导出jar包
4.复制jar到/soft/hadoop/shared/hadoop/common/lib
5.分发jar.(可以不做)
实际上不需要分发,只在名称节点上运行。
4.复制jar到/soft/hadoop/shared/hadoop/common/lib
5.分发jar.(可以不做)
实际上不需要分发,只在名称节点上运行。
6.重启名称节点
$>hadoop-daemon.sh stop namenode
$>hadoop-daemon.sh start namenode
$>hadoop-daemon.sh stop namenode
$>hadoop-daemon.sh start namenode