As of Spark 2.0, Mesos mode does support setting cores on the executor level, but you might need to set the property directly (--conf spark.executor.cores=<cores>). I've written about this here: https://docs.mesosphere.com/1.8/usage/service-guides/spark/job-scheduling/. That doc is for DC/OS, but the configuration is the same.
On Thu, Feb 2, 2017 at 1:06 PM, Ji Yan <ji...@drive.ai> wrote: > I was mainly confused why this is the case with memory, but with cpu > cores, it is not specified on per executor level > > On Thu, Feb 2, 2017 at 1:02 PM, Michael Gummelt <mgumm...@mesosphere.io> > wrote: > >> It sounds like you've answered your own question, right? >> --executor-memory means the memory per executor. If you have no executor >> w/ 200GB memory, then the driver will accept no offers. >> >> On Thu, Feb 2, 2017 at 1:01 PM, Ji Yan <ji...@drive.ai> wrote: >> >>> sorry, to clarify, i was using --executor-memory for memory, >>> and --total-executor-cores for cpu cores >>> >>> On Thu, Feb 2, 2017 at 12:56 PM, Michael Gummelt <mgumm...@mesosphere.io >>> > wrote: >>> >>>> What CLI args are your referring to? I'm aware of spark-submit's >>>> arguments (--executor-memory, --total-executor-cores, and --executor-cores) >>>> >>>> On Thu, Feb 2, 2017 at 12:41 PM, Ji Yan <ji...@drive.ai> wrote: >>>> >>>>> I have done a experiment on this today. It shows that only CPUs are >>>>> tolerant of insufficient cluster size when a job starts. On my cluster, I >>>>> have 180Gb of memory and 64 cores, when I run spark-submit ( on mesos ) >>>>> with --cpu_cores set to 1000, the job starts up with 64 cores. but when I >>>>> set --memory to 200Gb, the job fails to start with "Initial job has >>>>> not accepted any resources; check your cluster UI to ensure that workers >>>>> are registered and have sufficient resources" >>>>> >>>>> Also it is confusing to me that --cpu_cores specifies the number of >>>>> cpu cores across all executors, but --memory specifies per executor memory >>>>> requirement. >>>>> >>>>> On Mon, Jan 30, 2017 at 11:34 AM, Michael Gummelt < >>>>> mgumm...@mesosphere.io> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Mon, Jan 30, 2017 at 9:47 AM, Ji Yan <ji...@drive.ai> wrote: >>>>>> >>>>>>> Tasks begin scheduling as soon as the first executor comes up >>>>>>> >>>>>>> >>>>>>> Thanks all for the clarification. Is this the default behavior of >>>>>>> Spark on Mesos today? I think this is what we are looking for because >>>>>>> sometimes a job can take up lots of resources and later jobs could not >>>>>>> get >>>>>>> all the resources that it asks for. If a Spark job starts with only a >>>>>>> subset of resources that it asks for, does it know to expand its >>>>>>> resources >>>>>>> later when more resources become available? >>>>>>> >>>>>> >>>>>> Yes. >>>>>> >>>>>> >>>>>>> >>>>>>> Launch each executor with at least 1GB RAM, but if mesos offers 2GB >>>>>>>> at some moment, then launch an executor with 2GB RAM >>>>>>> >>>>>>> >>>>>>> This is less useful in our use case. But I am also quite interested >>>>>>> in cases in which this could be helpful. I think this will also help >>>>>>> with >>>>>>> overall resource utilization on the cluster if when another job starts >>>>>>> up >>>>>>> that has a hard requirement on resources, the extra resources to the >>>>>>> first >>>>>>> job can be flexibly re-allocated to the second job. >>>>>>> >>>>>>> On Sat, Jan 28, 2017 at 2:32 PM, Michael Gummelt < >>>>>>> mgumm...@mesosphere.io> wrote: >>>>>>> >>>>>>>> We've talked about that, but it hasn't become a priority because we >>>>>>>> haven't had a driving use case. If anyone has a good argument for >>>>>>>> "variable" resource allocation like this, please let me know. >>>>>>>> >>>>>>>> On Sat, Jan 28, 2017 at 9:17 AM, Shuai Lin <linshuai2...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> An alternative behavior is to launch the job with the best >>>>>>>>>> resource offer Mesos is able to give >>>>>>>>> >>>>>>>>> >>>>>>>>> Michael has just made an excellent explanation about dynamic >>>>>>>>> allocation support in mesos. But IIUC, what you want to achieve is >>>>>>>>> something like (using RAM as an example) : "Launch each executor with >>>>>>>>> at >>>>>>>>> least 1GB RAM, but if mesos offers 2GB at some moment, then launch an >>>>>>>>> executor with 2GB RAM". >>>>>>>>> >>>>>>>>> I wonder what's benefit of that? To reduce the "resource >>>>>>>>> fragmentation"? >>>>>>>>> >>>>>>>>> Anyway, that is not supported at this moment. In all the supported >>>>>>>>> cluster managers of spark (mesos, yarn, standalone, and the >>>>>>>>> up-to-coming >>>>>>>>> spark on kubernetes), you have to specify the cores and memory of each >>>>>>>>> executor. >>>>>>>>> >>>>>>>>> It may not be supported in the future, because only mesos has the >>>>>>>>> concepts of offers because of its two-level scheduling model. >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sat, Jan 28, 2017 at 1:35 AM, Ji Yan <ji...@drive.ai> wrote: >>>>>>>>> >>>>>>>>>> Dear Spark Users, >>>>>>>>>> >>>>>>>>>> Currently is there a way to dynamically allocate resources to >>>>>>>>>> Spark on Mesos? Within Spark we can specify the CPU cores, memory >>>>>>>>>> before >>>>>>>>>> running job. The way I understand is that the Spark job will not run >>>>>>>>>> if the >>>>>>>>>> CPU/Mem requirement is not met. This may lead to decrease in overall >>>>>>>>>> utilization of the cluster. An alternative behavior is to launch the >>>>>>>>>> job >>>>>>>>>> with the best resource offer Mesos is able to give. Is this possible >>>>>>>>>> with >>>>>>>>>> the current implementation? >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> Ji >>>>>>>>>> >>>>>>>>>> The information in this email is confidential and may be legally >>>>>>>>>> privileged. It is intended solely for the addressee. Access to this >>>>>>>>>> email >>>>>>>>>> by anyone else is unauthorized. If you are not the intended >>>>>>>>>> recipient, any >>>>>>>>>> disclosure, copying, distribution or any action taken or omitted to >>>>>>>>>> be >>>>>>>>>> taken in reliance on it, is prohibited and may be unlawful. >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Michael Gummelt >>>>>>>> Software Engineer >>>>>>>> Mesosphere >>>>>>>> >>>>>>> >>>>>>> >>>>>>> The information in this email is confidential and may be legally >>>>>>> privileged. It is intended solely for the addressee. Access to this >>>>>>> email >>>>>>> by anyone else is unauthorized. If you are not the intended recipient, >>>>>>> any >>>>>>> disclosure, copying, distribution or any action taken or omitted to be >>>>>>> taken in reliance on it, is prohibited and may be unlawful. >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Michael Gummelt >>>>>> Software Engineer >>>>>> Mesosphere >>>>>> >>>>> >>>>> >>>>> The information in this email is confidential and may be legally >>>>> privileged. It is intended solely for the addressee. Access to this email >>>>> by anyone else is unauthorized. If you are not the intended recipient, any >>>>> disclosure, copying, distribution or any action taken or omitted to be >>>>> taken in reliance on it, is prohibited and may be unlawful. >>>>> >>>> >>>> >>>> >>>> -- >>>> Michael Gummelt >>>> Software Engineer >>>> Mesosphere >>>> >>> >>> >>> The information in this email is confidential and may be legally >>> privileged. It is intended solely for the addressee. Access to this email >>> by anyone else is unauthorized. If you are not the intended recipient, any >>> disclosure, copying, distribution or any action taken or omitted to be >>> taken in reliance on it, is prohibited and may be unlawful. >>> >> >> >> >> -- >> Michael Gummelt >> Software Engineer >> Mesosphere >> > > > The information in this email is confidential and may be legally > privileged. It is intended solely for the addressee. Access to this email > by anyone else is unauthorized. If you are not the intended recipient, any > disclosure, copying, distribution or any action taken or omitted to be > taken in reliance on it, is prohibited and may be unlawful. > -- Michael Gummelt Software Engineer Mesosphere