例如,如果执行器的数量为40,但任务的数量为80,则意味着每个执行器会并行运行两个任务。此外,我的函数(任务执行所用的函数)不是普通函数,而是在其中调用程序。因此,每个任务实际上需要几分钟才能完成。那么,我的问题是,Spark是如何管理这些任务的?这些任务会共享执行器的JVM吗?那么核心数呢,会被分配给这两个任务吗?如果我不想让这两个任务同时运行,而是以循环方式执行它们,即先使用所有执行器的核心来运行第一个任务,只有当其完成后才运行第二个任务,该怎么办?
这取决于你如何分配资源,例如核心数、每个执行器的核心数以及分配给执行器的内存。同时,这也取决于你如何编写程序以实现最大并行性。
此外,这还取决于你如何编码以实现最大并行性。如果有两个任务且它们彼此独立,则它们将并行运行。如果一个任务依赖于先前任务的结果,则它们将串行执行。
是的,可以通过创建两个执行器并将可用的核心分配给它来将核心数分成两个任务。
要按循环方式执行任务,需要定义分区方案并根据其分配资源。这将确保每个任务在其他任务之后执行。