Оптимизация количества задач на ядро ​​в блоках данных Azure - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Azure Databricks для развертывания некоторого кода R, распараллеленного через нескольких рабочих, используя SparkR и gapplyCollect().


Обзор проекта

  • У меня есть 10000 + аналогичные источники данных , генерирующие много транзакционной информации для ежедневного анализа;
  • У меня есть R функция который анализирует всю информацию 1 источника данных за один раз , давая мне некоторые ценные сведения об этом конкретном источнике данных;
  • Итак, каждый день мне нужно выполнять мой Rфункция 10000+ раз для анализа всех моих данных.

Code Logic

  1. Считать все данные (из реляционной БД) как SparkDataframe
  2. groupBy() SparkDataframe на основе моего столбца источника данных (данные равномерно распределены по столбцу источника данных)
  3. Использование gapplyCollect() для результата GroupedDataпоследнего шага, для применения моей функции R на каждом разделе данных.
    • Результатом каждого выполнения является маленький R DataFrame с несколькими строками ( dim == (5,5) ).
    • Все результатыприсоединяется к gapplyCollect() выполнению, генерируя маленькое R DataFrame (<100k числовых строк) </em>, которое объединяет все результаты.
  4. Сохраняет результат на моем DBFS .

Моя проблема

В моей среде разработчиков я провожу некоторые эксперименты, распараллеливая анализ 250 источников данных, и использую4 маленьких рабочих для этого (тип виртуальной машины: Standard_F4s) .

gapplyCollect() отправляет мою функцию R рабочим, но ... Можно ли настроить максимальное количество активныхзадачи, которые должны быть выполнены на одного работника?По умолчанию я вижу, что Databricks разрешает 5 активных задач на одного работника.

Azure Databricks maximum tasks per worker

  • Например,: Как можно разрешить параллельно выполнять 8 задач на каждом работнике?Подходит ли spark-submit для этой задачи?

Я никогда не использовал spark-submit и не нашел хорошей документации для его использования на Azure Databricks.

  • Я приведу этот код в действие, используя ежедневное запланированное задание.Могу ли я использовать в работе, например, функцию spark-submit для изменения опции --executor-cores?

  • Если да, как я могу гарантировать, что я устанавливаю forecastБиблиотека CRAN во всех моих рабочих драйверах + работники, поскольку Блоки данных Azure не позволяют мне определять библиотеки в графическом интерфейсе при использовании spark-submit?

1 Ответ

0 голосов
/ 26 февраля 2019

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

Там я проверил показатели потребления ЦПдля каждого из моих работников.Вот результат для кластера 2x Worker :

Databricks workers CPU usage metrics

Вот тот же график, показывающий момент, когда задачи наконец-то закончились:

Databricks workers CPU usage metrics 2

На основе этих метрик мы можем видеть, что:

  • Среднее использование ЦП составляет 85 ~ 87%
  • Максимальное использование процессора составляет 92 ~ 96%
  • Минимальное использование процессора составляет 70 ~ 80%

Эти показатели подходят для моего варианта использования ... Но если кто-нибудьесть какие-либо подсказки о том, как использовать spark-submit с Databricks, пожалуйста, не стесняйтесь поделиться новым ответом здесь.

...