处理小文件映射减少hadoop

时间:2013-10-03 21:03:56

标签: java hadoop mapreduce

我有一个456kb的文件正在从hdfs中读取,并将其作为mapper函数的输入。每行包含一个整数,我正在下载一些文件并将它们存储在本地系统上。我在双节点集群上设置了hadoop,分割大小从程序更改为打开8-mappers:

    Configuration configuration = new Configuration();

    configuration.setLong("mapred.max.split.size", 60000L);
    configuration.setLong("mapred.min.split.size", 60000L);

创建了8个映射器但是在两个服务器上都下载了相同的数据,我认为这是因为块大小仍然设置为默认256mb并且输入文件被处理两次。所以我的问题是我们可以用map reduce处理一个小尺寸的文件吗?

1 个答案:

答案 0 :(得分:1)

如果下载文件需要时间,那么您可能会遭受Hadoop的推测性执行(默认情况下已启用)。这只是一个猜测,因为,你说你得到的文件不止一次下载了。

通过推测执行打开,可以多次并行处理相同的输入,以利用机器功能的差异。由于作业中的大多数任务即将结束,Hadoop平台将在几个节点上安排剩余任务的冗余副本,这些节点没有其他工作要执行。

您可以通过设置 mapred.map.tasks.speculative.execution mapred.reduce.tasks.speculative.execution JobConf来禁用映射器和缩减器的推测执行选项分别为false。