我遇到了MapReduce的问题。我不得不阅读多个CSV文件。
1个CSV文件输出1行。
我无法以自定义输入格式拆分CSV文件,因为CSV文件中的行格式不同。例如:
第1行包含A,B,C 第2行包含D,E,F
我的输出值应该像A,B,D,F
我有1100个CSV文件,因此创建了1100个分割,因此创建了1100个Mapper。映射器非常简单,它们不需要花费太多时间来处理。
但1100输入文件需要花费大量时间来处理。
有人可以指导一下我可以看一下的内容,或者我在这种方法中做错了吗?
答案 0 :(得分:1)
Hadoop使用少量大文件表现更好,而不是大量的小文件。 (这里的“小”意味着比Hadoop分布式文件系统(HDFS)块小得多。) 在Cloudera blog post
中详细解释了技术原因Map任务通常一次处理一个输入块(使用 默认FileInputFormat)。如果文件很小而且有一个 很多,然后每个地图任务处理很少的输入,并在那里 是一个更多的地图任务,每个任务都需要额外的簿记 高架。比较1GB文件,分为16个64MB块,10,000或 所以100KB文件。 10,000个文件每个使用一个映射,以及作业时间 可能比a的等效数字慢几十或几百倍 单输入文件。
您可以参考此link来获取解决此问题的方法