- 机架感知
保证在交换机故障或者集群内部时间问题出现时,数据仍然可用。hadoop的rack aware是逻辑上的概念,与真实的机架只存在概念上的对应关系。
- 编写一个脚本或者实现接口org.apache.hadoop.net.DNSToSwitchMapping
节点机架表示形如:“/a/b/c”。“/a/b/a”与“/a/b/c”的路径前缀相同所以节点a和节点c在同一个机架上。默认机架为“/default-rack”(topology.script.file.name或topology.node.switch.mapping.impl均未设置)。
- 自定义机架感知类
- hadoop的类路径:
hdfs classpath
或者
hadoop classpath
- 机架感知实现类
public class MyDNSToSwitchMapping implements DNSToSwitchMapping{
//解析主机名或IP地址,返回网络路径/a/b
public List<String> resolve(List<String> names){
List<String> paths=new ArrayList<>();
if(names != null && !names.isEmpty()){
System.out.println(names.size() + " : " + names.get(0));
for(String hostname : names){
Integer no=Integer.parseInt(hostname.substring(1));
String rackPath="";
if(no<=400){
rackPath="/rack1/" + hostname;
}else{
rackPath="/rack2/" + hostname;
}
paths.add(rackPath);
}
}
return paths;
}
public void reloadCacheMappings(){
// 无
}
public void reloadCacheMappings(List<String> names){
// 无
}
}
- 将打成的jar包分发到所有节点的以下目录中
${HADOOP_HOME}/share/**
一般可以放在这
${HADOOP_HOME}/share/hadoop/common/lib/
可以在eclipse中右击项目通过Export导出jar包(默认配置即可)。
- 配置自定义机架感知类——指定类名topology.node.switch.mapping.impl
配置core-site.xml
<property>
<name>net.topology.node.switch.mapping.impl</name>
<value>com.bee.MyDNSToSwitchMapping</value>
</property>
- 分发core-site.xml重启集群
- 大吞吐量集群拷贝
通过hadoop的mapreduce实现的并行,可以递归复制文件夹。
# 本集群拷贝
hadoop distcp /usr/bee/data /usr/bee/foo
# 跨集群拷贝
hadoop distcp hdfs://node02:8020/user/data hdfs://192.168.31.54:8020/user/tmp