SchedulerX 可以对多重任务进行调度(定时、编排、重刷历史数据等),提供 Java、Python、Shell 和 Go 等多语言分片模型,帮助您处理大数据业务需求。

背景信息

分片模型主要包含静态分片和动态分片。

  • 静态分片:主要场景是处理固定的分片数,例如分库分表中固定 1024 张表,需要若干台机器分布式去处理。
  • 动态分片:主要场景是分布式处理未知数据量的数据,例如一张大表在不停变更,需要分布式跑批。主流的框架为 SchedulerX 2.0 提供的 MapReduce 模型,暂时还没有对外开源。

功能特性

多语言版本分片模型还具有以下特性。

  • 兼容 elastic-job 的静态分片模型。
  • 支持 Java、Python、Shell、Go 四种语言。
  • 高可用:分片模型基于 Map 模型开发,可以继承 Map 模型高可用特性,即某台 worker 执行过程中发生异常,master worker 会把分片 failover 到其它 slave 节点执行。
  • 流量控制:分片模型基于Map模型开发,可以继承 Map 模型流量控制特性,即可以控制单机子任务并发度。例如有 1000 个分片,一共 10 台机器,可以控制最多 5 个分片并发跑,其它在队列中等待。
  • 分片自动失败重试:分片模型基于 Map 模型开发,可以继承 Map 模型子任务失败自动重试特性。

可用性和流量控制可以在创建任务时的高级配置中设置,详情请参见创建调度任务任务管理高级配置参数说明

说明 只有 1.1.0 及以上版本客户端才支持多语言版本的分片模型。

Java 分片任务

  1. 登录 EDAS 控制台
  2. 在左侧导航栏中选择组件中心 > 分布式任务调度2.0
  3. 分布式任务调度2.0左侧导航栏选择任务管理
  4. 任务管理页面单击创建
  5. 任务配置页面的执行模式选择分片运行,并设置分片参数

    分片参数之间以英文逗号或换行分隔,例如 分片号1=分片参数1,分片号2=分片参数2,...

    任务配置
  6. 在应用程序代码中继承 JavaProcessor,通过 JobContext.getShardingId() 获取分片号,通过JobContext.getShardingParameter() 获取分片参数。
    示例:
    @Component
    public class HelloWorldProcessor extends JavaProcessor {
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            System.out.println("分片id=" + context.getShardingId() + ", 分片参数=" + context.getShardingParameter());
            return new ProcessResult(true);
        }
    }
  7. 执行列表页面查看分片详情。
    分片任务实例详情

Python 分片任务

Python 应用想使用分布式跑批,只需要安装 Agent。脚本可以由 SchedulerX 2.0 维护。

  1. 下载 SchedulerX 的 Agent,并通过 Agent 部署脚本任务。详情请参见在阿里云部署脚本任务(非 EDAS)
  2. 在 SchedulerX 2.0 中创建 Python 分片任务,详情请参见创建调度任务

    sys.argv[1] 为分片号,sys.argv[2] 为分片参数。

    分片参数之间以英文逗号或换行分隔,例如 分片号1=分片参数1,分片号2=分片参数2,...

    Python 分片任务
  3. 执行列表页面查看分片详情。
    分片任务实例详情

Shell 和 Go 分片任务

Shell 和 Go 版本的分片任务和 Python 类似,创建步骤请参见Python 分片任务