小编Hai*_*ang的帖子

如何限制并发运行的map任务?

我的hadoop版本是1.0.2.现在我想要同时运行10个地图任务.我找到了2个与此问题相关的变量.

a)mapred.job.map.capacity

但在我的hadoop版本中,此参数似乎已被放弃.

b)mapred.jobtracker.taskScheduler.maxRunningTasksPerJob(http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.0.2/mapred-default.xml)

我将此变量设置如下:

Configuration conf = new Configuration();
conf.set("date", date);
conf.set("mapred.job.queue.name", "hadoop");
conf.set("mapred.jobtracker.taskScheduler.maxRunningTasksPerJob", "10");

DistributedCache.createSymlink(conf);
Job job = new Job(conf, "ConstructApkDownload_" + date);
...
Run Code Online (Sandbox Code Playgroud)

问题是它不起作用.作业开始时,仍有超过50张地图正在运行.

查看hadoop文档后,我找不到另一个限制并发运行的map任务.希望有人可以帮助我,谢谢.

=====================

我找到了关于这个问题的答案,在这里与其他可能感兴趣的人分享.

使用公平调度程序,使用配置参数maxMaps在分配文件(fair-scheduler.xml)中设置池的最大并发任务槽.然后,当您提交作业时,只需将作业的队列设置为相应的池.

jobs hadoop mapreduce map task

7
推荐指数
3
解决办法
1万
查看次数

如何在context.write(k,v)中输出值

在我的mapreduce工作中,我只想输出一些行.

但如果我这样编码:context.write(data,null);

该程序将抛出java.lang.NullPointerException.

我不想像下面这样编码:context.write(data,new Text(""));

因为我必须修剪输出文件中每一行的空白区域.

有什么好方法可以解决吗?提前致谢.


对不起,这是我的错.我仔细检查了程序,发现原因是我将Reducer设置为合并器.

如果我不使用组合器,语句context.write(data,null); 在减速机工作正常.在输出数据文件中,只有数据行.


从hadoop权威指南中分享NullWritable解释:

NullWritable是一种特殊类型的Writable,因为它具有零长度序列化.没有字节写入或读取流.它用作占位符; 例如,在MapReduce中,当您不需要使用该位置时,可以将键或值声明为NullWritable - 它有效地存储常量空值.当您想要存储值列表而不是键值对时,NullWritable也可以用作SequenceFile中的键.它是一个不可变的单例:可以通过调用NullWritable.get()来检索实例.

hadoop mapreduce output

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

hadoop ×2

mapreduce ×2

jobs ×1

map ×1

output ×1

task ×1