为什么最佳分片的大小与块大小相同?
它是最大的可保证存储在单个节点上的数据量。如果分区跨越两个快,那么对于任何一个HDFS节点而言,基本不可能同时存储这两块数据,因此此分布的某部分必须通过网络传输到节点,这与使用本地数据运行map任务相比,显然效率更低。
map任务把输入写入本地磁盘,而不是HDFS。因为map的输出作为中间输出:而中间输出则被reduce任务处理后产生最终的输出,一旦作业完成,map的输出就可以删除了。如果该节点上运行的map任务在map输出给reduce任务处理之前崩溃,那么hadoop将在另一个节点上重新运行map任务以再次创建map的输出。
为增加其可靠性,reduce的输出通常存储在HDFS中。对于每个reduce输出的HDFS,第一个副本存储在本地节点上,其他副本存储在其他机架节点中。
reduce任务的数目并不是由输入的大小来决定的,而是单独具体指定的。
combiner并不能取代reduce函数。但它可以帮助减少map和reduce之间的数据传输量。而正因为此,是否在MapReduce作业中使用combiner是需要慎重考虑的。
通常将reduce函数设置为combiner