我正在使用Hadoop流媒体,我启动脚本如下:
../hadoop/bin/hadoop jar ../hadoop/contrib/streaming/hadoop-streaming-1.0.4.jar \
-mapper ../tests/mapper.php \
-reducer ../tests/reducer.php \
-input data \
-output out
“data”是2.5 GB的txt文件。
然而在ps axf中,我只能看到一个映射器。我尝试使用-Dmapred.map.tasks = 10,但结果是相同的 - 单个映射器。
如何让hadoop拆分输入文件并启动多个映射器进程?
答案 0 :(得分:1)
尝试查看InputFormat选项。我自己只是简单地阅读它(因为我正在为自己的工作查看OutputFormat),但我的理解是你可以将一个大的输入文件拆分成较小的任务,然后你可以单独运行映射器。
希望本文能为您提供更多见解:http://www.infoq.com/articles/HadoopInputFormat
答案 1 :(得分:1)
详细说明我的评论 - 如果您的文件不在HDFS中,并且您正在使用本地运行器运行,则文件本身将仅由单个映射器处理。
大文件通常由多个映射器处理,因为它作为几个块存储在HDFS中。
块大小为512M的2.5 GB文件将被拆分为HDFS中的~5个块。如果文件是可拆分的(纯文本,或使用可拆分压缩编解码器,如snappy,但不是gzip),那么hadoop将为每个块启动一个映射器来处理该文件。
希望这有助于解释您所看到的内容