我正在一个大约1.22gb的文件上运行一个pig脚本。默认块大小为64mb。我有4个数据节点。pig脚本作为输出生成19个文件。
当我运行pig脚本并看到job tracker时,我看到了6个作业。
Jobid Priority User Name Map % Complete Map Total Maps Completed Reduce % Complete Reduce Total Reduces Completed Job Scheduling Information Diagnostic Info
job_201207121202_0001 NORMAL user PigLatin:Analysis.pig 100.00% 20 20 100.00% 1 1 NA NA
job_201207121202_0002 NORMAL user PigLatin:Analysis.pig 100.00% 5 5 100.00% 1 1 NA NA
job_201207121202_0003 NORMAL user PigLatin:Analysis.pig 100.00% 2 2 100.00% 1 1 NA NA
job_201207121202_0004 NORMAL user PigLatin:Analysis.pig 100.00% 2 2 100.00% 1 1 NA NA
job_201207121202_0005 NORMAL user PigLatin:Analysis.pig 100.00% 5 5 100.00% 1 1 NA NA
job_201207121202_0006 NORMAL user PigLatin:Analysis.pig 100.00% 5 5 100.00% 1 1 NA NA
据我所知,由于输入文件的大小是1.22gb,块大小是64mb,因此将为该文件创建总共20个块。我的复制因子是3。因为我将有一个Map作业为每个分裂,我将有20个Map作业和作业20120712102\u0001作业说,在上面的列表,是完美的。然而,为什么我看到其他5个工作和其他19个Map任务?
谁能帮我理解这个。我以为它只有20个map和1个reduce job,因为1.22gb/64mb~20。
我是一个Pig/hadoop初学者。非常感谢你的帮助。
3条答案
按热度按时间o8x7eapl1#
Pig是用来拴住乔布斯的一层薄皮。
对于mr作业,“块大小”(从技术上讲是块大小)决定Map器的数量,但是对于pig,mr是基本单位,而不是块大小。
根据您对数据执行的etl类型,pig会将其Map到单个/链接的多个mr作业。
例如:a=load'/input'使用pigstorage('|')as(a:chararray)将a存储到'/output';这个pigscript只生成只Map的作业,甚至不使用缩减器。
一个使用groupby的脚本,后跟一个join,将产生2个mr jobs。
pig支持的每个操作都可以Map到mr:
加入:1 mr
组员:1人
过滤器:可以在Map器或还原器阶段完成
加载:Map器
存储:Map器或还原器
foreach:Map器或还原器
rmbxnbpk2#
你需要分享你的Pig脚本给任何人一个真正的信心给出答案,但最有可能你的脚本是足够复杂的,执行所有阶段需要6个map reduce作业才能完成
您可以看到,执行的第二个作业确实运行了20个Map器(1.22gb/64mb=19.52,这将需要20个Map器):
普通用户piglatin:analysis.pig 100.00% 20 100.00%1不适用工作\u 20120712102 \u 0002
除此之外,谁知道你还在做什么-你是否用不同的输入文件多次提交同一个脚本?
jjhzyzn03#
pig根据脚本的语义将脚本编译成多个map reduce作业。粗略地说,加入是一个先生的工作。团队是一种工作。订单是2个mr jobs(一个用于抽样分发)。还有一些其他操作符可以生成mr边界。