我在使用 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) block 小得多。) Cloudera blog post 中对此的技术原因进行了很好的解释
Map tasks usually process a block of input at a time (using the default FileInputFormat). If the file is very small and there are a lot of them, then each map task processes very little input, and there are a lot more map tasks, each of which imposes extra bookkeeping overhead. Compare a 1GB file broken into 16 64MB blocks, and 10,000 or so 100KB files. The 10,000 files use one map each, and the job time can be tens or hundreds of times slower than the equivalent one with a single input file.
可以引用这个link获得解决这个问题的方法