2012-11-28 62 views
0

我使用Hadoop流,我启动脚本如下: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 

“数据” 是2.5 GB的txt文件。

但是在ps axf我只能看到一个映射器。我试着用-Dmapred.map.tasks = 10,但结果是一样的 - 单个映射器。

我该如何让hadoop分割我的输入文件并启动几个映射器进程?

+1

你的2.5 GB的txt文件,它是gzip压缩?你是否在hadoop的伪实例上运行(并且只有一个map和reduce插槽)? –

+0

文件没有gzipped,但是,我没有运行任何hadoop恶魔,也没有使用HDFS ... – Nick

+0

试图在具有一个节点和相同结果的“真正”群集 - 单映射程序 – Nick

回答

1

要阐述我的意见 - 如果你的文件是不是在HDFS,而你与当地的跑步运行,那么该文件本身只会由一个映射器处理。

一个大文件通常由几个映射器处理,因为它以多个块的形式存储在HDFS中。

一个2.5 GB的文件,块大小为512M将在HDFS中分成5个块。如果文件是可拆分的(纯文本或使用可拆分的压缩编解码器,如snappy,但不是gzip),那么hadoop将启动每个块的映射器来处理文件。

希望这有助于解释你所看到的

1

请尝试查看InputFormat选项。我只是自己简单地阅读它(因为我正在查看OutputFormat来处理我自己的工作),但我的理解是,您可以将大型输入文件分成更小的任务,然后您可以单独运行映射器。

希望这篇文章能不能给你更多的了解你:http://www.infoq.com/articles/HadoopInputFormat