hadoop 2.2.0 关于map和reduce的个数的设置
关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行。这样的想法是否正确?
由于想在hadoop集群上算一个初始输入数据不多,但是计算很复杂的程序,希望通过mapreduce来达到并行计算的目的。可以通过job.setNumReduceTasks(0);
语句设置reduce
个数为0,只使用map
来计算。但是设置map
的个数时遇到了问题:新的API中job
没有类似setNumMapTasks()
这样的方法; 在运行时加入参数-D mapreduce.map.tasks=2
这样的参数也无效。
查过好多资料,好像是说map
的个数取决于block_size
、total_size
等参数。但是都说的是1.x版本的设置,hadoop 2.2.0上并没有找到mapred.map.tasks
、mapred.min.split.size
等对应的设置方法。
由于我的输入文件只有一个文件,而且不算是“大数据”,只是单纯想在hadoop上实现并行,所以我希望能够设置一个最少的map
数目,以便能在各个计算节点上并行。请问我应该如何设置?
事隔10天后无人回答,再次自问自答(— . —!)。最近看到一本书,上面介绍自定义InputFormat
来控制map个数以及存储位置。稍微看了下FileInputFormat
的接口,发现居然有setMaxInputSplitSize()
这个静态方法。(自己以前怎么没发现!! 也怪自己懒,不愿意去找) 在run
方法中加了这么一句FileInputFormat.setMaxInputSplitSize(job, 1048576)
, 再次运行貌似有效,程序生成了6个map来运行。
但感到没法解释的有两点:
1.此处设置的值为1048576(1M),我的输入文件有20.95MB,如果最大份片大小为1M的话应该有20多个map。其中必然有更细致的判断,还得研究以下相应处理的代码才能解决;
2. 6个map全在同一个节点上运行,没有分到不同节点上;
我的环境为hadoop 2.2.0,我曾经试过修改dfs.blocksize
等配置参数,但是似乎都没有生效。不知道为什么会出现配置参数无效的情况。
补充:刚才了解到最终的分片大小splitSize
受到maxsize
、minsize
以及blocksize
的影响。设置FileInputFormat.setMinInputSplitSize(job, 1)
后,map数果然达到了20。
posted on 2016-03-19 11:55 1130136248 阅读(672) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架