文章目录
  1. 1. Terasort output replication

Terasort output replication


最近一直在关注TeraSort。
有时候你非常关注某些东西是却会忽略其他一些很基本的东西。比如TeraSort,我一直很关注如何Map更快、Shuffle更快、Reduce更快,回来却发现有个空白竟然没关注到,着实吓了一跳。

回归正题。某一天我一抬头,看到了TeraSort的网络性能图,
两头空白
为什么会是两头空白?好吧,Hadoop为Map任务做了Locality Based处理,Map阶段没有网络流量我能理解。然而,Reduce阶段呢?至少TeraSort会将输出数据写入到HDFS的,说好的3备份直接的数据传递产生的网络流量呢?
是不是输出文件的3备份除了问题呢?
Hadoop提供了hadoop fsck /FILE-PATH -files -locations -blocks查看文件块的保存地点及路径。通过查看,果然,TeraSort的输出文件块备份为1。

从代码中找找确认一下。

1
2
job.getConfiguration().setInt("dfs.replication", getOutputReplication(job));
TeraOutputFormat.setFinalSync(job, true);

从上面代码可以看到,TeraSort确实更新了dfs.replication设置,而

1
2
3
4
5
public static int getOutputReplication(JobContext job) {
return job.getConfiguration().getInt(OUTPUT_REPLICATION, 1);
}
......
static String OUTPUT_REPLICATION = "mapreduce.terasort.output.replication";

如果mapreduce.terasort.output.replication设置成3从命令行传入,期待的网络流量出来了。
找回reduce流量
应该是TeraSort觉得输出数据不重要不需要多备份吧。

有时候,太关注一些事情时,会让你忽略掉其他的很多信息。

文章目录
  1. 1. Terasort output replication