• [HDFS_add_3] HDFS 机架感知



    0. 说明

       HDFS 副本存放策略 && 配置机架感知


     1. HDFS 的副本存放策略

      HDFS 的副本存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上。

      这样集群可在完全失去某一机架的情况下还能存活。同时,这种策略减少了机架间的数据传输,提高了写操作的效率,因为数据块只存放在两个不同的机架上,减少了读取数据时需要的网络传输总带宽。这样在一定程度上兼顾了数据安全和网络传输的开销。

      


    2. 配置机架感知

    rack node num
    1 s101 | s102 | s103 1
    2 s104 | s105 2



      验证副本放置策略:3副本

      本地机架放一个 s102 | s103

      离架放两个 s104 & s105

      0. 将 s105 配置为 DataNode

    # 修改 slaves
    vi slaves
    
    # 添加 s105
    s105

      1. 打包源代码,将 jar 包发送到 /soft/hadoop/share/hadoop/common/lib 下,并同步

    xsync.sh /soft/hadoop/share/hadoop/common/lib/myhadoop-1.0-SNAPSHOT.jar

      2. 设置配置文件 core-site.xml ,添加

    <property>
      <name>net.topology.node.switch.mapping.impl</name>
      <value>hadoop.hdfs.TestRack</value>
    </property>

      3. 同步配置文件

    xsync.sh core-site.xml

      4. 启动并查看 DataNode 启动日志

    start-dfs.sh

      5. 测试方法,查看 s101 的 DataNode 启动日志,查看 rack1 和 rack2 分配情况

    cat /soft/hadoop/logs/hadoop-centos-namenode-s101.log

     3. 代码编写

    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) {
    
        }
    }

  • 相关阅读:
    Centos7网络配置(VMware)
    Djangoform表单Ajax控制跳转
    selenium Webdriver 处理iFrame之间的切换问题------------
    Eclipse相关的快捷键
    selenium webdriver----如何处理div弹窗、alert、confirm、prompt对话框-------------------
    处理basic认证,浏览器自带弹窗的(非windows弹窗)处理-----------------
    元素的Actions(特效)及基本UI控件操作
    查找页面元素一
    调用exe文件(一般处理登陆安全窗口)+睡眠等待(--------------------)
    用autoit识别windows窗口(保存弹窗及登陆(basic认证)相关的弹窗)-----
  • 原文地址:https://www.cnblogs.com/share23/p/9903409.html
Copyright © 2020-2023  润新知