web-dev-qa-db-fra.com

Comment ajouter un fichier de configuration au chemin de classe de tous les exécuteurs Spark dans Spark 1.2.0?

J'utilise Typesafe Config, https://github.com/typesafehub/config , pour paramétrer un travail Spark exécuté en mode cluster de fils avec un fichier de configuration . Le comportement par défaut de Typesafe Config est de rechercher dans le chemin de classe des ressources avec des noms correspondant à une expression régulière et de les charger automatiquement dans votre classe de configuration avec ConfigFactory.load() (dans notre cas, supposons que le fichier qu'il recherche s'appelle application.conf).

Je peux charger le fichier de configuration dans le pilote en utilisant --driver-class-path <directory containing configuration file>, mais en utilisant --conf spark.executor.extraClassPath=<directory containing configuration file> ne place pas la ressource sur le chemin de classe de tous les exécuteurs comme elle le devrait. Les exécuteurs indiquent qu'ils ne peuvent pas trouver un certain paramètre de configuration pour une clé qui existe dans le fichier de configuration que j'essaie d'ajouter à leurs chemins de classe.

Quelle est la bonne façon d'ajouter un fichier aux chemins de classe de toutes les JVM exécuteurs utilisant Spark?

19
MawrCoffeePls

Il semble que la valeur de la propriété spark.executor.extraClassPath Soit relative au répertoire de travail de l'application SUR L'EXÉCUTEUR.

Donc, pour utiliser cette propriété correctement, il faut utiliser --files <configuration file> Pour diriger d'abord Spark pour copier le fichier dans le répertoire de travail de tous les exécuteurs, puis utiliser spark.executor.extraClassPath=./ pour ajouter le répertoire de travail de l'exécuteur à son chemin de classe. Cette combinaison permet à l'exécuteur de lire les valeurs du fichier de configuration.

20
MawrCoffeePls

J'utilise la méthode addFile SparkContext

val sc: SparkContext = {
  val sparkConf = new SparkConf()
    .set("spark.storage.memoryFraction", "0.3")
    .set("spark.driver.maxResultSize", "10g")
    .set("spark.default.parallelism", "1024")
    .setAppName("myproject")
  sparkConf.setMaster(getMaster)
  val sc = new SparkContext(sparkConf)
  sc.addFile("application.conf")
  sc
}
3
santifinland