标签:rac 传输 comm value int 取数据 void imp hot
HDFS 副本存放策略 && 配置机架感知
HDFS 的副本存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上。
这样集群可在完全失去某一机架的情况下还能存活。同时,这种策略减少了机架间的数据传输,提高了写操作的效率,因为数据块只存放在两个不同的机架上,减少了读取数据时需要的网络传输总带宽。这样在一定程度上兼顾了数据安全和网络传输的开销。
rack | node | num |
1 | s101 | s102 | s103 | 1 |
2 | s104 | s105 | 2 |
验证副本放置策略:3副本
本地机架放一个 s102 | s103
离架放两个 s104 & s105
# 修改 slaves
vi slaves
# 添加 s105
s105
xsync.sh /soft/hadoop/share/hadoop/common/lib/myhadoop-1.0-SNAPSHOT.jar
<property> <name>net.topology.node.switch.mapping.impl</name> <value>hadoop.hdfs.TestRack</value> </property>
xsync.sh core-site.xml
start-dfs.sh
cat /soft/hadoop/logs/hadoop-centos-namenode-s101.log
package hadoop.hdfs; import java.util.ArrayList; import java.util.List; public class TestRack implements org.apache.hadoop.net.DNSToSwitchMapping { /** * @param names 传入一个主机名或 ip 地址的列表 * @return 返回网络拓扑路径 /rack1/192.168.23.102 */ public List<String> resolve(List<String> names) { List<String> list = new ArrayList<String>(); for (String name : names) { // 如果参数是主机名 if (name.startsWith("s")) { // 获取后缀 int suffix = Integer.parseInt(name.substring(1)); // 如果后缀是 101-103,则在 rack1 中 if (suffix < 104) { String path = "/rack1/"; list.add(path); } else { String path = "/rack2/"; list.add(path); } } // 参数是 ip地址 192.168.23.101 else { //获取后缀 int suffix = Integer.parseInt(name.split("\\.")[3]); // 如果后缀是 101-103,则在 rack1中 if (suffix < 104) { String path = "/rack1/"; list.add(path); } else { String path = "/rack2/"; list.add(path); } } } return list; } public void reloadCachedMappings() { } public void reloadCachedMappings(List<String> names) { } }
标签:rac 传输 comm value int 取数据 void imp hot
原文地址:https://www.cnblogs.com/share23/p/9903409.html