精华内容
下载资源
问答
  • 任务终止
    千次阅读
    2020-12-19 14:56:23

    我在客户端模式下使用Yarn(版本2.6.0)在Hadoop集群上运行Spark应用程序(版本1.6.0) . 我有一段代码运行一个很长的计算,如果它需要太长时间我想杀死它(然后运行一些其他函数) .

    这是一个例子:

    val conf = new SparkConf().setAppName("TIMEOUT_TEST")

    val sc = new SparkContext(conf)

    val lst = List(1,2,3)

    // setting up an infite action

    val future = sc.parallelize(lst).map(while (true) _).collectAsync()

    try {

    Await.result(future, Duration(30, TimeUnit.SECONDS))

    println("success!")

    } catch {

    case _:Throwable =>

    future.cancel()

    println("timeout")

    }

    // sleep for 1 hour to allow inspecting the application in yarn

    Thread.sleep(60*60*1000)

    sc.stop()

    超时设置为30秒,但当然计算是无限的,因此等待将来的结果将抛出一个异常,将被捕获,然后将取消未来并且将执行备份功能 .

    这一切都运行得很好,除了取消的作业没有完全终止:当查看应用程序的Web UI时,作业被标记为失败,但我可以看到内部仍有运行的任务 .

    当我使用SparkContext.cancelAllJobs或SparkContext.cancelJobGroup时会发生同样的事情 . 问题是,即使我设法继续我的程序,取消的工作的运行任务仍然占用宝贵的资源(这将最终使我减慢到接近停止) .

    总结一下:如何以一种终止该作业的所有正在运行的任务的方式杀死Spark作业? (与现在发生的情况相反,这会阻止作业运行新任务,但让当前正在运行的任务完成)

    更新:

    经过很长一段时间忽略了这个问题,我们发现了一个混乱但有效的小解决方法 . 我们只是在发生超时时记录所有活动阶段的阶段ID,而不是尝试从Spark应用程序中删除相应的Spark Job / Stage,并向用于查杀的Spark Web UI提供的URL发出HTTP GET请求所说的阶段 .

    更多相关内容
  • 本篇文章给大家分享了JAVA中实现终止线程池中正在运行的定时任务的具体步骤和方法,有需要的朋友跟着学习下。
  • celery 终止异步任务

    2021-07-06 10:35:24
    from celery.result import AsyncResult AsyncResult(task_id).revoke()
    from celery.result import AsyncResult
    AsyncResult(task_id).revoke()

    展开全文
  • 问题 这里,我使用的终端是MobaXterm 准备好VASP的输入文件, ...再次进入,发现任务终止, tail OUTCAR 解决方案 不要直接退出终端, 终端下输入命令行, exit 然后,关闭终端。 问题解决。 ...

    问题

    这里,我使用的终端是MobaXterm
    在这里插入图片描述
    准备好VASP的输入文件,
    当前目录下,终端输入命令,
    nohup mpirun -np 16 vasp &
    系统提示PID号,任务后台运行,没有问题。
    但是,当我们直接关闭终端,
    在这里插入图片描述
    再次进入,发现任务终止,
    tail OUTCAR
    在这里插入图片描述

    解决方案

    不要直接退出终端,
    终端下输入命令行,
    exit
    在这里插入图片描述
    然后,关闭终端。
    问题解决。

    展开全文
  • 关于线程池中终止任务

    千次阅读 2020-04-27 17:22:42
    使用线程池本身删除或终止任务,有一个必须的前提: 任务必须存在于队列之中。 为什么这么说? 是因为我们所谓的“删除任务”是指ThreadPoolExecutor的remove方法: public boolean remove(Runnable task) { ...

    使用线程池本身删除或终止任务,有一个必须的前提:
    任务必须存在于队列之中

    为什么这么说?

    是因为我们所谓的“删除任务”是指ThreadPoolExecutor的remove方法:

        public boolean remove(Runnable task) {
            boolean removed = workQueue.remove(task);
            tryTerminate(); // In case SHUTDOWN and now empty
            return removed;
        }
    

    可以看到,是需要从workQueue中移除的;
    也就是说,如果已经运行的任务,理论上是无法使用线程池进行删除操作的

    比如:

    	private static void testNormalRemove() {
    		ThreadPoolExecutor tpe = new ThreadPoolExecutor(1, 3, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(3));
    
    		Thread task1 = new Thread(new Runnable() {
    			@Override
    			public void run() {
    					while (true) {
    						try {
    							TimeUnit.SECONDS.sleep(2);
    						} catch (InterruptedException e) {
    							e.printStackTrace();
    						}
    						System.out.println("normal1," + Thread.currentThread().getId());
    					}
    				}
    		});
    		Thread task2 = new Thread(new Runnable() {
    			@Override
    			public void run() {
    				while (true) {
    					try {
    						TimeUnit.SECONDS.sleep(3);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    						return;
    					}
    					System.out.println("normal2," + Thread.currentThread().getId());
    				}
    			}
    		});
    		tpe.execute(task1);
    		tpe.execute(task2);
    
    		try {
    			TimeUnit.SECONDS.sleep(6);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println(tpe.getQueue().size());
    		System.out.println("remove task2," + tpe.remove(task2));
    
    		try {
    			TimeUnit.SECONDS.sleep(6);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    
    	}
    

    这里有task1、task2两个任务,创建的线程池核心线程为1,那么task1被添加后会被马上运行,而task2会添加入队列等待运行,原理可参考线程池原理浅析,那么task2是可以被remove成功的,而task1是不能被remove的,因为根本不在队列之中了。

    当然,存在一些特殊的线程池,每个任务其实都加入了队列,比如ScheduledThreadPoolExecutor添加任务时,其实每个任务都被添加进了队列:

        public void execute(Runnable command) {
            schedule(command, 0, NANOSECONDS);
        }
    
        public ScheduledFuture<?> schedule(Runnable command,
                                           long delay,
                                           TimeUnit unit) {
            if (command == null || unit == null)
                throw new NullPointerException();
            RunnableScheduledFuture<?> t = decorateTask(command,
                new ScheduledFutureTask<Void>(command, null,
                                              triggerTime(delay, unit)));
            delayedExecute(t);
            return t;
        }
    
        private void delayedExecute(RunnableScheduledFuture<?> task) {
            if (isShutdown())
                reject(task);
            else {
                super.getQueue().add(task);
                if (isShutdown() &&
                    !canRunInCurrentRunState(task.isPeriodic()) &&
                    remove(task))
                    task.cancel(false);
                else
                    ensurePrestart();
            }
        }
    

    这样添加进来的任务是可以进行删除操作的;
    当然需要注意的是添加的任务被封装成了RunnableScheduledFuture,所以删除的时候也要记得转换为RunnableScheduledFuture再进行删除,如果是使用schedule或其他scheduleXX方法,会直接返回RunnableScheduledFuture,可以就返回值来进行删除操作。

    而其他线程池则没这么“好运”了,遵循一般规则,仅在超出corePoolSize时才会加入队列;
    线程池内部倒是有停止线程的方法,但线程池内部的调度方法大多是private,是无法调用的,比如这个:

        private void processWorkerExit(Worker w, boolean completedAbruptly) {
            if (completedAbruptly) // If abrupt, then workerCount wasn't adjusted
                decrementWorkerCount();
    
            final ReentrantLock mainLock = this.mainLock;
            mainLock.lock();
            try {
                completedTaskCount += w.completedTasks;
                workers.remove(w);
            } finally {
                mainLock.unlock();
            }
    		//略
        }
    

    已经运行的线程或者任务都被封装为Worker,但关于Worker的方法并不对外开放,这也是大多线程池无法精细控制线程的原因——当然,线程本身就很说去精细控制。

    总体来说,线程一旦启动,就很难通过常规手段去停止,往往需要抛出异常或添加return或者强行interrupt来停止;
    如果需要对线程进行一定的掌握,那么使用类似于ScheduledThreadPoolExecutor的线程池在某些场景也不失为一个优良的选择。

    展开全文
  • 使用Quartz调度任务,根据需要人为的终止某个任务,适用于很多常见的场景
  • 停止正在运行的hadoop任务

    千次阅读 2022-05-01 20:48:17
    查看正在运行的任务列表 yarn application -list -appStates RUNNING 停止任务 yarn application -kill application_任务编号
  • 禁止通过任务管理器来终止进程运行,你会发现打开任务管理器后,结束进程 的功能没有了
  • Timer异常后导致任务终止的解决方法

    万次阅读 2013-01-09 17:46:44
    但是客户反应 某些数据没成功,于是看日志发现是由于Timer报错了,任务终止了。 然后需要改成在Timer报错的时候还要继续执行任务,于是 catch 里面加代码,但是不是很好。 在网上找到一个 java.util....
  • TDH终止Yarn任务

    千次阅读 2022-01-19 15:45:21
    进入yarn source页面,找到正在执行中的任务 2、登录容器 进入yarn-resourcemanager 节点 # 查看yarn相关的容器信息 kubectl get pods -o wide|grep yarn # 进入resourcemanager容器 kubectl exec -it ...
  • ScheduledThreadPoolExecutor终止执行runnable

    千次阅读 2020-06-09 15:36:35
    之前用定时任务的线程池,设置了个任务,但是突然今天产品说,某些个操作需要中断某些任务(如果任务还没有执行),使其不能再到点执行了。于是查了API果然有这样一个方法。 一看API,需要移除的是一个Runnable...
  • 但是没成功,于是看日志发现是由于Timer报错了,任务终止了。 然后需要改成在Timer报错的时候还要继续执行任务,于是 catch 里面加代码,但是不是很好。 在网上找到一个 java.util.concurrent....
  • 提示:使用Cinchoo框架的异步可中止的长期运行任务
  • 终止Jenkins某Job的排队任务

    千次阅读 2022-04-13 21:11:51
    Jenkins => 系统管理 => Jenkins CLI 在命令行中输入: import hudson.model.* def q = Jenkins.instance.queue q.items.findAll { it.task.name.startsWith('JobName') }.each { q.cancel(it.task) } ...
  • XxlJob终止任务失败 只需在合适的地方加 TimeUnit.SECONDS.sleep(1) 然后捕获异常即可 图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。 ...
  • celery 停止执行中 task

    千次阅读 2021-01-26 19:23:12
    原因因为最近项目需求中需要提供对异步执行任务终止的功能,所以在寻找停止celery task任务的方法。这种需求以前没有碰到过,所以,只能求助于百度和google,但是找遍了资料,都没找到相关的能停止celery task任务的...
  • Spring @Async注解实现异步任务

    千次阅读 2019-06-18 09:33:40
    1. Spring对任务调度和异步任务执行的支持 Spring提供了如下注解用于支持任务调用和异步方法执行: @Scheduled:任务调度 @Async:异步方法执行 启用任务调度和异步方法执行的注解: @EnableScheduling:...
  • 1、在 ASP.NET Core 中使用托管服务实现后台任务 很多时候我们需要给程序添加一些后台任务,帮我处理一些需要定时处理的任务,比如定时发送邮件,定时做一些统计之类的工作,这时候我们可以写一个windows服务来搞定...
  • 终止一个阻塞线程和终止一个非阻塞线程的方式
  • 我是把项目换了个路径就解决了,之前项目是在C盘,后来重新从GIT拉取到D盘,再启动,问题解决了!!! 应该是某系缓存没有清理干净导致的。
  • Timer任务定时器如何终止

    千次阅读 2019-10-15 19:42:30
    在计时器结束后,我们需要通过public void cancel()来取消这个线程,不然它会一直挂起。如果需要在外面终止计时器,也可以schedule()方法外面调用这个方法。
  • activiti 并行网关中强制结束任务

    千次阅读 2020-05-31 23:05:18
    在并行网关中如果强制结束任务可使用终结任务,结束任务对并行网关是不起作用的,并不会真正的结束流程 如上面 两个并行节点只要有一个人驳回就结束流程 这时就可以使用终结任务 在网关设置走不同意的线就结束...
  • scheduleExecutor终止指定任务的方式

    千次阅读 2020-03-02 18:10:29
    使用ScheduledExecutorService.schedule提交任务到执行器定时执行后,我们想在某一特定条件下终止执行器中的某个任务。本文列举2种实现方法。
  • 我们在使用打印的时候,会遇到打印机卡纸或者没纸的情况,但是打印机任务还在继续,是需要把打印任务给停止了,但有些用户还是不会终止打印任务,那么要如何终止打印机任务呢,下面小编给大家分享停止打印机任务的...
  • 1.通过继承Job执行quartz任务 2.大概有30多个quartz任务 问题发生现象: 1.所有任务日志均无输出,似乎都停止了 问题发生原因: 1.这30多个任务中,有一个任务【JOB-1】在执行时处理过慢,发生了阻塞。 2.因为...
  • 先描述一下场景:我有一批任务需要放入线程池中去处理,但是一旦线程池中有1个任务出现了异常(抛了Exception)就将线程中尚未开始的任务全部取消不执行。需要说明的是正在执行的任务因为无法撤销,所以正在执行的...
  • 前面的几个例子中,使用了“退出标志”或Cancelable接口以适当的方式来终止一个任务,但某些情况下任务必须突然结束掉,这样终止任务将会所产生一些问题。举例:模拟计数,公园委员会想要了解每天有多少从通过公园的...
  • linux 任务管理-后台运行与终止 fg、bg、jobs、&、ctrl + z命令 一、 & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 299,245
精华内容 119,698
关键字:

任务终止