spark-为我的spark作业分配了多少执行器和内核

fkaflof6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(452)

spark架构完全围绕着执行器和核心的概念。我想看看实际上有多少执行器和核心在集群中运行我的spark应用程序。
我试图在我的应用程序中使用下面的代码片段,但没有成功。

val conf = new SparkConf().setAppName("ExecutorTestJob")
val sc = new SparkContext(conf)
conf.get("spark.executor.instances")
conf.get("spark.executor.cores")

有没有什么方法可以用 SparkContext 对象或 SparkConf 对象等。。

omtl5h9j

omtl5h9j1#

这是一个python示例,用于获取内核数(包括主内核数) def workername(): import socket return str(socket.gethostname()) anrdd=sc.parallelize(['','']) namesRDD = anrdd.flatMap(lambda e: (1,workername())) namesRDD.count()

cdmah0mi

cdmah0mi2#

scala(编程方式): getExecutorStorageStatus 以及 getExecutorMemoryStatus 两者都返回包括驱动程序在内的执行者的数量。如下面的示例片段。

/**Method that just returns the current active/registered executors
        * excluding the driver.
        * @param sc The spark context to retrieve registered executors.
        * @return a list of executors each in the form of host:port.
        */
       def currentActiveExecutors(sc: SparkContext): Seq[String] = {
         val allExecutors = sc.getExecutorMemoryStatus.map(_._1)
         val driverHost: String = sc.getConf.get("spark.driver.host")
         allExecutors.filter(! _.split(":")(0).equals(driverHost)).toList
       }

sc.getConf.getInt("spark.executor.instances", 1)

同样地,获取所有属性并按以下方式打印,您也可以获取核心信息。。

sc.getConf.getAll.mkString("\n")

sc.getConf.toDebugString

大部分 spark.executor.cores 遗嘱执行人 spark.driver.cores 驱动程序应具有此值。

Python:

pythonapi中的上述方法getexecutorstoragestatus和getexecutormemorystatus没有实现
但是可以使用从sparksession公开的py4j绑定进行访问。 sc._jsc.sc().getExecutorMemoryStatus()

b4lqfgs4

b4lqfgs43#

这是一个老问题,但这是我在spark 2.3.0上解决这个问题的代码:

+ 414     executor_count = len(spark.sparkContext._jsc.sc().statusTracker().getExecutorInfos()) - 1
+ 415     cores_per_executor = int(spark.sparkContext.getConf().get('spark.executor.cores','1'))

相关问题