我在尝试运行JobIntentService时面临Android O及以上版本的问题,我很难重现这个问题:
Caused by java.lang.SecurityException: Caller no longer running, last stopped +206ms because: timed out while starting
at android.os.Parcel.readException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1888)
at android.app.job.IJobCallback$Stub$Proxy.dequeueWork(IJobCallback.java:191)
at android.app.job.JobParameters.dequeueWork(JobParameters.java:196)
at android.support.v4.app.JobIntentService$JobServiceEngineImpl.dequeueWork(JobIntentService.java:314)
at android.support.v4.app.JobIntentService.dequeueWork(JobIntentService.java:639)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:389)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:382)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud) 假设我在Spark Streaming应用程序中有2个或更多执行程序.
我将批处理时间设置为10秒,因此每隔10秒就会启动一个作业,从HDFS读取输入.
如果每个作业持续时间超过10秒,则启动的新作业将分配给免费执行者吗?
即使前一个没完成?
我知道这似乎是一个明显的答案,但我在网站或与Spark Streaming相关的论文中没有找到任何关于作业安排的信息.
如果你知道所有这些事情都被解释的链接,我真的很感激看到它们.
谢谢.
我正在尝试设计一个通用的作业调度程序,以扩展我的架构知识和在面试中思考系统设计问题的能力.到目前为止,我想出的是下面的内容.你能指出我应该在哪些方面努力做到全面解决这类问题吗?
我在线阅读了大量资源,但需要一些具体的指导才能继续前进.
为X公司设计通用的作业调度程序(这是当今的大型技术公司之一).
用例
创建/读取/更新/删除作业
调查过去运行的工作(工作类型,花费的时间,详细信息)
约束
每秒在系统上运行多少个作业?
=#jobs /小时由于用户+#jobs /小时由于机器
= 1m*0.5 /天/ 24/3600 + 1m/50*20/24/3600
〜= 12个工作/秒
系统需要存储多少数据?
推理:我只存储作业执行细节,在其他机器上完成实际工作(脚本执行),收集的一些数据是结束时间,成功/失败状态等.这些都可能只是文本,也可能是图形用于说明目的.我将通过作业调度程序(即过去10年)存储>>在系统中执行的所有作业的数据
=(设置作业详细信息的页面大小+收集的有关作业的数据大小)*作业数量*365>天*10年= 1 MB*900 000*365*10
〜= 3600 000 000 MB
= 3600 000 GB
= 3600 TB = 3.6 PB
抽象设计
根据上述信息,我们不需要太多的机器来保存数据.我会将设计分解为以下内容:
应用层:提供请求,显示UI详细信息.
数据存储层:类似于大型哈希表:存储键值的映射(键是由运行的dateTime组织的作业,而值将显示这些作业的详细信息).这样可以轻松搜索历史和/或预定作业.
瓶颈:
流量:12个工作/秒不是太具有挑战性.如果出现这种情况,我们可以使用负载均衡器将作业分发到不同的服务器以便执行.
数据:在3.6 TB时,我们需要一个可以轻松查询的哈希表,以便快速访问已在应用程序中执行的作业.
缩放抽象设计
这个作业调度程序的本质是它每个作业都拥有以下几个状态之一:Pending,Failed,Success,Terminated.没有业务逻辑返回很少的数据.
为了处理流量,我们可以拥有一个处理12个请求/秒的应用服务器和一个备份,以防这个失败.将来,我们可以使用负载均衡器来减少发送到每个服务器的请求数量(假设> 1台服务器正在生产中)这样做的好处是减少请求/服务器数量,增加可用性(如果一台服务器出现故障,以及处理spike-y交通井).
对于数据存储,要存储3.6 TB的数据,我们需要一些机器将其保存在数据库中.我们可以使用noSQL db或SQL db.鉴于后者有更广泛的使用和社区支持,这将有助于解决问题,目前被大公司使用,我会选择mySQL数据库.
随着数据的增长,我将采用以下策略来处理它:
1)在哈希上创建唯一索引
2)通过添加更多内存来垂直扩展mySQL数据库
3)通过分片对数据进行分区
4)使用具有主 - 主复制的主从复制策略来确保数据冗余
结论
因此,这将是我对作业调度程序组件的设计.
architecture n-tier-architecture job-scheduling system-design
JobScheduler多次调用onStartJob(),但作业已完成.一切工作正常,如果我安排一个单一的工作,并等到它完成.但是,如果我同时安排两个或多个具有不同ID的作业,则onStartJob()在调用后再次调用jobFinished().
例如,我使用除ID之外的完全相同的参数来安排作业1和作业2,然后顺序为:
onStartJob() 对于工作1和工作2jobFinished()它们都被调用了onStartJob()对于具有相同ID的两个作业再次调用它我的工作非常基础而且并不复杂.
public class MyJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// do something
} finally {
// do not reschedule
jobFinished(params, false);
}
}
}).start();
// yes, job running in the background
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// mark my background task as stopped
// …Run Code Online (Sandbox Code Playgroud) 我们想要实现的目标:
我们希望使用Airflow来管理我们的机器学习和数据管道,同时使用Kubernetes来管理资源和安排作业.我们希望实现的是Airflow协调工作流程(例如,各种任务依赖关系.在失败时重新运行作业)和Kubernetes协调基础设施(例如,群集自动调节和单个作业分配到节点).换句话说,Airflow将告诉Kubernetes集群做什么,Kubernetes决定如何分配工作.与此同时,我们还希望Airflow能够监控各个任务的状态.例如,如果我们在5个节点的集群中传播10个任务,Airflow应该能够与集群通信,并且报告显示如下:3个"小任务"完成,1个"小任务"失败并将被安排到重新运行,其余6个"大任务"仍在运行.
问题:
我们的理解是Airflow没有Kubernetes-Operator,请参阅https://issues.apache.org/jira/browse/AIRFLOW-1314中的未解决问题.话虽如此,我们不希望Airflow管理资源,如管理服务帐户,env变量,创建集群等,而只需将任务发送到现有的Kubernetes集群,让Airflow知道何时完成作业.另一种方法是使用Apache Mesos,但与Kubernetes相比,它看起来不那么灵活,也不那么简单.
我想我们可以使用Airflow的bash_operator来运行,kubectl但这似乎不是最优雅的解决方案.
有什么想法吗?你怎么处理那件事呢?
什么是"MySQL事件"?它的目的是什么?它与"作业调度程序"有何不同?
关于SO的许多帖子和MySQL文档都描述了如何实现MySQL事件,但我只是对它们的目的感兴趣.
问题我有几个工作要在P秒内安排在无限数量的工作机器上具有相关性的机器,即.对于每个工作,都有一组作业,只有在完成这项工作后才能安排.用于调度第i利润个 j中工作个第二任何机器上为f(I,J),它是正的.
我的目标是通过在最多P秒内完成一次调度每个作业来最大化总利润.
我们可以假设所有作业都可以在P秒内安排.
一切都是提前知道的,即离线问题.
0 <= f(i,j)<= B.对于所有我,j.
并且依赖数是O(n).
这个问题容易吗?[可能是由于有限的约束]
我的方法
为简单起见,首先假设对于一份工作来说,它的利润与时间无关.
即f(i,j)对于所有i而言与j无关,并且仅依赖于i.
然后任何适合P秒的拓扑排序都可以.
如果没有依赖关系,那么我们也为每个工作选择最高的利润给予时间,这也很容易.
但问题是,当工作的利润随着时间的推移随着依赖性而变化时,在这种情况下,我无法想到任何通用算法.
我在处理作业之间的依赖关系时遇到问题,在线调度算法的依赖单元任务是否有任何资源?
请分享任何有助于...的想法
更新:我已添加各种参数的边界,因为它们可能是分析问题所必需的.
我在我的应用程序中使用GcmNetworkManager进行定期和任务任务执行之一.我收到这两个错误,无法弄清楚原因.实施是正确的,因为我无法在登台时重现这些问题.
Fatal Exception: java.lang.RuntimeException: Package manager has died
at android.app.ApplicationPackageManager.queryIntentServicesAsUser(ApplicationPackageManager.java:700)
at android.app.ApplicationPackageManager.queryIntentServices(ApplicationPackageManager.java:706)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
&
Caused by java.lang.IllegalArgumentException: There is no GcmTaskService component registered within this package. Have you extended GcmTaskService correctly?
at com.google.android.gms.common.internal.zzx.zzb(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
谢谢
PS:设备具有8.1+的播放服务.
android scheduling job-scheduling periodic-task gcm-network-manager
我对Quartz很新,我对工作生命周期有些怀疑.
假设我有一个单独的工作配置来做一些事情.
这项工作开始并结束其工作.当它再次触发它是同一个实例(可能设置为睡眠并由调度程序唤醒)或者它是一个新的作业实例(一旦作业结束它就被杀死,当再次满足触发条件时,创建一个新的作业实例) ?
我问这样的问题,因为当我调试我的应用程序(带有石英支持的Spring 3 mvc)时,我看到作业的新实例,并且每次触发作业时都会打开SimpleThreadPool $ WorkerThreadRun()的新线程,以便SimpleThreadPool $ WorkerThreadRun()线程堆积,永不终止.
我只是想知道这种行为是否正常还是我必须填补记忆;-)
谁能给我一些解释?提前致谢.
如何检查计划的Quartz cron作业是否正在运行?有任何API可以进行检查吗?
job-scheduling ×10
android ×3
cron ×2
java ×2
airflow ×1
algorithm ×1
apache-spark ×1
architecture ×1
c++ ×1
events ×1
executor ×1
jobs ×1
kubernetes ×1
maximize ×1
mysql ×1
optimization ×1
php ×1
scheduler ×1
scheduling ×1
spring-3 ×1