一旦工作,那就要努力的干,聪明的干,快速的干——用省下来的时间干自己喜欢干的事情。!

自定义机架感知

hadoop lampnick 1980℃ 0评论
### 自定义机架感知
0. 数据节点的量

```
[rack1]
s100
s101
s102

[rack2]
s103
s104
s105
s106
```


1. 创建类实现DNSToSwitchMapping接口
2. 配置文件core-site.xml
    
```
<!-- Topology Configuration -->
    <property>
      <name>net.topology.node.switch.mapping.impl</name>
      <value>com.lampnick.rackware.MyDNSToSwichMapping</value>
    </property>
```

3. 分发core-site.xml
4. 编译程序,打成jar,分发到所有节点的hadoop的classpath下
    /soft/hadoop/shared/common/lib
5. 分发jar


增加一个数据节点
1. 克隆一个节点
2. 启动新节点
3. 修改新克隆的主机的IP和主机名
    [/etc/hostname]=s105
    [/etc/sysconfig/network-scripts/ifcfg-eno16777736]
4. 修改s100的hosts文件/etc/hosts文件,然后分发(先修改/soft/hadoop/etc/hadoop/slaves_for_loop加105)
    增加192.168.88.105
5. 在s100上ssh到新节点
    首次需要输入yes
6. 修改s100的slaves文件,再分发
7. 修改hdfs-site.xml的2ndNN为105
    
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>s105:50090</value>
        </property>
</configuration>
8. 关闭stop-dfs.sh
9. 开启start-dfs.sh
实现类如下
package com.lampnick.rackware;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.net.DNSToSwitchMapping;

public class MyDNSToSwichMapping implements DNSToSwitchMapping {

    /**
     * 传递的是客户端的IP列表,返回机架感知的路径列表
     */
    @Override
    public List<String> resolve(List<String> names) {

        List<String> list = new ArrayList<String>();
        if (names != null && names.size() > 0) {
            for (String name : names) {
                // 主机名s101
                int ip = 0;
                if (name.startsWith("s")) {
                    String no = name.substring(1);
                    ip = Integer.parseInt(no);
                } else if (name.startsWith("192")) {
                    // 192.168.88.111
                    ip = Integer.parseInt(name.substring(name.lastIndexOf(".") + 1));

                }

                if (ip < 103) {
                    list.add("/rack1/" + ip);
                } else {
                    list.add("/rack2/" + ip);
                }
            }
        }
        //写入文件中
        try {
            FileOutputStream fos = new FileOutputStream("/home/hadoop/dns.txt");
            for (String name : list) {
                fos.write((name + "\r\n").getBytes());
            }
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;

    }

    @Override
    public void reloadCachedMappings() {
        // TODO Auto-generated method stub

    }

    @Override
    public void reloadCachedMappings(List<String> arg0) {
        // TODO Auto-generated method stub

    }

}

转载请注明:MitNick » 自定义机架感知

喜欢 (0)or分享 (0)
头像
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址