据我所知,map reduce输出存储在名为part-r- * for reducer和part-m- * for mapper的文件中。
当我运行mapreduce作业时,有时会将整个输出放在一个文件中(大小约为150MB),有时几乎相同的数据大小我得到两个输出文件(一个100mb和另外50mb)。这对我来说似乎很随机。我找不到任何理由。
我想知道它是如何决定将这些数据放在单个或多个输出文件中的。如果我们能以任何方式控制它。
由于
答案 0 :(得分:4)
与Jijo在这里的答案中指定的不同 - 文件的数量取决于Reducers / Mappers的数量。
它与群集中的物理节点数无关。
规则是:一个Reducer的part-r- *文件。 Reducers的数量由 job.setNumReduceTasks();
设置如果你的工作中没有Reducers - 那么一个Mapper的一个part-m- *文件。一个InputSplit有一个Mapper(通常 - 除非你使用自定义的InputFormat实现,否则输入数据的一个HDFS块有一个InputSplit)。
答案 1 :(得分:1)
输出文件part-m- *和part-r- *的数量分别根据 map任务的数量和 reduce tasks 的数量来设置。