Автономные настройки Apache Spark - PullRequest
0 голосов
/ 27 января 2019

У меня установлена ​​отдельная свеча Apache.Я хочу, чтобы 3 рабочих работали параллельно: я использую приведенные ниже команды.

./start-master.sh 
SPARK_WORKER_INSTANCES=3 SPARK_WORKER_CORES=2 ./start-slaves.sh

Я попытался выполнить несколько заданий, и ниже приведены результаты пользовательского интерфейса apache:

enter image description here

Игнорировать последние три приложения, которые потерпели неудачу: Ниже приведены мои вопросы:

  1. Почему в пользовательском интерфейсе отображается только один рабочий, несмотря на запрос на запуск spark3 каждый с 2 ​​ядрами?
  2. Я хочу разбить входной СДР для лучшей производительности.Так что для первых двух работ без разделов у меня было время 2,7 минуты.Здесь мой исходный код Scala имел следующее.

    val tweets = sc.textFile("/Users/soft/Downloads/tweets").map(parseTweet).persist()

На моей третьей работе (4,3 мин) у меня было следующее:

  val tweets = sc.textFile("/Users/soft/Downloads/tweets",8).map(parseTweet).persist()

Я ожидал более короткое время с болееперегородки (8).Почему это было противоположностью того, что ожидалось?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Если вы работаете на локальной машине, вполне нормально просто запустить одного работника с несколькими процессорами, как показано в выводе.Он по-прежнему разделит вашу задачу о доступных процессорах в машине.

Разделение вашего файла произойдет автоматически в зависимости от количества доступных ресурсов, в большинстве случаев это работает довольно хорошо.Spark (и разбиение файлов) идет с некоторыми накладными расходами, поэтому часто, особенно на одной машине, Spark добавляет столько накладных расходов, что замедляет процесс.Добавленные значения поставляются с большими объемами данных в кластере машин.

Предполагая, что вы запускаете автономный кластер, я бы предложил использовать файлы конфигурации для настройки кластера и использовать start-all.sh длязапустите кластер.

  1. сначала в вашем spark/conf/slaves (скопировано с spark/conf/slaves.template добавьте IP-адреса (или имена серверов) ваших рабочих узлов.
  2. настройте spark/conf/spark-defaults.conf (скопировано с spark/conf/spark-defaults.conf.template Установите хотя бы главный узел на сервер, на котором работает ваш мастер.
  3. Используйте spark-env.sh (скопировано с spark-env.sh.template) для настройки ядер на одного работника, памяти и т. д .:
export SPARK_WORKER_CORES="2"
export SPARK_WORKER_MEMORY="6g"
export SPARK_DRIVER_MEMORY="4g"
export SPARK_REPL_MEM="4g"
Поскольку он является автономным (и не размещен в среде Hadoop), вам необходимо предоставить (или скопировать) конфигурацию (или, скорее, полный каталог spark) всем узлам в вашем кластере.Кроме того, данные, которые вы обрабатываете, должны быть доступны на всех узлах, например, напрямую из корзины или общего диска.

Как подсказывает @skjagini проверка различных файлов журнала в spark/logs/, чтобы увидеть, чтопродолжается.Каждый узел будет записывать свои собственные файлы журнала.

См. https://spark.apache.org/docs/latest/spark-standalone.html для всех опций.

( У нас есть такая установка, работающая в течение нескольких лет, и она прекрасно работает! )

0 голосов
/ 28 января 2019
  1. Очевидно, у вас есть только один активный работник, который вам нужно выяснить, почему другие работники не сообщаются, проверяя журналы искр.

  2. Больше разделов не всегда означает, что приложение работает быстрее, вам нужно проверить, как вы создаете разделы из исходных данных, количество разделений данных и объем данныхтасование и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...