假设您具有带有Standalone Manager的Spark集群,通过SparkSession在客户端应用程序中创建作业来调度作业。客户端应用程序在JVM上运行。为了提高性能,您必须使用不同的配置启动每个作业,请参见下面的“ 作业类型”示例 。
SparkSession
问题是您不能从单个JVM创建两个会话。
那么,您如何同时使用不同的会话配置启动多个Spark作业?
通过不同的会话配置,我的意思是:
spark.executor.cores
spark.executor.memory
spark.kryoserializer.buffer.max
spark.scheduler.pool
解决问题的可能方法:
Spark独立服务器为应用程序使用简单的FIFO调度程序。默认情况下,每个应用程序都使用群集中的所有可用节点。每个应用程序,每个用户或全局可以限制节点数。其他资源,例如内存,cpus等,可以通过应用程序的SparkConf对象进行控制。
Apache Mesos具有主进程和从属进程。主服务器向应用程序提供资源(在Apache Mesos中称为框架),该资源可以接受也可以不接受。因此,要求可用资源和正在运行的作业由应用程序本身确定。Apache Mesos允许对系统中的资源(例如cpus,内存,磁盘和端口)进行细粒度的控制。Apache Mesos还提供了资源的过程控制控制,Spark会为每个执行器预先分配固定数量的CPU,直到应用程序退出时才释放这些CPU。请注意,在同一群集中,可以将某些应用程序设置为使用细粒度控制,而将其他应用程序设置为使用过程细粒度控制。
Apache Hadoop YARN的ResourceManager由两部分组成:调度程序和ApplicationsManager。调度程序是可插入的组件。提供了两种实现方式:CapacityScheduler(在一个以上的组织共享的集群中有用)和FairScheduler(确保所有应用程序平均获得相等数量的资源)。两个调度程序都将应用程序分配给一个队列,每个队列都获得在它们之间平均共享的资源。在队列中,资源在应用程序之间共享。ApplicationsManager负责接受作业提交并启动特定于应用程序的ApplicationsMaster。在这种情况下,ApplicationsMaster是Spark应用程序。在Spark应用程序中,资源是在应用程序的SparkConf对象中指定的。
对于您的情况,仅使用独立的情况是不可能的,可能会有一些前提解决方案,但我没有面对