我在使用MapReduce时遇到了问题。我不得不读取多个CSV文件。
1 个 CSV 文件输出 1 个单行。
我无法以自定义输入格式拆分 CSV 文件,因为 CSV 文件中的行格式不同。例如:
第 1 行包含 A、B、C第 2 行包含 D、E、F
我的输出值应该像A,B,D,F
我有 1100 个 CSV 文件,因此创建了 1100 个拆分,因此创建了 1100 个映射器。映射器非常简单,处理起来应该不会花费太多时间。
但是 1100 个输入文件需要花费大量时间来处理。
任何人都可以指导我看看什么,或者我是否在这种方法中做错了什么?
Hadoop在处理少量大文件时表现更好,而不是处理大量小文件。(这里的"小"意味着明显小于Hadoop分布式文件系统(HDFS)块。这篇Cloudera博客文章中很好地解释了其技术原因
。地图任务通常一次处理一个输入块(使用 默认文件输入格式)。如果文件非常小,并且有一个 很多,然后每个地图任务处理很少的输入,然后那里 是更多的地图任务,每个任务都需要额外的簿记 开销。比较一个 1GB 文件分成 16 个 64MB 块,以及 10,000 或 所以 100KB 文件。这 10,000 个文件每个文件使用一个地图,作业时间 可能比具有 单个输入文件。
您可以参考此链接以获取解决此问题的方法