为什么elastic jobjob中多了好多没有的任务

私信发送成功
检测到您已登录开源中国,是否
forked from
Fork 该项目?
使用 fork 功能将在后台会为你创建一个与该项目内容一样的同名项目,你可以在这个新项目里自由的修改内容。
建议只在有意向参与改进该项目时使用 fork 功能。
确定同步?
同步操作将从 当当网/elastic-job 强制同步,此操作会覆盖自 fork 项目以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。
Loading...
README_cn.md
##Elastic-Job - distributed scheduled job solution











概览
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。
Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。
Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务。
Elastic-Job-Lite和Elastic-Job-Cloud提供同一套API开发作业,开发者仅需一次开发,即可根据需要以Lite或Cloud的方式部署。

为何使用Elastic-Job?

通用部分

1. 分片概念
任务的分布式执行,需要将一个任务拆分为n个独立的任务项,然后由分布式的服务器分别执行某一个或几个分片项。
例如:有一个遍历数据库某张表的作业,现有2台服务器。为了快速的执行作业,那么每台服务器应执行作业的50%。
为满足此需求,可将作业分成2片,每台服务器执行1片。作业遍历数据的逻辑应为:服务器A遍历ID以奇数结尾的数据;服务器B遍历ID以偶数结尾的数据。
如果分成10片,则作业遍历数据的逻辑应为:每片分到的分片项应为ID%10,而服务器A被分配到分片项0,1,2,3,4;服务器B被分配到分片项5,6,7,8,9,直接的结果就是服务器A遍历ID以0-4结尾的数据;服务器B遍历ID以5-9结尾的数据。

2. 分片项与业务处理解耦
Elastic-Job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系。

3. 个性化参数的适用场景
个性化参数即shardingItemParameter,可以和分片项匹配对应关系,用于将分片项的数字转换为更加可读的业务代码。
例如:按照地区水平拆分数据库,数据库A是北京的数据;数据库B是上海的数据;数据库C是广州的数据。
如果仅按照分片项配置,开发者需要了解0表示北京;1表示上海;2表示广州。
合理使用个性化参数可以让代码更可读,如果配置为0=北京,1=上海,2=广州,那么代码中直接使用北京,上海,广州的枚举值即可完成分片项和业务逻辑的对应关系。

Elastic-Job-Lite

1. 分布式调度
Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。
注册中心仅用于作业注册和监控信息存储。而主作业节点仅用于处理分片和清理等功能。

2. 作业高可用
Elastic-Job-Lite提供最安全的方式执行作业。将分片总数设置为1,并使用多于1台的服务器执行作业,作业将会以1主n从的方式执行。
一旦执行作业的服务器崩溃,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,可以保证在本次作业执行时崩溃,备机立即启动替补执行。

3. 最大限度利用资源
Elastic-Job-Lite也提供最灵活的方式,最大限度的提高执行作业的吞吐量。将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用分布式资源,动态的分配分片项。
例如:3台服务器,分成10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。
如果服务器C崩溃,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9。在不丢失分片项的情况下,最大限度的利用现有资源提高吞吐量。

Elastic-Job-Cloud

1. 分布式调度
Elastic-Job-Cloud采用Mesos Framework分片和协调作业调度。采用中心化调度实现难度小于Elastic-Job-Lite的无中心化调度,无需再考虑多线程并发的情况。

2. 作业高可用
Elastic-Job-Cloud由Mesos Framework负责作业高可用和分片。作业丢失会由Mesos Framework自动在另外的Agent上重新启动作业分片实例。

3. 弹性资源利用
Elastic-Job-Cloud分为2种作业运行模式:瞬时作业 和 常驻作业。
瞬时作业会在每一次作业执行完毕后立刻释放资源,保证利用现有资源错峰执行。资源分配和容器启动均占用一定时长,且作业执行时资源不一定充足,因此作业执行会有延迟。瞬时作业适用于间隔时间长,资源消耗多且对执行时间无严格要求的作业。
常驻作业无论在运行时还是等待运行时,均一直占用分配的资源,可节省过多容器启动和资源分配的开销,适用于间隔时间短,资源需求量稳定的作业。

功能列表

1. Elastic-Job-Lite

分布式调度协调
弹性扩容缩容
失效转移
错过执行作业重触发
作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
支持并行调度
支持作业声明周期操作
丰富的作业类型
Spring整合以及命名空间提供
运维平台


2. Elastic-Job-Cloud

包含Elastic-Job-Lite的全部功能
应用自动分发
基于Fenzo的弹性资源分配
基于Docker的进程隔离(TBD)









Architecture

Elastic-Job-Lite



Elastic-Job-Cloud


Quick Start

Elastic-Job-Lite

引入maven依赖
&!-- 引入elastic-job-lite核心模块 --&
&dependency&

&groupId&com.dangdang&/groupId&

&artifactId&elastic-job-lite-core&/artifactId&

&version&${latest.release.version}&/version&
&/dependency&

&!-- 使用springframework自定义命名空间时引入 --&
&dependency&

&groupId&com.dangdang&/groupId&

&artifactId&elastic-job-lite-spring&/artifactId&

&version&${latest.release.version}&/version&
&/dependency&


作业开发
public class MyElasticJob implements SimpleJob {

@Override

public void execute(ShardingContext context) {

switch (context.getShardingItem()) {

case 0: 

// do something by sharding item 0

break;

case 1: 

// do something by sharding item 1

break;

case 2: 

// do something by sharding item 2

break;

// case n: ...

}
}


作业配置
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:reg="/schema/ddframe/reg"

xmlns:job="/schema/ddframe/job"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

/schema/ddframe/reg

/schema/ddframe/reg/reg.xsd

/schema/ddframe/job

/schema/ddframe/job/job.xsd

"&

&!--配置作业注册中心 --&

&reg:zookeeper id="regCenter" server-lists=" yourhost:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /&

&!-- 配置作业--&

&job:simple id="oneOffElasticJob" class="xxx.MyElasticJob" registry-center-ref="regCenter" cron="0/10 * * * * ?" sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C" /&
&/beans&



Elastic-Job-Cloud

引入maven依赖
&!-- 引入elastic-job-cloud执行器模块 --&
&dependency&

&groupId&com.dangdang&/groupId&

&artifactId&elastic-job-cloud-executor&/artifactId&

&version&${latest.release.version}&/version&
&/dependency&


作业开发
同Elastic-Job-Lite

作业配置
curl -l -H "Content-type: application/json" -X POST -d 
'{"jobName":"foo_job","jobClass":"yourJobClass","jobType":"SIMPLE","jobExecutionType":"TRANSIENT","cron":"0/5 * * * * ?","shardingTotalCount":5,"cpuCount":0.1,"memoryMB":64.0,"appURL":"http://app_host:8080/foo-job.tar.gz","failover":true,"misfire":true,"bootstrapScript":"bin/start.sh"}' 
http://elastic_job_cloud_host:8899/job/register



相关文档

1. Elastic-Job-Lite





2. Elastic-Job-Cloud


实现原理(TBD)


3. 


4. 


5. 

**讨论QQ群:**(不限于Elastic-Job,包括分布式,定时任务相关以及其他互联网技术交流。由于QQ群已接近饱和,我们希望您在申请加群之前仔细阅读文档,并在加群申请中正确回答问题,以及在申请时写上您的姓名和公司名称。并且在入群后及时修改群名片。否则我们将有权拒绝您的入群申请。谢谢合作。)
正在加载...
你可以在后,对此项目发表评论博客分类:
当当开源任务调度(作业框架)elastic-job-1.1.1试用
安装zookeeper
http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html
windows下的zookeeper启动脚本(我用的是UBUNTU,未测试这个脚本)
来源:/developerworks/cn/opensource/os-cn-zookeeper/index.html
set ZOOCFGDIR=%~dp0%..\conf
set ZOO_LOG_DIR=%~dp0%..
set ZOO_LOG4J_PROP=INFO,CONSOLE
set CLASSPATH=%ZOOCFGDIR%
set CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%
set CLASSPATH=%~dp0..\build\%~dp0..\build\lib\*;%CLASSPATH%
set ZOOCFG=%ZOOCFGDIR%\zoo.cfg
set ZOOMAIN=org.apache.zookeeper.server.ZooKeeperServerMain
java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%"
-cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
添加Maven依赖(spring依赖什么的就不说了):
&!-- 引入elastic-job核心模块 --&
&dependency&
&groupId&com.dangdang&/groupId&
&artifactId&elastic-job-core&/artifactId&
&version&1.1.1&/version&
&/dependency&
&!-- 使用springframework自定义命名空间时引入 --&
&dependency&
&groupId&com.dangdang&/groupId&
&artifactId&elastic-job-spring&/artifactId&
&version&1.1.1&/version&
&/dependency&
可能会出现构件找不到。如果你使用的是nexus本地maven仓库,可以登录web上去(例如http://192.168.1.250:8081/nexus/#view-central~browsestorage),删除对应的文件夹然后再尝试。
如果还是不行可以试试maven的-U参数 强制更新。
Spring配置文件方式注册作业:zookeeper的ip需要修改,命名空间dd-job会字典在zookeeper里创建。
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:reg="/schema/ddframe/reg"
xmlns:job="/schema/ddframe/job"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
/schema/ddframe/reg
/schema/ddframe/reg/reg.xsd
/schema/ddframe/job
/schema/ddframe/job/job.xsd
&!--配置作业注册中心 --&
&reg:zookeeper id="regCenter" server-lists="192.168.1.251:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /&
&!-- 配置作业--&
&job:simple id="myElasticJob" class="test.MyElasticJob" registry-center-ref="regCenter" cron="0/10 * * * * ?"
sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C" /&
作业类test.MyElasticJob:
import java.util.L
import java.util.M
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingC
import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJ
public class MyElasticJob extends AbstractSimpleElasticJob {
public MyElasticJob() {
System.out.println("MyElasticJob");
public void process(JobExecutionMultipleShardingContext context) {
System.out.println("context:"+context);
String param=context.getJobParameter();
Map&Integer, String& map=context.getShardingItemParameters();
List&Integer& list=context.getShardingItems();
String name=context.getJobName();
Map&Integer, String& offset=context.getOffsets();
System.out.println(System.currentTimeMillis()/1000+":"+param+",map:"+map+",list:"+list+",name:"+name+",offset:"+offset);
sping加载类:
import org.springframework.context.ApplicationC
import org.springframework.context.support.ClassPathXmlApplicationC
public class MainBusinessProcess {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-bean.xml");
System.out.println(ctx);
java方法方式注册作业:zookeeper的ip需要修改,命名空间elastic-job-example会字典在zookeeper里创建。
import com.dangdang.ddframe.job.api.JobS
import com.dangdang.ddframe.job.api.config.impl.DataFlowJobC
import com.dangdang.ddframe.job.api.config.impl.DataFlowJobConfiguration.DataFlowJobConfigurationB
import com.dangdang.ddframe.job.api.config.impl.SimpleJobC
import com.dangdang.ddframe.job.api.config.impl.SimpleJobConfiguration.SimpleJobConfigurationB
import com.dangdang.ddframe.reg.base.CoordinatorRegistryC
import com.dangdang.ddframe.reg.zookeeper.ZookeeperC
import com.dangdang.ddframe.reg.zookeeper.ZookeeperRegistryC
public class JobRegDemo {
// 定义Zookeeper注册中心配置对象
private ZookeeperConfiguration zkConfig = new ZookeeperConfiguration("192.168.1.251:2181", "elastic-job-example", , 3);
// 定义Zookeeper注册中心
private CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(zkConfig);
// 定义作业1配置对象
private SimpleJobConfigurationBuilder jobConfig1build = new SimpleJobConfiguration.SimpleJobConfigurationBuilder("simpleJobDemo", SimpleJobDemo.class, 10, "0/5 * * * * ?");
// 定义作业2配置对象
private DataFlowJobConfigurationBuilder jobConfig2build = new DataFlowJobConfiguration.DataFlowJobConfigurationBuilder("dataFlowElasticJobDemo", DataFlowElasticJobDemo.class, 10, "0/5 * * * * ?");
// 定义作业3配置对象
//private JobConfiguration jobConfig3build = new JobConfiguration("sequencePerpetualElasticDemoJob", SequencePerpetualElasticDemoJob.class, 10, "0/5 * * * * ?");
public static void main(final String[] args) {
new JobRegDemo().init();
private void init() {
// 连接注册中心
regCenter.init();
// 启动作业1
new JobScheduler(regCenter, jobConfig1build.build()).init();
// 启动作业2
new JobScheduler(regCenter, jobConfig2build.build()).init();
// 启动作业3
//new JobScheduler(regCenter, jobConfig3build.build()).init();
作业类test.DataFlowElasticJobDemo:
import java.util.L
import java.util.concurrent.ExecutorS
import com.dangdang.ddframe.job.api.DataFlowElasticJ
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingC
import com.dangdang.ddframe.job.exception.JobE
import com.dangdang.ddframe.job.internal.schedule.JobF
public class DataFlowElasticJobDemo implements DataFlowElasticJob&String, JobExecutionMultipleShardingContext& {
public void execute() {
System.out.println("DataFlowElasticJobDemo");
public void handleJobExecutionException(JobException jobException) {
// TODO Auto-generated method stub
public JobFacade getJobFacade() {
// TODO Auto-generated method stub
public void setJobFacade(JobFacade jobFacade) {
// TODO Auto-generated method stub
public List&String& fetchData(JobExecutionMultipleShardingContext shardingContext) {
// TODO Auto-generated method stub
public void updateOffset(int item, String offset) {
// TODO Auto-generated method stub
public ExecutorService getExecutorService() {
// TODO Auto-generated method stub
作业类test.SimpleJobDemo:
import java.util.L
import java.util.M
import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingC
import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJ
public class SimpleJobDemo extends AbstractSimpleElasticJob {
public SimpleJobDemo() {
System.out.println("SimpleJobDemo");
public void process(JobExecutionMultipleShardingContext context) {
System.out.println("context:"+context);
两个main函数都可以运行,运行后作业会定时执行。
源码:/dangdangdotcom/elastic-job
其中elastic-job-console是监控台,web界面的,可以用来监控和操作当前正在运行的作业。
maven打包后可以生成elastic-job-console-1.1.1.war。
放到tomcat可以直接访问http://localhost:8080/elastic-job-console-1.1.1
用户密码都是root
进入后,注册中心里连接zookeeper(需要输入ip端口和命名空间),即可查看之前两种方法运行的三个job。
注意有两个命名空间dd-job(1个作业)和elastic-job-example(2个作业)。
一台电脑看不出分片与否,因为都分到一个电脑上了。
一个以上就可以从context的shardingItems看出区别。一台电脑挂了分片会重新进行。这个开源的作业框架还是很好用的。
浏览: 105204 次
恩不错,谢谢
这样效率很低哦
写道楼主在吗
你这个注解方式根本就不行
Mysql 5.6.5 noInstall 版本下没有my.i ...
你这个注解方式根本就不行 报错啊 org.hibe ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'403 Forbidden
You don't have permission to access //ElasticJob??¨ae????????.html
on this server.Elastic-Job-Cloud作业云在当当的SRE实践
本次分享面向对Mesos与SRE感兴趣的听众。随着容器技术在国内的随地流行,关注点已由容器技术本身向运维方面逐渐过渡,Google一直安利的SRE经验正好合乎了之秋的运维节奏,由此可SRE概念而衍生的Mesos,Kubernete服务也不停推动着相关意见落地。当当正是在这种背景下研发并推广作业云平台,该平台因Mesos平台打造高自动化云平台。本次分享将第一为大家带来我们是怎么样使用SRE中的连带理念,来保管服务稳定性运行,同时助力业务迅猛迭代的。本次分享包括以下主题:Elastic-Job-Cloud介绍,监控的原形:现象与来自,SLO实践,快速迭代的木本:发布系统,应对变化:配置管理与资源部署。希望此次享受对大家享有帮助。Elastic-Job-Cloud介绍作业是一种使很广泛的计量形式,它的适用领域包括在数额同步(ETL),数据解析,批量计等地方。当当为中等电商平台,同样也有数量可观的作业类任务。原有作业分散配置的方法造成每个组织需要花不少精力来关爱作业的安澜。于此同时根据Google Borg系统衍生的Mesos等任务调度平台也趋于成熟。在此背景下,打造一套弹性作业云平台Elastic-Job-Cloud就成了成功的事务。Elastic-Job-Cloud的布局Elastic-Job体系。Elastic-Job体系包括Elastic-Job-Lite与Elastic-Job-Cloud。两种作业的API基本一致,同样的作业在规模小的时可运Lite部署,需要广泛部署才需要换到Elastic-Job-Cloud中,这样就带了布置策略的八面玲珑。OpenSource目前Elastic-Job-Cloud已经开源,且我们中间用的版本与开源版本就存在发布时间的歧异。内部支出,运维中积累的经验都上报到新版本中,同时也积极吸纳外部的先进特性。这种良性的开源模式,将保险Elastic-Job-Cloud向对的趋向迈进。我清楚的SRESRE是Site Reliability Engineer的简称,它是源起于国外互联网商家的一个词语或者新定义的一个职业。在风俗的系统管理员模式时这个角色我们叫运维,国外叫Operation。但是机器规模大了,单纯的施用人工手段,你就玩不转了。所以这时刻你就需付出人员,也即Developer加入到组织,来兑现一些机关管理机器的功力,这实际上就是DevOps的一种样式。很多人都当这概念还比新,需要一段时日成熟。实际上按照我的经验,这实际上是一个老概念。早在90年代电信行业就引入了电脑软件来管理机器,他们以自动化的先后来开关通讯端口,实现网络迁移等本用人工参与的操作。第一代被机器取代的运维人员好下叫话务员。本质上SRE来源于机器规模的恢弘,以至于你得从On-Call任务中分出一些精力来构建自动化服务,否则将无法透过单纯增加人工来满足运维的急需。从这点出发可以总结下以下方法论:SRE在一天中应有有70%的时日用于研发,如果有的On-Call的任务违反了此条件,那么我们会想将这些任务 变为自动化处理,减少On-Call的时日。这条准可以指导我们在纷繁的靶子中选择那些最根本的情节。下面我会从三个地方阐述SRE的有的实行心得。反馈机制当中国神舟飞船总设计师戚发轫老师在央视“开讲了”节目中被问及对年青工程师有啊寄语的上,老人语重心长的说了两个字反馈。对于
分享这篇日志的人也喜欢
过气主播求关注
,今天炒鸡冷
风里雨里冰冰等你
新主播求关注来聊呀
热门日志推荐
人人最热标签
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3ae9e286f77e437c-ua98).
重新安装浏览器,或使用别的浏览器}

我要回帖

更多关于 elastic job 删除任务 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信