2017-01-13 8 views
1

У меня есть работа разделена на две части:Spark - изменение параллелизм при выполнении

  • Первая часть извлекает данные из HBase с использованием искровых
  • seoncd часть вычисляет тяжелые ресурсоемкие алгоритмы ML

Проблема заключается в том, что с большим количеством исполнителей/ядер кластер HBase слишком агрессивно запрашивается, и это может привести к нестабильности производства. С слишком небольшим количеством исполнителей/ядер вычислений ML требуется много времени.

Поскольку количество экземпляров и ядер установлено при запуске, я хотел бы знать, есть ли способ уменьшить число исполнителей для первой части задания.

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

Спасибо за вашу помощь

ответ

0

Я думаю dynamic allocation является то, что вы ищете. Это то, что вы можете использовать с искровым потоком.

Я думаю, вам, возможно, придется немного поработать с вашим размером RDD, чтобы сбалансировать прием данных и обработку данных, но в зависимости от вашего реального использования, это может быть действительно сложной задачей.

+0

Благодарим за помощь. Что вы имеете в виду: «немного поиграйте со своим размером RDD». Разделяет ли данные данные на 10 RDD, а затем объединяет их? – ogen

+0

Я считаю, что вы переделываете свой RDD на каждом этапе и, самое главное, самый ранний для своего дела, если мое понимание правильное (вы хотите уменьшить количество разделов и замедлить свое приложение по назначению). На этапах вам нужно больше исполнителей, и вы хотели бы иметь больше переделок исполнителей с большим количеством разделов, и динамическое распределение может сделать все остальное. Используйте свое объяснение(), чтобы он всегда вел себя так, как вы хотите, на каждом шаге. –