calling jssc.stop(false/true,false/true) from streamingListener causes deadlock , So I created another thread and called jssc.stop from that but that too caused deadlock if onBatchCompleted is not completed before jssc.stop().
So is it safe If I call System.exit(1) from another thread without calling jssc.stop()- since that leads to deadlock. On Tue, Aug 11, 2015 at 9:54 PM, Shushant Arora <shushantaror...@gmail.com> wrote: > Is stopping in the streaming context in onBatchCompleted event > of StreamingListener does not kill the app? > > I have below code in streaming listener > > public void onBatchCompleted(StreamingListenerBatchCompleted arg0) { > //check stop condition > System.out.println("stopping gracefully"); > jssc.stop(false,false); > System.out.println("stopped gracefully"); > } > > stopped gracefully is never printed. > > On UI no more batches are processed but application is never > killed/stopped? Whats the best way to kill the app.after stopping context? > > > > On Tue, Aug 11, 2015 at 2:55 AM, Shushant Arora <shushantaror...@gmail.com > > wrote: > >> Thanks! >> >> >> >> On Tue, Aug 11, 2015 at 1:34 AM, Tathagata Das <t...@databricks.com> >> wrote: >> >>> 1. RPC can be done in many ways, and a web service is one of many ways. >>> A even more hacky version can be the app polling a file in a file system, >>> if the file exists start shutting down. >>> 2. No need to set a flag. When you get the signal from RPC, you can just >>> call context.stop(stopGracefully = true) . Though note that this is >>> blocking, so gotta be carefully about doing blocking calls on the RPC >>> thread. >>> >>> On Mon, Aug 10, 2015 at 12:24 PM, Shushant Arora < >>> shushantaror...@gmail.com> wrote: >>> >>>> By RPC you mean web service exposed on driver which listens and set >>>> some flag and driver checks that flag at end of each batch and if set then >>>> gracefully stop the application ? >>>> >>>> On Tue, Aug 11, 2015 at 12:43 AM, Tathagata Das <t...@databricks.com> >>>> wrote: >>>> >>>>> In general, it is a little risky to put long running stuff in a >>>>> shutdown hook as it may delay shutdown of the process which may delay >>>>> other >>>>> things. That said, you could try it out. >>>>> >>>>> A better way to explicitly shutdown gracefully is to use an RPC to >>>>> signal the driver process to start shutting down, and then the process >>>>> will >>>>> gracefully stop the context and terminate. This is more robust that than >>>>> leveraging shutdown hooks. >>>>> >>>>> On Mon, Aug 10, 2015 at 11:56 AM, Shushant Arora < >>>>> shushantaror...@gmail.com> wrote: >>>>> >>>>>> Any help in best recommendation for gracefully shutting down a spark >>>>>> stream application ? >>>>>> I am running it on yarn and a way to tell from externally either yarn >>>>>> application -kill command or some other way but need current batch to be >>>>>> processed completely and checkpoint to be saved before shutting down. >>>>>> >>>>>> Runtime.getRuntime().addShutdownHook does not seem to be working. >>>>>> Yarn kills the application immediately and dooes not call shutdown hook >>>>>> call back . >>>>>> >>>>>> >>>>>> On Sun, Aug 9, 2015 at 12:45 PM, Shushant Arora < >>>>>> shushantaror...@gmail.com> wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> How to ensure in spark streaming 1.3 with kafka that when an >>>>>>> application is killed , last running batch is fully processed and >>>>>>> offsets >>>>>>> are written to checkpointing dir. >>>>>>> >>>>>>> On Fri, Aug 7, 2015 at 8:56 AM, Shushant Arora < >>>>>>> shushantaror...@gmail.com> wrote: >>>>>>> >>>>>>>> Hi >>>>>>>> >>>>>>>> I am using spark stream 1.3 and using custom checkpoint to save >>>>>>>> kafka offsets. >>>>>>>> >>>>>>>> 1.Is doing >>>>>>>> Runtime.getRuntime().addShutdownHook(new Thread() { >>>>>>>> @Override >>>>>>>> public void run() { >>>>>>>> jssc.stop(true, true); >>>>>>>> System.out.println("Inside Add Shutdown Hook"); >>>>>>>> } >>>>>>>> }); >>>>>>>> >>>>>>>> to handle stop is safe ? >>>>>>>> >>>>>>>> 2.And I need to handle saving checkoinnt in shutdown hook also or >>>>>>>> driver will handle it automatically since it grcaefully stops stream >>>>>>>> and >>>>>>>> handle >>>>>>>> completion of foreachRDD function on stream ? >>>>>>>> directKafkaStream.foreachRDD(new Function<JavaRDD<byte[][]>, >>>>>>>> Void>() { >>>>>>>> } >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >