I don't know why I don't see my last message in the thread here: https://lists.apache.org/thread/5wgdqp746nj4f6ovdl42rt82wc8ltkcn Also don't get messages from Artemis in my mail, I can only see them in the thread web UI, which is very confusing. On top of that when I click on "reply via your own email client" in the web UI, I get: Bad Request Error 400
Anyways to answer to your last comment Artemis: > I guess there are several misconceptions here: There's no confusion on my side, all that makes sense. When I said "worker" in that comment I meant the scheduler worker not Spark worker, which in the Spark realm would be the client. Everything else you said is undoubtedly correct, but unrelated to the issue/problem at hand. Sean, Artemis - I appreciate your feedback about the infra setup, but it's beside the problem behind this issue. Let me describe a simpler setup/example with the same problem, say: 1. I have a jupyter notebook 2. use local/driver spark mode only 3. I start the driver, process some data, store it in pandas dataframe 4. now say I want to add a package to spark driver (or increase the JVM memory etc) There's currently no way to do the step 4 without restarting the notebook process which holds the "reference" to the Spark driver/JVM. If I restart the Jupter notebook I would lose all the data in memory (e.g. pandas data), ofc I can save that data to e.g. disk but that's beside the point. I understand you don't want to provide this functionality in Spark, nor warn users on changes in Spark Configuration that won't actually work - as a user I wish I could get at least a warning in that case, but I respect your decision. It seems like the workaround to shutdown the JVM works in this case, I would much appreciate your feedback about **that specific workaround** please. Any reason not to use it? Cheers - Rafal On Thu, 10 Mar 2022 at 18:50, Rafał Wojdyła <ravwojd...@gmail.com> wrote: > If you have a long running python orchestrator worker (e.g. Luigi worker), > and say it's gets a DAG of A -> B ->C, and say the worker first creates a > spark driver for A (which doesn't need extra jars/packages), then it gets B > which is also a spark job but it needs an extra package, it won't be able > to create a new spark driver with extra packages since it's "not possible" > to create a new driver JVM. I would argue it's the same scenario if you > have multiple spark jobs that need different amounts of memory or anything > that requires JVM restart. Of course I can use the workaround to shut down > the driver/JVM, do you have any feedback about that workaround (see my > previous comment or the issue). > > On Thu, 10 Mar 2022 at 18:12, Sean Owen <sro...@gmail.com> wrote: > >> Wouldn't these be separately submitted jobs for separate workloads? You >> can of course dynamically change each job submitted to have whatever >> packages you like, from whatever is orchestrating. A single job doing >> everything sound right. >> >> On Thu, Mar 10, 2022, 12:05 PM Rafał Wojdyła <ravwojd...@gmail.com> >> wrote: >> >>> Because I can't (and should not) know ahead of time which jobs will be >>> executed, that's the job of the orchestration layer (and can be dynamic). I >>> know I can specify multiple packages. Also not worried about memory. >>> >>> On Thu, 10 Mar 2022 at 13:54, Artemis User <arte...@dtechspace.com> >>> wrote: >>> >>>> If changing packages or jars isn't your concern, why not just specify >>>> ALL packages that you would need for the Spark environment? You know you >>>> can define multiple packages under the packages option. This shouldn't >>>> cause memory issues since JVM uses dynamic class loading... >>>> >>>> On 3/9/22 10:03 PM, Rafał Wojdyła wrote: >>>> >>>> Hi Artemis, >>>> Thanks for your input, to answer your questions: >>>> >>>> > You may want to ask yourself why it is necessary to change the jar >>>> packages during runtime. >>>> >>>> I have a long running orchestrator process, which executes multiple >>>> spark jobs, currently on a single VM/driver, some of those jobs might >>>> require extra packages/jars (please see example in the issue). >>>> >>>> > Changing package doesn't mean to reload the classes. >>>> >>>> AFAIU this is unrelated >>>> >>>> > There is no way to reload the same class unless you customize the >>>> classloader of Spark. >>>> >>>> AFAIU this is an implementation detail. >>>> >>>> > I also don't think it is necessary to implement a warning or error >>>> message when changing the configuration since it doesn't do any harm >>>> >>>> To reiterate right now the API allows to change configuration of the >>>> context, without that configuration taking effect. See example of confused >>>> users here: >>>> * >>>> https://stackoverflow.com/questions/41886346/spark-2-1-0-session-config-settings-pyspark >>>> * >>>> https://stackoverflow.com/questions/53606756/how-to-set-spark-driver-memory-in-client-mode-pyspark-version-2-3-1 >>>> >>>> I'm curious if you have any opinion about the "hard-reset" workaround, >>>> copy-pasting from the issue: >>>> >>>> ``` >>>> s: SparkSession = ... >>>> >>>> # Hard reset: >>>> s.stop() >>>> s._sc._gateway.shutdown() >>>> s._sc._gateway.proc.stdin.close() >>>> SparkContext._gateway = None >>>> SparkContext._jvm = None >>>> ``` >>>> >>>> Cheers - Rafal >>>> >>>> On 2022/03/09 15:39:58 Artemis User wrote: >>>> > This is indeed a JVM issue, not a Spark issue. You may want to ask >>>> > yourself why it is necessary to change the jar packages during >>>> runtime. >>>> > Changing package doesn't mean to reload the classes. There is no way >>>> to >>>> > reload the same class unless you customize the classloader of Spark. >>>> I >>>> > also don't think it is necessary to implement a warning or error >>>> message >>>> > when changing the configuration since it doesn't do any harm. Spark >>>> > uses lazy binding so you can do a lot of such "unharmful" things. >>>> > Developers will have to understand the behaviors of each API before >>>> when >>>> > using them.. >>>> > >>>> > >>>> > On 3/9/22 9:31 AM, Rafał Wojdyła wrote: >>>> > > Sean, >>>> > > I understand you might be sceptical about adding this functionality >>>> > > into (py)spark, I'm curious: >>>> > > * would error/warning on update in configuration that is currently >>>> > > effectively impossible (requires restart of JVM) be reasonable? >>>> > > * what do you think about the workaround in the issue? >>>> > > Cheers - Rafal >>>> > > >>>> > > On Wed, 9 Mar 2022 at 14:24, Sean Owen <sr...@gmail.com> wrote: >>>> > > >>>> > > Unfortunately this opens a lot more questions and problems than >>>> it >>>> > > solves. What if you take something off the classpath, for >>>> example? >>>> > > change a class? >>>> > > >>>> > > On Wed, Mar 9, 2022 at 8:22 AM Rafał Wojdyła >>>> > > <ra...@gmail.com> wrote: >>>> > > >>>> > > Thanks Sean, >>>> > > To be clear, if you prefer to change the label on this issue >>>> > > from bug to sth else, feel free to do so, no strong opinions >>>> > > on my end. What happens to the classpath, whether spark uses >>>> > > some classloader magic, is probably an implementation >>>> detail. >>>> > > That said, it's definitely not intuitive that you can change >>>> > > the configuration and get the context (with the updated >>>> > > config) without any warnings/errors. Also what would you >>>> > > recommend as a workaround or solution to this problem? Any >>>> > > comments about the workaround in the issue? Keep in mind >>>> that >>>> > > I can't restart the long running orchestration process >>>> (python >>>> > > process if that matters). >>>> > > Cheers - Rafal >>>> > > >>>> > > On Wed, 9 Mar 2022 at 13:15, Sean Owen <sr...@gmail.com> >>>> wrote: >>>> > > >>>> > > That isn't a bug - you can't change the classpath once >>>> the >>>> > > JVM is executing. >>>> > > >>>> > > On Wed, Mar 9, 2022 at 7:11 AM Rafał Wojdyła >>>> > > <ra...@gmail.com> wrote: >>>> > > >>>> > > Hi, >>>> > > My use case is that, I have a long running process >>>> > > (orchestrator) with multiple tasks, some tasks might >>>> > > require extra spark dependencies. It seems once the >>>> > > spark context is started it's not possible to update >>>> > > `spark.jars.packages`? I have reported an issue at >>>> > > https://issues.apache.org/jira/browse/SPARK-38438, >>>> > > together with a workaround ("hard reset of the >>>> > > cluster"). I wonder if anyone has a solution for >>>> this? >>>> > > Cheers - Rafal >>>> > > >>>> > >>>> >>>>> >>>>