apache-spark classpath yarn typesafe-config

apache spark - ¿Cómo agregar el archivo de configuración a la ruta de clase de todos los ejecutores de Spark en Spark 1.2.0?



apache-spark classpath (2)

Parece que el valor de la propiedad spark.executor.extraClassPath es relativo al directorio de trabajo de la aplicación ON THE EXECUTOR.

Entonces, para usar esta propiedad correctamente, uno debe usar - --files <configuration file> primero para que Spark copie el archivo al directorio de trabajo de todos los ejecutores, luego use spark.executor.extraClassPath=./ Para agregar el directorio de trabajo del ejecutor a su classpath. Esta combinación hace que el ejecutor pueda leer los valores del archivo de configuración.

Estoy utilizando la configuración de Typesafe, https://github.com/typesafehub/config , para parametrizar un trabajo de Spark que se ejecuta en modo de agrupación de hilos con un archivo de configuración. El comportamiento predeterminado de Typesafe Config es buscar en la ruta de clase los recursos con nombres que coincidan con una expresión regular y cargarlos en su clase de configuración automáticamente con ConfigFactory.load() (para nuestros propósitos, supongamos que el archivo que busca se llama application.conf ) .

Puedo cargar el archivo de configuración en el controlador usando --driver-class-path <directory containing configuration file> , pero al usar --conf spark.executor.extraClassPath=<directory containing configuration file> no pone el recurso en el Classpath de todos los ejecutores como debería. Los ejecutores informan que no pueden encontrar una configuración determinada para una clave que existe en el archivo de configuración que estoy intentando agregar a sus classpaths.

¿Cuál es la forma correcta de agregar un archivo a las rutas de clase de todas las JVM ejecutoras utilizando Spark?


Utilizo el método addFile de 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 }