• Yarn下分片和分块源代码分析


    public class FileSplit extends InputSplit implements Writable {
    	private Path file;
    	private long start;
    	private long length;
    	private String[] hosts;
    
    	public FileSplit() {
    	}
    
    	public FileSplit(Path file, long start, long length, String[] hosts) {
    		this.file = file;
    		this.start = start;
    		this.length = length;
    		this.hosts = hosts;
    	}
    
    	public Path getPath() {
    		return this.file;
    	}
    
    	public long getStart() {
    		return this.start;
    	}
    
    	public long getLength() {
    		return this.length;
    	}
    
    	public String toString() {
    		return this.file + ":" + this.start + "+" + this.length;
    	}
    
    	public void write(DataOutput out) throws IOException {
    		Text.writeString(out, this.file.toString());
    		out.writeLong(this.start);
    		out.writeLong(this.length);
    	}
    
    	public void readFields(DataInput in) throws IOException {
    		this.file = new Path(Text.readString(in));
    		this.start = in.readLong();
    		this.length = in.readLong();
    		this.hosts = null;
    	}
    
    	public String[] getLocations() throws IOException {
    		if (this.hosts == null) {
    			return new String[0];
    		}
    		return this.hosts;
    	}
    }
    

    代码比较简单, 四部分组成  文件路径 ,启始位置,长度,Host列表

    Host为什么是个列表

    看分片的时候创建函数

    splits.add(makeSplit(path, length - bytesRemaining,
                                    splitSize, blkLocations[blkIndex].getHosts()));

    再来看块的源代码

    public class BlockLocation {
        private String[] hosts;
        private String[] names;
        private String[] topologyPaths;
        private long offset;
        private long length;
        private boolean corrupt;
    
        public BlockLocation() {
            this(new String[0], new String[0], 0L, 0L);
        }
    
        public BlockLocation(String[] names, String[] hosts, long offset,
                long length) {
            this(names, hosts, offset, length, false);
        }
    
        public BlockLocation(String[] names, String[] hosts, long offset,
                long length, boolean corrupt) {
            if (names == null)
                this.names = new String[0];
            else {
                this.names = names;
            }
            if (hosts == null)
                this.hosts = new String[0];
            else {
                this.hosts = hosts;
            }
            this.offset = offset;
            this.length = length;
            this.topologyPaths = new String[0];
            this.corrupt = corrupt;
        }
    
        public BlockLocation(String[] names, String[] hosts,
                String[] topologyPaths, long offset, long length) {
            this(names, hosts, topologyPaths, offset, length, false);
        }
    
        public BlockLocation(String[] names, String[] hosts,
                String[] topologyPaths, long offset, long length, boolean corrupt) {
            this(names, hosts, offset, length, corrupt);
            if (topologyPaths == null)
                this.topologyPaths = new String[0];
            else
                this.topologyPaths = topologyPaths;
        }
    
        public String[] getHosts() throws IOException {
            if ((this.hosts == null) || (this.hosts.length == 0)) {
                return new String[0];
            }
            return this.hosts;
        }
    
        public String[] getNames() throws IOException {
            if ((this.names == null) || (this.names.length == 0)) {
                return new String[0];
            }
            return this.names;
        }
    
        public String[] getTopologyPaths() throws IOException {
            if ((this.topologyPaths == null) || (this.topologyPaths.length == 0)) {
                return new String[0];
            }
            return this.topologyPaths;
        }
    
        public long getOffset() {
            return this.offset;
        }
    
        public long getLength() {
            return this.length;
        }
    
        public boolean isCorrupt() {
            return this.corrupt;
        }
    
        public void setOffset(long offset) {
            this.offset = offset;
        }
    
        public void setLength(long length) {
            this.length = length;
        }
    
        public void setCorrupt(boolean corrupt) {
            this.corrupt = corrupt;
        }
    
        public void setHosts(String[] hosts) throws IOException {
            if (hosts == null)
                this.hosts = new String[0];
            else
                this.hosts = hosts;
        }
    
        public void setNames(String[] names) throws IOException {
            if (names == null)
                this.names = new String[0];
            else
                this.names = names;
        }
    
        public void setTopologyPaths(String[] topologyPaths) throws IOException {
            if (topologyPaths == null)
                this.topologyPaths = new String[0];
            else
                this.topologyPaths = topologyPaths;
        }
    
        public String toString() {
            StringBuilder result = new StringBuilder();
            result.append(this.offset);
            result.append(',');
            result.append(this.length);
            if (this.corrupt) {
                result.append("(corrupt)");
            }
            for (String h : this.hosts) {
                result.append(',');
                result.append(h);
            }
            return result.toString();
        }
    }
  • 相关阅读:
    叮咚抢菜派送时段监听及推送工具🔧
    Dom的几何属性(宽高、位置等)
    hosts配置
    vue深度监听对象
    抛出和引入
    老生常谈的Mysql事务与MVCC
    不太一样的Go Web框架—编程范式
    不太一样的Go Web框架—总览
    理解:TPS,QPS,吞吐量
    适合中小团队的 Git 服务 Gitblit
  • 原文地址:https://www.cnblogs.com/chengxin1982/p/3845182.html
Copyright © 2020-2023  润新知