我正在一个大约1.22 GB的文件上运行Pig Script。默认块大小为64MB。我有4个数据节点。 Pig脚本作为输出产生19个文件 当我运行Pig脚本并看到Job Tracker时,我看到了6个Jobs。
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.22 GB,块大小为64 MB,因此将为该文件创建共20个块。我的复制因子为3.由于我将为每个拆分创建一个地图作业,我将有20个地图作业,而job_201207121202_0001作业在上面的列表中说明并且是完美的。但是,为什么我会看到其他5个工作岗位以及其他19个地图任务? 任何人都可以帮我理解这一点。我认为自1.22GB / 64MB~20以来它只有20个地图和1个减少工作。
我是Pig / Hadoop初学者。非常感谢帮助。
答案 0 :(得分:1)
Pig将脚本编译为多个map-reduce作业,具体取决于脚本的语义。粗略地说,连接是一项MR工作。一个小组是一个MR工作。订单是2个MR工作(一个用于分配样品)。还有一些其他运营商会产生MR边界。
答案 1 :(得分:0)
你需要分享你的猪脚本,任何人都可以给出任何真正的信心答案,但很可能你的脚本足够复杂,执行所有阶段需要6个地图减少工作才能完成
你可以看到执行的第二个作业确实有20个映射器在运行(1.22GB / 64MB = 19.52,这将需要20个映射器):
普通用户PigLatin:Analysis.pig 100.00% 20 20 100.00%1 1 NA NA job_201207121202_0002
除了知道你还在做什么之外 - 你是否用不同的输入文件提交了相同的脚本多次?
答案 2 :(得分:0)
Pig是为连锁MR工作而构建的薄层。
对于MR作业"块大小"(技术上块大小)决定映射器的数量,但对于猪MR,基本单元不是块大小。
根据您使用数据进行的ETL类型,pig会将其映射到单个/链式多个MR作业。
例如: A = LOAD' / input'使用PigStorage(' |')作为(a:chararray) 将A存储到' /输出' ; 这个简单的产品简单地产生了地图只有工作,甚至没有使用减速器。
使用groupby,然后是JOIN的脚本将生成2个MR作业。
PIG支持的每个操作都可以映射到MR: