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();
}
}
Yarn下分片和分块源代码分析的更多相关文章
- 【转载】linux环境下tcpdump源代码分析
linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02 CSDN博客 原文链接 http://blog.csdn.net/han_dawei/article/d ...
- linux环境下tcpdump源代码分析
Linux 环境下tcpdump 源代码分析 韩大卫@吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分 ...
- Flink on Yarn模式启动流程源代码分析
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink on yarn的启动流程可以参见前面的文章 Flink on Yarn启动流程,下面主要是从源码角 ...
- Android4.42-Setting源代码分析之蓝牙模块Bluetooth(下)
接着上一篇Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上) 继续蓝牙模块源代码的研究 THREE.蓝牙模块功能实现 switch的分析以及本机蓝牙重命名和可见性的分 ...
- MapReduce源代码分析之JobSubmitter(一)
JobSubmitter.顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外.对外提供的唯一一个非private成员变量或方法就是submitJobInter ...
- 转:RTMPDump源代码分析
0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- Kafka 源代码分析之LogManager
这里分析kafka 0.8.2的LogManager logmanager是kafka用来管理log文件的子系统.源代码文件在log目录下. 这里会逐步分析logmanager的源代码.首先看clas ...
- Yarn下Map数控制
public List<InputSplit> getSplits(JobContext job) throws IOException { long minSize = Math.max ...
随机推荐
- python 编程,应该养成哪些好的习惯
python 编程,应该养成哪些好的习惯? https://www.zhihu.com/question/28966220 无缓冲输出 python -u sys.stdout.flush() 性能 ...
- PlayMaker 状态机FSM重用
注意:playmaker做模板的时候不应该有拖入的东西,这样保存模版后会报错,提示容易丢失东西.
- [引]雅虎日历控件 Example: Two-Pane Calendar with Custom Rendering and Multiple Selection
本文转自:http://yuilibrary.com/yui/docs/calendar/calendar-multipane.html This example demonstrates how t ...
- LeetCode 62.不同路径(C++)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...
- mac os 和 ubuntu 上测试工具check-0.9.10的安装
由于工作需要,要使用check 这个单元测试工具. 首先,说一说在Mac10.9上面的安装.我是直接在官网(http://check.sourceforge.net)上下载源码包. 1,解压 2,进入 ...
- Jersey框架简介
一 Jersey简介 开发RESTful WebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务 为了简化使用JAVA开发R ...
- PHP设计原则
Laravel PHP设计模式 定义:将PHP设计成一个固化的模式 面向对象设计原则 内聚度:高内聚,表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关 耦合度: ...
- npm EPERM: operation not permitted, rename解决
此问题并非权限问题! 执行如下3条命令解决: 1.清理npm缓存 npm cache clean --force 2.升级npm版本 npm install -g npm@latest --force ...
- js跳转到邮箱登录
做邮箱验证时为了用户体验,往往会有跳转到邮箱登录这一按钮,其中的js如下: $("#btnemail").click(function () { var userEmail = $ ...
- sqlmap 命令笔记
基础命令 注入 MySQL mssql access 直接爆表.然后你懂的BT5里面的话前面就要加pythonsqlmap.py -u url --dbs //爆数据库sqlmap.py -u url ...