#python #apache-spark #configuration #pyspark #dynamic-allocation
#python #apache-spark #конфигурация #pyspark #динамическое распределение
Вопрос:
Я запускаю скрипт python в pyspark и получил следующую ошибку: NameError: имя ‘spark’ не определено
Я просмотрел его и обнаружил, что причина в том, что spark.dynamicAllocation.enabled
пока не разрешено.
Согласно документации Spark ( https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-dynamic-allocation.html#spark_dynamicAllocation_enabled ): spark.dynamicAllocation.enabled
(по умолчанию: false
) определяет, включено динамическое распределение или нет. Предполагается, что spark.executor.instances
не задано или равно 0 (что является значением по умолчанию).
Поскольку значение по умолчанию равно false
, мне нужно изменить настройку Spark на enable spark.dynamicAllocation.enabled
.
Я установил Spark с помощью brew и не менял его конфигурацию / настройки.
Как я могу изменить настройку и включить spark.dynamicAllocation.enabled
?
Большое спасибо.
Комментарии:
1. Приведенная выше ссылка не является официальной документацией spark. Это книга по освоению Apache Spark Джека, который также является пользователем SO. пожалуйста, измените его соответствующим образом 🙂
Ответ №1:
Вопрос: Как я могу изменить настройку и включить spark.dynamicAllocation.enabled?
Есть 3 варианта, с помощью которых вы можете достичь этого.
1) измените параметры, упомянутые ниже в spark-defaults.conf
2) отправка приведенных ниже параметров из —conf с вашего spark-submit
3) Программно указать конфигурацию динамического распределения, как показано ниже.
исходя из того, что программно вы можете сделать таким образом, вы можете сделать это программным способом, подобным этому.
val conf = new SparkConf()
.setMaster("ClusterManager")
.setAppName("test-executor-allocation-manager")
.set("spark.dynamicAllocation.enabled", "true")
.set("spark.dynamicAllocation.minExecutors", 1)
.set("spark.dynamicAllocation.maxExecutors", 2)
.set("spark.shuffle.service.enabled", "true") // for stand alone
Комментарии:
1. Большое спасибо! Должен ли я включить скрипт, который вы предоставили здесь, в pyspark, который я пишу? Или это часть файла configuration .sh, который я должен изменить?
2. вы должны включить это в свой программный файл python, более того, выше приведен синтаксис scala
3. Большое спасибо. Я пишу скрипт на Python для отправки в pyspark. Позвольте мне попробовать изменить то, что вы предлагаете здесь, и посмотреть, работает ли это.
Ответ №2:
Есть несколько мест, где вы можете это установить. Если вы хотите включить его для каждого задания, установите следующее в каждом приложении:
conf.set("spark.dynamicAllocation.enabled","true")
Если вы хотите установить if для всех заданий, перейдите к файлу spark.conf. В дистрибутиве Hortonworks это должно быть
/usr/hdp/current/spark-client/conf/
Добавьте настройку в свой spark-defaults.conf, и все должно быть готово.
Комментарии:
1. Большое спасибо! Я хотел бы включить его для каждого задания. conf.set(«spark.dynamicAllocation.enabled»,»true») — это командная строка, которую я должен ввести в терминале? В какой каталог мне следует перейти, прежде чем вводить эту командную строку? Большое спасибо!
2. Если вы запускаетесь из командной строки с помощью spark-shell, запустите оболочку с помощью команды: spark-shell —conf spark.dynamicAllocation.enabled=true При запуске оболочки в com Не имеет значения, в каком каталоге вы находитесь, если вы пишете приложение, установите его внутри приложения после создания конфигурации spark с помощью conf.set().
3. большое спасибо. Я вижу. Если я пишу скрипт на Python и пытаюсь запустить его с помощью spark-submit в командной строке (не внутри оболочки pyspark), я просто включу эту строку кода в свой скрипт на Python, правильно?
Ответ №3:
Эта проблема затрагивает установки Spark, выполненные также с использованием других ресурсов, таких как скрипт spark-ec2 для установки в Amazon Web Services. Из документации Spark необходимо установить два значения в SPARK_HOME/conf/spark-defaults.conf :
spark.shuffle.service.enabled true
spark.dynamicAllocation.enabled true
смотрите это: https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation
Если ваша установка имеет spark-env.sh скрипт в SPARK_HOME/conf убедитесь, что в нем нет таких строк, как следующие, или что они закомментированы:
export SPARK_WORKER_INSTANCES=1 #or some other integer, or
export SPARK_EXECUTOR_INSTANCES=1 #or some me other integer
Ответ №4:
Параметры конфигурации могут быть установлены в pyspark через notebook с помощью следующей аналогичной команды:
spark.conf.set("spark.sql.crossJoin.enabled", "true")
Ответ №5:
В дополнение к предыдущим ответам, все упомянутые конфигурации могут не работать из-за настроек интерпретатора (если вы используете Zeppelin). Я использую Livy, и его настройки по умолчанию переопределяют параметры dynamicAllocation.
Комментарии:
1. Это может быть комментарий, а не ответ.