1
votes

Aucune configuration trouvée pour la clé lors de la lecture du fichier de configuration dans spark / Scala

Bonjour, j'essaie de lire la configuration de mon fichier de configuration dans spark / scala .

J'ai écrit le code ci-dessous.

Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'parameters' Note:-I'm genetarting Jar using Maven and using HDP 3.X

Voici mon fichier application.conf ( src / main / resources / application.conf )

spark-submit \
> --conf "spark.executor.extraClassPath=-Dconfig.file=application.conf"\
> --verbose \
> --class classjarname \
> project_jar
> /path/config-1.2.0.jar \
> /path/application.conf

et en utilisant la commande Spark-submit ci-dessous:

parameters {
  spark-hive {
  url = """jdbc://xxxxxxxxxxxx""",
  dbname =   """bdname"""
  }
}

mais en obtenant l'erreur ci-dessous.

val conf = com.typesafe.config.ConfigFactory.load(args(0))
var url=conf.getString("parameters.spark-hive.url")
var db=conf.getString("parameters.spark-hive.dbname")
val sparksession = SparkSession.builder()
  .appName("myapp")
  .config("spark.sql.hive.hiveserver2.jdbc.url",url)
  .enableHiveSupport()
  .getOrCreate()


1 commentaires

Exception dans le thread "main" com.typesafe.config.ConfigException $ Missing: Aucun paramètre de configuration trouvé pour les paramètres de la clé indique qu'il ne peut pas charger les paramètres de la clé. C'est l'entrée de votre fichier de configuration qui pointe vers votre fichier de configuration qui n'est pas correctement chargé ou n'est pas analysé correctement. Je suggérerais donc de lire le fichier, puis d'essayer avec l'étape suivante, c'est-à-dire en utilisant ces paramètres pour créer la Sparksession.


3 Réponses :


1
votes

Vous pouvez imprimer la valeur réelle de args (0) pour voir où se réfère le chemin (complet). Cela a fonctionné pour moi:

com.typesafe.config.ConfigFactory.parseFile(new java.io.File(args(0)))

Remarque supplémentaire:

  • Je ne sais pas ce que signifie project_jar dans votre commande d'envoi
  • il semble y avoir une faute de frappe avec hive-url car le code lors de la création de SparkSession ne correspond pas à votre configuration.


4 commentaires

project_jar -> Jar File (code Jar (généré à partir de maven Eclipse). hive-url: -Oui C'était une faute de frappe J'ai mis à jour ceci


quel est alors le /path/config-1.2.0.jar ?


J'ai ajouté ce jar en utilisant pom.xml dans eclipse mais cela donnait toujours une erreur, alors j'ai placé cet emplacement quelque part `` MyHDFS '' et en donnant ce chemin.J'ai tout mon fichier jar et application.conf dans le même dossier à HDFS


'/path/config-1.2.0.jar' ce Jar est pour "com.typesafe.config".



0
votes

Exception dans le thread "main" com.typesafe.config.ConfigException $ Missing: Aucun paramètre de configuration trouvé pour les paramètres de la clé indique qu'il ne peut pas charger les paramètres de la clé. C'est l'entrée de votre fichier de configuration qui pointe vers votre fichier de configuration qui n'est pas correctement chargé ou n'est pas analysé correctement. Je suggérerais donc de lire le fichier, puis d'essayer avec l'étape suivante, c'est-à-dire en utilisant ces paramètres pour créer la Sparksession. Essayez ci-dessous de lire le contenu du fichier s'il est chargé correctement

import scala.io.Source
import com.typesafe.config.ConfigFactory

val filename = ConfigFactory.load(args(0))
for (line <- Source.fromFile(filename).getLines) {
println(line)
}


0 commentaires

0
votes

Je veux vous montrer un exemple simple d'utilisation de la bibliothèque com.typesafe.config .

Voici mon application.properties dans le répertoire des ressources.

  def main(args: Array[String]): Unit = {
    val conf = ConfigFactory.load // get Confs
    val envProps: Config = conf.getConfig(args(0)) // args(0) == device
    val sparkConf = new SparkConf().setMaster(envProps.getString("execution.mode")).setAppName("Device Signal") // get execution.mode conf
    val streamingContext = new StreamingContext(sparkConf, Seconds(envProps.getInt("window"))) // get window conf
    streamingContext.sparkContext.setLogLevel("ERROR")
    val broadcastConfig = streamingContext.sparkContext.broadcast(envProps)
    val topicsSet = Set(envProps.getString("topic")) // get topic conf
    val kafkaParams = Map[String, Object](
      "bootstrap.servers" -> envProps.getString("bootstrap.server"), // get bootstrap.server conf
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      "group.id" -> "1",
      "auto.offset.reset" -> "latest",
      "enable.auto.commit" -> (false: java.lang.Boolean)
    )
    val logData: DStream[String] = KafkaUtils.createDirectStream[String, String](
      streamingContext,
      PreferConsistent,
      Subscribe[String, String](topicsSet, kafkaParams)
    ).map(record =>{
      record.value
    })

 répertoire de structure de dossier

et voici le code pour obtenir les propriétés, args (0) == appareil

## Structured Streaming device
device.zookeeper = quickstart.cloudera:2181
device.bootstrap.server = quickstart.cloudera:9092
device.topic = device



device.execution.mode = local

device.data.host = quickstart.cloudera

device.data.port = 44444

## HBase

device.zookeeper.quorum = quickstart.cloudera
device.zookeeper.port = 2181
device.window = 1


0 commentaires