2016-08-26 7 views
3

L'architecture Spark est entièrement basée sur le concept des exécuteurs et des coeurs. Je voudrais voir pratiquement combien d'exécuteurs et de cœurs s'exécutent pour mon application spark dans un cluster.Spark - Combien d'exécuteurs et de noyaux sont alloués à mon étincelle?

J'essayais d'utiliser l'extrait ci-dessous dans mon application, mais pas de chance.

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

Est-il possible d'obtenir ces valeurs à l'aide SparkContext Objet ou SparkConf objet etc ..

+1

dans l'interface utilisateur Spark. Aller à http: // : 4040 et appuyez sur l'onglet "Executors". Cela varie entre les gestionnaires de cluster. –

+1

Krishna, avez-vous pu obtenir? ne hésitez pas à poser des questions –

+0

Avez-vous pu tester? –

Répondre

7

Scala (voie de Programmatic):

getExecutorStorageStatus et getExecutorMemoryStatus tous les deux renvoient le nombre d'exécuteurs avec chauffeur. comme ci-dessous exemple d'extrait.

/** 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) 

obtenir la même façon toutes les propriétés et imprimer comme ci-dessous, vous pouvez obtenir de l'information sur les noyaux ainsi ..

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

OU

sc.getConf.toDebugString 

La plupart du temps spark.executor.cores pour exécuteurs spark.driver.cores pilote doit avoir cette valeur.

Python:

Above methods getExecutorStorageStatus and getExecutorMemoryStatus, In python api were not implemented

EDIT Mais sont accessibles en utilisant les liaisons Py4J exposées de SparkSession.

sc._jsc.sc().getExecutorMemoryStatus()

-1

Ce python est Exemple pour obtenir le nombre de cœurs (y compris la maîtrise) Vous pouvez regarder def workername(): import socket return str(socket.gethostname()) anrdd=sc.parallelize(['','']) namesRDD = anrdd.flatMap(lambda e: (1,workername())) namesRDD.count()