2015-07-29 37 views
15

Sto utilizzando Typesafe Config, https://github.com/typesafehub/config, per parametrizzare un lavoro Spark in esecuzione in modalità filato-cluster con un file di configurazione. Il comportamento predefinito di Typesafe Config consiste nel cercare nel classpath le risorse con nomi corrispondenti a un'espressione regolare e caricarle automaticamente nella classe di configurazione con ConfigFactory.load() (per i nostri scopi, supponiamo che il file cercato sia chiamato application.conf).Come aggiungere il file di configurazione al classpath di tutti gli esecutori Spark in Spark 1.2.0?

Sono in grado di caricare il file di configurazione nel driver utilizzando --driver-class-path <directory containing configuration file>, ma l'utilizzo di --conf spark.executor.extraClassPath=<directory containing configuration file> non inserisce la risorsa nel classpath di tutti gli esecutori come dovrebbe. Gli esecutori riferiscono che non riescono a trovare una determinata impostazione di configurazione per una chiave che esiste nel file di configurazione che sto tentando di aggiungere ai loro classpath.

Qual è il modo corretto di aggiungere un file ai percorsi classe di tutte le JVM di executor utilizzando Spark?

risposta

15

Sembra che il valore della proprietà spark.executor.extraClassPath sia relativo alla directory di lavoro dell'applicazione ON THE EXECUTOR.

Quindi, per usare correttamente questa proprietà, si dovrebbe usare --files <configuration file> per dirigere Spark prima di copiare il file nella directory di lavoro di tutti gli esecutori, quindi usare spark.executor.extraClassPath=./ per aggiungere la directory di lavoro dell'esecutore al suo classpath. Questa combinazione consente all'executor di leggere i valori dal file di configurazione.

+0

Nel caso in cui si sta facendo questo tramite codice, ecco la snippet- val conf = new SparkConf(). Set ("spark.files", "test.conf ") . Set (" spark.executor.extraClassPath "," ./ ") dove test.conf viene inserito nella cartella in cui eseguo il jar –

3

Io uso il metodo SparkContext addfile

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 
}