在Hadoop中的MR作业之后创建了多少个输出文件?

时间:2015-06-26 06:28:42

标签: hadoop mapreduce

我的文件小于(非常少)默认块大小。我的Mapper的输出是大量的vector<vector<unsigned int> > vecOfVec(200); vector<unsigned int> vecSearched; set<unsigned int> intersection; for(auto it = vecOfVec.begin(); it != vecOfVec.end(); ++it) { std::set_intersection(it->begin(), it->end(), vecSearched.begin(), vecSearched.end(), std::inserter(intersection, intersection.begin())); } 对(大于20)。

我在某地读到,在MR作业之后生成的输出文件数量等于在我的情况下大于20的reducer数量。但是我在输出中得到了一个文件。

然后我让<key,list<values>>希望它会在输出中生成两个文件。但它仍然生成一个文件。

那么我可以断定输出文件的数量等于块的数量吗?

而且,是否有一个数据块被送到一个Mapper?

1 个答案:

答案 0 :(得分:3)

- 阻止 - 物理部门:

HDFS旨在保存和管理大量数据。<默认块大小为64 MB 。这意味着如果将一个128 MB的文本文件放入HDFS,HDFS会将该文件分成两个块(128 MB / 64 MB),并将这两个块分发到群集中的数据节点。

- 拆分 - 逻辑部门:

当Hadoop提交作业时,它会逻辑地拆分输入数据并由每个Mapper处理。拆分只是一个参考。 Split包含org.apache.hadoop.mapreduce.InputSplitand规则中的详细信息(如何拆分),由类org.apache.hadoop.mapreduce.Input.FileInputFormat中的getSplits()决定。

  

默认情况下,split = block size = 64M。

现在考虑您的块大小为64MB。您正在处理的文件应大于64MB以创建其物理拆分。如果它小于64 MB,那么您将只看到输出中提到的单个文件。 (无论你的映射器产生多少关键值!)