Как прочитать параметры spark-submit из файла при отправке задания spark?

#python #pyspark #apache-kafka

#python #pyspark #apache-kafka

Вопрос:

В настоящее время я пишу потоковое приложение spark, для которого требуется несколько зависимостей и конфигураций. Прямо сейчас я должен запустить свое задание spark со следующим кодом:

 spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.4.6,org.apache.spark:spark-streaming-kafka-0-8-assembly_2.11:2.4.6 --conf spark.mongodb.input.uri=mongodb://127.0.0.1/test.coll --conf spark.mongodb.output.uri=mongodb://127.0.0.1/test.coll mongodbtest.py
 

Это работает, но это довольно громоздкая команда для отправки, и я хотел бы разместить эти зависимости где-нибудь, где я могу просто запустить

 spark-submit mongodbtest.py
 

Я уже пробовал указывать PYSPARK_SUBMIT_ARGS в os.environ следующим образом:

 os.environ['PYSPARK_SUBMIT_ARGS'] = '--conf spark.mongodb.input.uri=mongodb://127.0.0.1/test.coll ' 
                                    '--conf spark.mongodb.output.uri=mongodb://127.0.0.1/test.coll' 
                                    '--packages org.apache.spark:spark-streaming-kafka-0-8:2.4.6'
 

Но запуск spark-submit mongodbtest.py с приведенной выше строкой, включенной в файл python, приводит к следующей ошибке:

 ________________________________________________________________________________________________
  Spark Streaming's Kafka libraries not found in class path. Try one of the following.

  1. Include the Kafka library and its dependencies with in the
     spark-submit command as

     $ bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8:2.4.6 ...

  2. Download the JAR of the artifact from Maven Central http://search.maven.org/,
     Group Id = org.apache.spark, Artifact Id = spark-streaming-kafka-0-8-assembly, Version = 2.4.6.
     Then, include the jar in the spark-submit command as

     $ bin/spark-submit --jars <spark-streaming-kafka-0-8-assembly.jar> ...

________________________________________________________________________________________________
 

и задание завершается с ошибкой. Куда я могу включить информацию о конфигурации и зависимостях, чтобы мне не приходилось включать всю эту информацию каждый раз, когда я отправляю задание spark в командной строке? Спасибо.

Комментарии:

1. Вы изучали Apache Livy ? Это лучший способ отправки приложений spark, где вы создаете файл json для всех реквизитов и отправляете задание по HTTP-запросу.

2. FWIW, если вы хотите использовать Kafka и Mongo, было бы разумнее использовать структурированную потоковую передачу или зависимость spark-sql-kafka

3. PYSPARK_SUBMIT_ARGS должно работать, но его необходимо загрузить перед созданием SparkSession