多语言版本分片模型
SchedulerX可以对多重任务进行调度(定时、编排、重刷历史数据等),提供Java、Python、Shell和Go等多语言分片模型,帮助您处理大数据业务需求。
背景信息
分片模型主要包含静态分片和动态分片。
静态分片:主要场景是处理固定的分片数,例如分库分表中固定1024张表,需要若干台机器分布式去处理。
动态分片:主要场景是分布式处理未知数据量的数据,例如一张大表在不停变更,需要分布式跑批。主流的框架为SchedulerX提供的MapReduce模型,目前还没有对外开源。
功能特性
多语言版本分片模型还具有以下特性。
兼容elastic-job的静态分片模型。
支持Java、Python、Shell、Go四种语言。
高可用:分片模型基于MapReduce模型开发,可以继承MapReduce模型高可用特性,即某台worker执行过程中发生异常,master worker会把分片failover到其它slave节点执行。
流量控制:分片模型基于MapReduce模型开发,可以继承MapReduce模型流量控制特性,即可以控制单机子任务并发度。例如有1000个分片,一共10台机器,可以控制最多5个分片并发跑,其它在队列中等待。
分片自动失败重试:分片模型基于MapReduce模型开发,可以继承MapReduce模型子任务失败自动重试的特性。
可用性和流量控制可以在创建任务时的高级配置中设置,详情请参见创建调度任务和任务管理高级配置参数说明。
只有1.1.0及以上版本客户端才支持多语言版本的分片模型。
Java分片任务
- 登录分布式任务调度平台。
- 在顶部菜单栏选择地域。
在左侧导航栏,选择任务管理。
在任务管理页面,选择目标命名空间,在页面左上角单击创建任务。
在创建任务面板的基本配置页签,执行模式设置为分片运行,并配置分片参数,然后单击下一步。
分片参数之间以半角逗号(,)或换行分隔,例如
分片号1=分片参数1,分片号2=分片参数2,...
。在应用程序代码中继承
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); } }
在执行列表页面,单击目标任务操作列的详情,查看分片详情。
Python分片任务
Python应用想使用分布式跑批,只需要安装Agent。脚本可以由SchedulerX维护。
下载SchedulerX的Agent,并通过Agent部署脚本任务。
在SchedulerX中创建Python分片任务,更多信息,请参见创建调度任务。
sys.argv[1]
为分片号,sys.argv[2]
为分片参数。分片参数之间以半角逗号(,)或换行分隔,例如
分片号1=分片参数1,分片号2=分片参数2,...
。在执行列表页面,单击目标任务操作列的详情,查看分片详情。
Shell和Go分片任务
Shell和Go版本的分片任务和Python类似,创建步骤,请参见Python分片任务。