La spécification d'un fichier de configuration externe pour Apache Spark

Je tiens à préciser tout de Spark propriétés dans un fichier de configuration, et ensuite charger ce fichier de configuration au moment de l'exécution.

~~~~~~~~~~Modifier~~~~~~~~~~~

Il s'avère que j'ai été assez confus sur la façon de faire. Ignorer le reste de cette question. Pour voir une solution simple (en Java Étincelle) sur la façon de charger un .fichier de propriétés dans une étincelle de cluster, voir ma réponse ci-dessous.

original question ci-dessous à des fins de référence seulement.

~~~~~~~~~~~~~~~~~~~~~~~~

Je veux

  • Différents fichiers de configuration en fonction de l'environnement (locaux, aws)
  • J'aimerais préciser l'application des paramètres spécifiques

Comme un exemple simple, imaginons que j'aimerais filtre les lignes dans un fichier de log en fonction sur une chaîne de caractères. Ci-dessous, j'ai un Java simple Étincelle programme qui lit les données à partir d'un fichier et de filtres en fonction sur une chaîne définie par l'utilisateur. Le programme prend un argument, la source d'entrée de fichier.

Java Étincelle Code

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;

public class SimpleSpark {
    public static void main(String[] args) {
        String inputFile = args[0]; //Should be some file on your system

        SparkConf conf = new SparkConf();//.setAppName("Simple Application");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> logData = sc.textFile(inputFile).cache();

        final String filterString = conf.get("filterstr");

        long numberLines = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) {
                return s.contains(filterString);
            }
        }).count();

        System.out.println("Line count: " + numberLines);
    }
}

Fichier De Config

le fichier de configuration est basée sur https://spark.apache.org/docs/1.3.0/configuration.html et il ressemble:

spark.app.name          test_app
spark.executor.memory   2g
spark.master            local
simplespark.filterstr   a

Le Problème

Je exécuter l'application en utilisant les arguments suivants:

/path/to/inputtext.txt --conf /path/to/configfile.config

Toutefois, cela ne fonctionne pas, étant donné que l'exception

Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration

est lancée. Pour moi, c'est le fichier de configuration n'est pas chargé.

Mes questions sont:

  1. Quel est le problème avec ma configuration?
  2. Est la spécification de l'application des paramètres spécifiques à l'étincelle fichier de configuration de bonne pratique?

OriginalL'auteur Alexander | 2015-04-04