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:
- Quel est le problème avec ma configuration?
- 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
Vous devez vous connecter pour publier un commentaire.
Donc après un peu de temps, j'ai réalisé que j'étais assez confus. La façon la plus simple pour obtenir un fichier de configuration dans la mémoire est d'utiliser un fichier de propriétés, à le mettre dans hdfs et de le charger à partir de là. Pour mémoire, voici le code pour le faire (en Java, Étincelle):
êtes-vous de placer le fichier dans hdfs? Êtes-vous à l'aide d'aws?
Oui j'ai mis le fichier dans hdfs. Oui, je suis en utilisant aws DME
L'obtention des deux exceptions au fil des journaux :
java.io.FileNotFoundException: /etc/spark/conf/log4j.properties (No such file or directory)
etjava.io.FileNotFoundException: hdfs:/user/hadoop/test.properties (No such file or directory)
Alexandre, je crois que @Poojaa Karaande la réponse ci-dessous est plus idéal car il ne nécessite pas de chargement de la configuration dans HDFS et est pris en charge nativement par Étincelle.
OriginalL'auteur Alexander
essayer cette
alors accès à
scala
programmekafka.broker.url=someIp:9092
qui serait important pour le développeur, sera ignoré lors de l'étincelle met en place le contexte.OriginalL'auteur Poojaa Karaande
--conf
définit uniquement une seule Étincelle de la propriété, ce n'est pas pour la lecture de fichiers.Par exemple
--conf spark.shuffle.spill=false
.spark-defaults
doit contenir SparkConf les propriétés qui s'appliquent à la plupart ou tous les emplois. Si vous souhaitez utiliser un fichier de config à la place des paramètres de l'application, prendre un coup d'oeil à la Typesafe Config. Il prend également en charge les variables d'environnement.OriginalL'auteur Marius Soutier
FWIW, à l'aide de la Typesafe Config de la bibliothèque, j'ai juste vérifié que ce travail en ScalaTest:
OriginalL'auteur Objektwerks