Search in sources :

Example 1 with ExecuteMode

use of com.alibaba.datax.dataxservice.face.domain.enums.ExecuteMode in project DataX by alibaba.

the class JobContainer method schedule.

/**
     * schedule首先完成的工作是把上一步reader和writer split的结果整合到具体taskGroupContainer中,
     * 同时不同的执行模式调用不同的调度策略,将所有任务调度起来
     */
private void schedule() {
    /**
         * 这里的全局speed和每个channel的速度设置为B/s
         */
    int channelsPerTaskGroup = this.configuration.getInt(CoreConstant.DATAX_CORE_CONTAINER_TASKGROUP_CHANNEL, 5);
    int taskNumber = this.configuration.getList(CoreConstant.DATAX_JOB_CONTENT).size();
    this.needChannelNumber = Math.min(this.needChannelNumber, taskNumber);
    PerfTrace.getInstance().setChannelNumber(needChannelNumber);
    /**
         * 通过获取配置信息得到每个taskGroup需要运行哪些tasks任务
         */
    List<Configuration> taskGroupConfigs = JobAssignUtil.assignFairly(this.configuration, this.needChannelNumber, channelsPerTaskGroup);
    LOG.info("Scheduler starts [{}] taskGroups.", taskGroupConfigs.size());
    ExecuteMode executeMode = null;
    AbstractScheduler scheduler;
    try {
        executeMode = ExecuteMode.STANDALONE;
        scheduler = initStandaloneScheduler(this.configuration);
        //设置 executeMode
        for (Configuration taskGroupConfig : taskGroupConfigs) {
            taskGroupConfig.set(CoreConstant.DATAX_CORE_CONTAINER_JOB_MODE, executeMode.getValue());
        }
        if (executeMode == ExecuteMode.LOCAL || executeMode == ExecuteMode.DISTRIBUTE) {
            if (this.jobId <= 0) {
                throw DataXException.asDataXException(FrameworkErrorCode.RUNTIME_ERROR, "在[ local | distribute ]模式下必须设置jobId,并且其值 > 0 .");
            }
        }
        LOG.info("Running by {} Mode.", executeMode);
        this.startTransferTimeStamp = System.currentTimeMillis();
        scheduler.schedule(taskGroupConfigs);
        this.endTransferTimeStamp = System.currentTimeMillis();
    } catch (Exception e) {
        LOG.error("运行scheduler 模式[{}]出错.", executeMode);
        this.endTransferTimeStamp = System.currentTimeMillis();
        throw DataXException.asDataXException(FrameworkErrorCode.RUNTIME_ERROR, e);
    }
    /**
         * 检查任务执行情况
         */
    this.checkLimit();
}
Also used : Configuration(com.alibaba.datax.common.util.Configuration) ExecuteMode(com.alibaba.datax.dataxservice.face.domain.enums.ExecuteMode) AbstractScheduler(com.alibaba.datax.core.job.scheduler.AbstractScheduler) DataXException(com.alibaba.datax.common.exception.DataXException)

Aggregations

DataXException (com.alibaba.datax.common.exception.DataXException)1 Configuration (com.alibaba.datax.common.util.Configuration)1 AbstractScheduler (com.alibaba.datax.core.job.scheduler.AbstractScheduler)1 ExecuteMode (com.alibaba.datax.dataxservice.face.domain.enums.ExecuteMode)1