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;
}
}
代碼比較簡(jiǎn)單, 四部分組成? 文件路徑 ,啟始位置,長(zhǎng)度,Host列表
Host為什么是個(gè)列表
看分片的時(shí)候創(chuàng)建函數(shù)
splits.add(makeSplit(path, length - bytesRemaining,
?? ??? ??? ??? ??? ??? ??? ??? ?splitSize, blkLocations[blkIndex].getHosts()));
再來(lái)看塊的源代碼
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();
}
}
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

