我在看书 Hadoop: The definitive guide
. 在理解其中一些概念的过程中,我读了几篇这样的帖子,这让我既困惑又澄清。这里有几点我需要Maven的意见来判断它是否正确,如果不正确会发生什么?
假设我的hdfs在具有一个节点的psuedo分布式集群中是这样的:
/local/path/to/datanode/storage/0/blk_00001 300 MB
/local/path/to/datanode/storage/0/blk_00002 300 MB
/local/path/to/datanode/storage/0/blk_00003 300 MB
/local/path/to/datanode/storage/0/blk_00004 200 MB
我的文件总大小是1100MB,它被分成了300MB的块(这是我的块大小)。
现在我即将开始我的mapreduce工作:
我明白 InputFormat
(进而分割文件)确定贴图的数量。
案例1:
我有以下设置: split size mapred.min.split.size=400 MB
总共会有三个乔布斯先生。每个都有一个400 mb的输入大小来处理。
1) mapper 1:这意味着第一个mr作业将使用blk_00001的300mb和blk_00002的100mb(数据位置丢失)。
2) Map器2:现在第二个Map器必须 seek
从位置101 mb blk\ U 00002+从blk\ U 00003另外200 mb。
)Map器3:blk\U 0003上还有100 mb要处理,blk\U 0004上还有200 mb要处理。现在的大小是300MB,应该作为一个整体来处理。
块大小在Map任务中不起作用。
问题1:在这里之前一切都正常吗???????
案例2:
现在假设我的mr工作有以下设置: mapred.tasktracker.map.tasks.maximum=3
. 这意味着对于任何给定的节点,并行运行三个map任务。
问题2:如果上面所有的Map器在同一个节点上并行运行,那么它们是在具有相似优先级的不同线程中运行,还是在cpu级别的单独进程中运行。
案例3:如果我的 num
在 conf.setNumMapTasks(int num)
大于拆分数。也就是说,num=10,分裂的数目=3。将执行的mr作业总数为3。
**问题3:*正确??
减速机任务:
q4一个Map器必须在减速器启动之前完成-据我所知,在任何情况下,任何不可能的例子。因为钥匙需要分类并交给减速机。
问题5那么 mapred.reduce.slowstart.completed.maps=0.5
. 这意味着当Map任务完成50%时,启动减速器。但减速机需要Map作业才能完成。对的???
2) 如果我没有指定任何内容,那么默认的减速机数量是多少。
建议使用0.95-1.75*(nodesmapred.tasktracker.tasks.maximum)。如果我有5个节点,每个节点有5个核,那么公式给出了(0.955*5)=24个减缩器。
所以我应该设置conf.setnumreducetasks(24)????
1条答案
按热度按时间2ul0zpep1#
问题1:在这里之前一切都正常吗???????
这取决于输入格式。
FileInputFormat
无论您将“最小拆分大小”设置为什么,都不会进行小于块大小的拆分。下面是计算拆分大小的代码。问题2:如果上面所有的Map器在同一个节点上并行运行,那么它们是在具有相似优先级的不同线程中运行,还是在cpu级别的单独进程中运行。
每个任务都在它自己的java虚拟机中运行,因此需要单独的进程。
问题3:如果conf.setnummaptasks中的my num(int num)大于分割数。也就是说,num=10,分裂的数目=3。将执行的mr作业总数为3。
这个
setNumMapTasks()
不再支持,只是作为mapreduce系统的提示。问题4:Map程序必须在减速器启动之前完成-据我所知,在所有情况下,任何情况下都不会。因为钥匙需要分类并交给减速机。
那么mapred.reduce.slowstart.completed.maps=0.5的效果是什么呢。这意味着当Map任务完成50%时,启动减速器。但减速机需要Map作业才能完成。对的???
慢启动包括将数据复制到适当的机器上。这个
reduce()
在完成所有Map程序之前,不会调用reducer中的方法。如果我没有指定任何内容,那么默认的减速机数量是多少。
1
所以我应该设置conf.setnumreducetasks(24)????
任何对你的任务最有效的东西。