web-dev-qa-db-fra.com

Personnaliser SparkContext à l'aide de sparkConf.set (..) lors de l'utilisation de spark-shell

Dans Spark, il existe 3 façons principales de spécifier les options pour le SparkConf utilisé pour créer le SparkContext:

  1. Comme propriétés dans le conf/spark-defaults.conf
    • par exemple, la ligne: spark.driver.memory 4g
  2. Comme arguments pour spark-Shell ou spark-submit
    • par exemple, spark-Shell --driver-memory 4g ...
  3. Dans votre code source, configuration d'une instance SparkConf avant de l'utiliser pour créer le SparkContext:
    • par exemple, sparkConf.set( "spark.driver.memory", "4g" )

Cependant, lorsque vous utilisez spark-Shell, Le SparkContext est déjà créé pour vous au moment où vous obtenez une invite du shell, dans la variable nommée sc. Lorsque vous utilisez spark-Shell, comment utilisez-vous l'option # 3 dans la liste ci-dessus pour définir les options de configuration, si le SparkContext est déjà créé avant d'avoir la possibilité d'exécuter des instructions Scala?

En particulier, j'essaie d'utiliser la sérialisation Kyro et GraphX. La manière prescrite d'utiliser Kryo avec GraphX ​​est d'exécuter l'instruction Scala lors de la personnalisation de l'instance SparkConf:

GraphXUtils.registerKryoClasses( sparkConf )

Comment puis-je accomplir cela en exécutant spark-Shell?

16
rake

Spark 2.0 +

Vous devriez pouvoir utiliser SparkSession.conf.set méthode pour définir certains option de configuration à l'exécution mais elle est principalement limitée à la configuration SQL.

Spark <2.0

Vous pouvez simplement arrêter un contexte existant et en créer un nouveau:

import org.Apache.spark.{SparkContext, SparkConf}

sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)

Comme vous pouvez le lire dans la documentation officielle :

une fois qu'un objet SparkConf est passé à Spark, il est cloné et ne peut plus être modifié par l'utilisateur. Spark ne prend pas en charge la modification de la configuration lors de l'exécution.

Donc, comme vous pouvez le voir, arrêter le contexte est la seule option applicable une fois que Shell a été démarré.

Vous pouvez toujours utiliser des fichiers de configuration ou --conf argument à spark-Shell pour définir les paramètres requis qui seront utilisés comme contexte par défaut. Dans le cas de Kryo, vous devriez jeter un œil à:

  • spark.kryo.classesToRegister
  • spark.kryo.registrator

Voir Compression et sérialisation dans Configuration Spark .

40
zero323