Що таке робітники, виконавці, сердечники в кластері Spark Standalone?


219

Я читаю Огляд режиму кластерів, і досі не можу зрозуміти різні процеси в іскровому автономному кластері та паралелізм.

Чи працівник процес СВМ чи ні? Я побіг bin\start-slave.shта виявив, що це породило працівника, який насправді є СП.

Відповідно до вищезазначеного посилання, виконавець - це процес, запущений для програми на робочому вузлі, який виконує завдання. Виконавцем є також СП.

Це мої запитання:

  1. Виконавці - за заявою. Тоді яка роль працівника? Чи координується це з виконавцем та повідомляє результат водієві? Або водій безпосередньо розмовляє з виконавцем? Якщо так, то яка мета працівника тоді?

  2. Як контролювати кількість виконавців заявки?

  3. Чи можна зробити так, щоб завдання виконувались паралельно всередині виконавця? Якщо так, то як налаштувати кількість потоків для виконавця?

  4. Яке відношення між працівником, виконавцем та виконавчими сердечниками (--тотальні-виконавці-сердечники)?

  5. Що означає мати більше працівників на вузол?

Оновлено

Візьмемо приклади, щоб краще зрозуміти.

Приклад 1: Окремий кластер із 5 робочими вузлами (кожен вузол має 8 ядер) Коли я запускаю програму із налаштуваннями за замовчуванням.

Приклад 2 Конфігурація кластера, як у прикладі 1, але я запускаю програму з такими налаштуваннями --executor-ядра 10 --total-executor-core 10.

Приклад 3 Конфігурація кластера та ж, що і в прикладі 1, але я запускаю програму з такими налаштуваннями --executor-ядра 10 --total-executor-core 50.

Приклад 4 Конфігурація кластера, що є прикладом 1, але я запускаю програму з такими налаштуваннями --executor-cores 50 --total-executor-core 50.

Приклад 5 Конфігурація цього ж кластера, як приклад 1, але я запускаю програму з такими налаштуваннями --executor-cores 50 --total-executor-core 10.

У кожному з цих прикладів, скільки виконавців? Скільки ниток на виконавця? Скільки ядер? Як визначається кількість виконавців за заявою? Чи завжди це однаково, як кількість працівників?

Відповіді:


274

введіть тут опис зображення

Spark використовує архітектуру master / slave. Як видно на малюнку, він має одного центрального координатора (Водія), який спілкується з багатьма розподіленими працівниками (виконавцями). Драйвер та кожен із виконавців працюють у власних Java-процесах.

КОРОБКА

Драйвер - це процес, в якому працює основний метод. Спочатку він перетворює програму користувача у завдання, а після цього планує завдання на виконавців.

Виконавці

Виконавці - це робочі вузли процесів, які відповідають за виконання окремих завдань у заданій роботі Spark. Вони запускаються на початку програми Spark і, як правило, працюють протягом усього життя програми. Після виконання завдання вони надсилають результати водієві. Вони також забезпечують зберігання в пам'яті для RDD, які кешуються програмами користувачів через Block Manager.

ПОТОК ВИКОНАННЯ ПРИМІТКИ

Зважаючи на це, коли ви подаєте заявку на кластер із іскровою подачею, це відбувається всередині:

  1. Автономна програма запускається і створює SparkContextекземпляр (і лише тоді, коли ви можете викликати програму драйвером).
  2. Програма драйверів запитує ресурси у менеджера кластерів для запуску виконавців.
  3. Менеджер кластерів запускає виконавців.
  4. Процес драйвера проходить через користувацьку програму. Залежно від дій та перетворень над RDD завдання надсилаються виконавцям.
  5. Виконавці виконують завдання та зберігають результати.
  6. Якщо будь-який працівник виходить з ладу, його завдання будуть відправлені різним виконавцям для повторної обробки. У книзі "Навчання іскри: блискавичний швидкий аналіз даних" вони говорять про іскристість і відмови:

Іскра автоматично справляється з несправними або повільними машинами шляхом повторного виконання несправних або повільних завдань. Наприклад, якщо вузол, який виконує розділ операції map (), виходить з ладу, Spark повторно запустить його на інший вузол; і навіть якщо вузол не виходить з ладу, але просто набагато повільніше, ніж інші вузли, Spark може попередньо запустити "спекулятивну" копію завдання на інший вузол і взяти його результат, якщо це закінчиться.

  1. За допомогою SparkContext.stop () від драйвера або якщо основний метод виходить / виходить з ладу, всі виконавці будуть припинені, а ресурси кластера будуть звільнені менеджером кластера.

ВАШІ ЗАПИТАННЯ

  1. Коли виконавці запускаються, вони реєструються у водієві і так далі вони безпосередньо спілкуються. Працівники відповідають за те, щоб повідомити менеджеру кластерів про наявність своїх ресурсів.

  2. У кластері YARN ви можете це зробити за допомогою --num-виконавців. В автономному кластері ви отримаєте одного виконавця на одного працівника, якщо ви не граєте з spark.executor.cores і у працівника є достатньо ядер, щоб утримати більше одного виконавця. (Як зазначав @JacekLaskowski, - num-виконавці більше не використовуються в YARN https://github.com/apache/spark/commit/16b6d18613e150c7038c613992d80a7828413e66 )

  3. Ви можете призначити кількість ядер на одного виконавця за допомогою --executor-ядер

  4. --total-виконавець-сердечники - це максимальна кількість ядер виконавця за заявку

  5. Як в цій темі сказав Шон Оуен : "Немає вагомих причин запускати більше одного працівника на машину". Наприклад, у вас в багатьох машинах сидітимуть JVM.

ОНОВЛЕННЯ

Я не зміг перевірити цей сценарій, але згідно документації:

ПРИКЛАД 1: Іскра жадібно придбає стільки ядер і виконавців, скільки запропонував планувальник. Тож у підсумку ви отримаєте 5 виконавців з 8 ядрами кожен.

ПРИКЛАД 2 - 5: Іскра не зможе виділити стільки ядер, скільки вимагається в одного працівника, отже, жодних виконавців не буде запущено.


Дякую @Marco. Отже, як правило, не варто турбуватися про накопичувальну пам'ять працівника, оскільки він просто управляє ресурсами вузла?
Манікандан Каннан

8
Яка чудова відповідь! Дякую @Marco. Відповідно до github.com/apache/spark/commit/… --num-executors більше не використовуються у ПРАВІ.
Яцек Ласковський

1
@Marco дякую за чудову відповідь. Чи можете ви розширити функцію керуючого кластером під час роботи драйвера? ... Він повинен вирішувати випадок, коли водій чи працівники або обидва аварії або припиняють реагувати, щоб знати, які ресурси доступні.
Iain

1
@lain драйвер звертається до менеджера кластерів для розподілу ресурсів, а також просить кластер mgr запустити виконавців
Aravind Yarram

2
Чудова відповідь. Ви можете ознайомитись з детальною інформацією про внутрішні свічки тут github.com/JerryLead/SparkInternals/blob/master/EnglishVersion/…
Amar Gajbhiye

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.