假设您有一个带有独立管理器的Spark集群,其中通过在客户端应用程序中创建的SparkSession
来安排作业。客户端应用程序在JVM上运行。为了提高性能,您必须使用不同的配置启动每个作业,请参阅下面的作业类型示例。
问题是you can't create two sessions from single JVM。
那么你将如何同时启动具有不同会话配置的多个Spark作业?
通过不同的会话配置,我的意思是:
spark.executor.cores
spark.executor.memory
spark.kryoserializer.buffer.max
spark.scheduler.pool
解决问题的可能方法:
SparkSession
中为每个Spark作业设置不同的会话配置。可能吗?SparkSession
,我称之为Spark会话服务。但是你永远不会知道你将来会同时推出多少具有不同配置的工作。目前 - 我一次只需要2-3种不同的配置。这可能足够但不灵活。Spark standalone为应用程序使用简单的FIFO调度程序。默认情况下,每个应用程序都使用群集中的所有可用节点。每个应用程序,每个用户或全局可以限制节点数量。其他资源,如内存,cpus等,可以通过应用程序的SparkConf对象进行控制。
Apache Mesos有一个主从流程。主服务器为应用程序提供资源(在Apache Mesos中称为框架),它接受或不接受。因此,声明可用资源和运行作业由应用程序本身决定。 Apache Mesos允许对系统中的资源进行细粒度控制,例如cpu,内存,磁盘和端口。 Apache Mesos还提供资源的课程粒度控制控制,其中Spark预先为每个执行程序分配固定数量的CPU,这些CPU在应用程序退出之前不会被释放。请注意,在同一群集中,某些应用程序可以设置为使用细粒度控制,而其他应用程序则设置为使用过程粒度控制。
Apache Hadoop YARN有一个ResourceManager,它有两个部分,一个Scheduler和一个ApplicationsManager。 Scheduler是一个可插拔组件。提供了两个实现,一个在多个组织共享的集群中有用的CapacityScheduler,以及FairScheduler,它确保所有应用程序平均获得相同数量的资源。两个调度程序都将应用程序分配给队列,每个队列获取在它们之间平均共享的资源。在队列中,资源在应用程序之间共享。 ApplicationsManager负责接受作业提交并启动特定于应用程序的ApplicationsMaster。在这种情况下,ApplicationsMaster是Spark应用程序。在Spark应用程序中,资源在应用程序的SparkConf对象中指定。
对于你的情况只是单独使用,可能有一些前提解决方案,但我没有面对