山东大学软件工程应用与实践——Pig代码分析(五)

2021SC@SDUSC

概述

本次继续分析pig作为hadoop的轻量级脚本语言操作hadoop的executionengine包下的JobControlCompiler类的代码

JobControlCompiler类

这是一个编译器类,它采用MROperPlan并将其转换为维护相关依赖关系信息的JobControl对象。
JobControl 对象由Job(作业)组成,每个Job都有一个单独的JobConf(一个map/reduce作业配置)。

getStores方法
被用来返回之前编译的作业的所有存储位置

public List<POStore> getStores(Job job) {
        Pair<List<POStore>, Path> pair = jobStoreMap.get(job);
        if (pair != null && pair.first != null) {
            return pair.first;
        } else {
            return new ArrayList<POStore>();
        }
    }

reset方法
用来重置状态

public void reset() {
        jobStoreMap = new HashMap<Job, Pair<List<POStore>, Path>>();
        jobMroMap = new HashMap<Job, MapReduceOper>();
        UDFContext.getUDFContext().reset();
    }

updateMROpPlan方法
使用作业的执行状态更新 Map-Reduce 计划,如果一个作业完全失败(该作业只有一个存储,并且该作业失败),则我们删除其所有依赖作业,此方法最终将返回从Map-Reduce计划中删除的MapReduceOper的数量。

public int updateMROpPlan(List<Job> completeFailedJobs)
    {
        int sizeBefore = plan.size();
        for (Job job : completeFailedJobs)  
        {
            MapReduceOper mrOper = jobMroMap.get(job);
            plan.trimBelow(mrOper);
            plan.remove(mrOper);
        }//用来删除所有的后续作业

        for (Job job : jobMroMap.keySet())
        {
            if (!completeFailedJobs.contains(job))
            {
                MapReduceOper mro = jobMroMap.get(job);
                if (!pigContext.inIllustrator && mro.isCounterOperation())
                    saveCounters(job,mro.getOperationID(), mro.isRowNumber());
                plan.remove(mro);
            }
        }//从jobMroMap中删除成功的作业
        
        jobMroMap.clear();
        int sizeAfter = plan.size();
        return sizeBefore-sizeAfter;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值