我有一个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处理一个小尺寸的文件吗?
答案 0 :(得分:1)
如果下载文件需要时间,那么您可能会遭受Hadoop的推测性执行(默认情况下已启用)。这只是一个猜测,因为,你说你得到的文件不止一次下载了。
通过推测执行打开,可以多次并行处理相同的输入,以利用机器功能的差异。由于作业中的大多数任务即将结束,Hadoop平台将在几个节点上安排剩余任务的冗余副本,这些节点没有其他工作要执行。
您可以通过设置 mapred.map.tasks.speculative.execution 和 mapred.reduce.tasks.speculative.execution JobConf来禁用映射器和缩减器的推测执行选项分别为false。