Hadoop2.4.0 创建 39063 映射任务以在具有无效 Inputsplit 配置的本地模式下处理 10MB 文件

标签 hadoop mapreduce

我正在使用 hadoop-2.4.0,所有默认配置如下:

FileInputFormat.setInputPaths(job, new Path("in")); //10mb file;  just one file.

FileOutputFormat.setOutputPath(job, new Path("out"));

job.getConfiguration().set("mapred.max.split.size", "64");

job.getConfiguration().set("mapred.min.split.size", "128");

PS:我设置的max split size小于min(一开始我设置错了后来发现了)

并且,根据输入拆分计算逻辑

max(minimumSize, min(maximumSize, blockSize))

max(128,min(64,128) --> 128MB 它比文件大小大,所以它应该只创建一个 inputsplit(一个映射器)

很好奇当我在 eclipse 中运行这个程序时,框架如何计算每次 39063 映射器?

日志:

2015-07-15 12:02:37 DEBUG LocalJobRunner Starting mapper thread pool executor.

2015-07-15 12:02:37 DEBUG LocalJobRunner Max local threads: 1

2015-07-15 12:02:37 DEBUG LocalJobRunner Map tasks to process: 39063

2015-07-15 12:02:38 INFO  LocalJobRunner Starting task: 
attempt_local192734774_0001_m_000000_0

谢谢,

最佳答案

在您指定的代码中:

job.getConfiguration().set("mapred.max.split.size", "64");

job.getConfiguration().set("mapred.min.split.size", "128");

它计算成字节。因此,您获得了大量的 Mapper。

我认为你应该使用这样的东西:

job.getConfiguration().set("mapred.min.split.size", 67108864);

67108864 是 64MB 字节的值

计算:64*1024*1024 = 67108864

mapred.max.split.size 基本用于组合小文件以定义拆分大小,您正在处理大量小文件和 mapred.min.split.size 用于定义处理大文件的拆分。

如果您使用的是 YARN 或 MR2,那么您应该使用 mapreduce.input.fileinputformat.split.minsize

关于Hadoop2.4.0 创建 39063 映射任务以在具有无效 Inputsplit 配置的本地模式下处理 10MB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437165/

相关文章:

java - 无法连接到直线 hive2

java - Windows 7配置上带有HBase的Titan

eclipse - IOException : Type mismatch in key from map: Text, 收到 LongWritable

javascript - MongoDB map 减少查找字谜

json - Hadoop Java MapReduce 用 Ja​​ckson 问题解析 JSON

java - 在 hadoop 单节点集群中运行 mahout 20newsgroups 时出错

hadoop - MapReduce应用大师是什么?

hadoop - AWS Spark 集群设置错误

eclipse - Hadoop & eclipse 在不同的机器上

java - hadoop 中的多重输出格式