标签: job-scheduling

SecurityException:调用者不再运行

我在尝试运行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)

android job-scheduling android-asynctask jobintentservice

16
推荐指数
1
解决办法
3926
查看次数

如何在Spark Streaming中将作业分配给执行程序?

假设我在Spark Streaming应用程序中有2个或更多执行程序.

我将批处理时间设置为10秒,因此每隔10秒就会启动一个作业,从HDFS读取输入.

如果每个作业持续时间超过10秒,则启动的新作业将分配给免费执行者吗?

即使前一个没完成?

我知道这似乎是一个明显的答案,但我在网站或与Spark Streaming相关的论文中没有找到任何关于作业安排的信息.

如果你知道所有这些事情都被解释的链接,我真的很感激看到它们.

谢谢.

executor job-scheduling apache-spark

15
推荐指数
1
解决办法
6923
查看次数

设计通用作业调度程序

我正在尝试设计一个通用的作业调度程序,以扩展我的架构知识和在面试中思考系统设计问题的能力.到目前为止,我想出的是下面的内容.你能指出我应该在哪些方面努力做到全面解决这类问题吗?

我在线阅读了大量资源,但需要一些具体的指导才能继续前进.

为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

15
推荐指数
2
解决办法
2万
查看次数

Android JobScheduler onStartJob多次调用

JobScheduler多次调用onStartJob(),但作业已完成.一切工作正常,如果我安排一个单一的工作,并等到它完成.但是,如果我同时安排两个或多个具有不同ID的作业,则onStartJob()在调用后再次调用jobFinished().

例如,我使用除ID之外的完全相同的参数来安排作业1和作业2,然后顺序为:

  1. onStartJob() 对于工作1和工作2
  2. 两个作业都完成了,所以jobFinished()它们都被调用了
  3. 之后,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)

jobs android job-scheduling

15
推荐指数
1
解决办法
5621
查看次数

如何在Kubernetes集群上最好地运行Apache Airflow任务?

我们想要实现的目标:

我们希望使用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但这似乎不是最优雅的解决方案.

有什么想法吗?你怎么处理那件事呢?

job-scheduling kubernetes airflow

14
推荐指数
1
解决办法
1849
查看次数

什么是"MySQL事件"?

什么是"MySQL事件"?它的目的是什么?它与"作业调度程序"有何不同?

关于SO的许多帖子和MySQL文档都描述了如何实现MySQL事件,但我只是对它们的目的感兴趣.

php mysql cron events job-scheduling

13
推荐指数
1
解决办法
5277
查看次数

在使用依赖项调度单元任务时最大化利润

问题我有几个工作要在P秒内安排在无限数量的工作机器上具有相关性的机器,即.对于每个工作,都有一组作业,只有在完成这项工作后才能安排.用于调度第i利润 j中工作第二任何机器上为f(I,J),它是正的.
我的目标是通过在最多P秒内完成一次调度每个作业来最大化总利润.

我们可以假设所有作业都可以在P秒内安排.

一切都是提前知道的,即离线问题.

0 <= f(i,j)<= B.对于所有我,j.

并且依赖数是O(n).

这个问题容易吗?[可能是由于有限的约束]

我的方法
为简单起见,首先假设对于一份工作来说,它的利润与时间无关.
即f(i,j)对于所有i而言与j无关,并且仅依赖于i.
然后任何适合P秒的拓扑排序都可以.
如果没有依赖关系,那么我们也为每个工作选择最高的利润给予时间,这也很容易.

但问题是,当工作的利润随着时间的推移随着依赖性而变化时,在这种情况下,我无法想到任何通用算法.

我在处理作业之间的依赖关系时遇到问题,在线调度算法的依赖单元任务是否有任何资源?

请分享任何有助于...的想法

更新:我已添加各种参数的边界,因为它们可能是分析问题所必需的.

c++ algorithm optimization maximize job-scheduling

13
推荐指数
1
解决办法
983
查看次数

GcmNetworkManager调度问题

我在我的应用程序中使用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

13
推荐指数
1
解决办法
1874
查看次数

当一个石英作业触发时,它是一个新的作业类实例吗?

我对Quartz很新,我对工作生命周期有些怀疑.

假设我有一个单独的工作配置来做一些事情.

这项工作开始并结束其工作.当它再次触发它是同一个实例(可能设置为睡眠并由调度程序唤醒)或者它是一个新的作业实例(一旦作业结束它就被杀死,当再次满足触发条件时,创建一个新的作业实例) ?

我问这样的问题,因为当我调试我的应用程序(带有石英支持的Spring 3 mvc)时,我看到作业的新实例,并且每次触发作业时都会打开SimpleThreadPool $ WorkerThreadRun()的新线程,以便SimpleThreadPool $ WorkerThreadRun()线程堆积,永不终止.

我只是想知道这种行为是否正常还是我必须填补记忆;-)

谁能给我一些解释?提前致谢.

java quartz-scheduler job-scheduling spring-3

12
推荐指数
1
解决办法
9051
查看次数

如何检查Quartz cron作业是否正在运行?

如何检查计划的Quartz cron作业是否正在运行?有任何API可以进行检查吗?

java cron scheduler quartz-scheduler job-scheduling

12
推荐指数
2
解决办法
3万
查看次数