2015-04-23 1 views
2

Прошу прощения за то, что я здесь маленький генерал, но я немного смущен тем, как планирование работы работает внутри в искры. Из документации here Я понимаю, что это своего рода реализация Hadoop Fair Scheduler.Apache Spark - Как встроенный планировщик заданий в искровом режиме определяет, что такое пользователи и какие пулы

Я не могу прийти, чтобы понять, кто именно здесь является пользователем (пользователи linux, пользователи hadoop, искровые клиенты?). Я также не могу понять, как здесь определяются пулы. Например, в моем кластере hadoop я выделил ресурсы для двух разных пулов (позвоним им команду 1 и команду 2). Но в искровом кластере обычные пулы и пользователи в них создают свой собственный контекст искры? Который снова приводит меня к вопросу о том, какие параметры я передаю, когда я устанавливаю свойство в spark.scheduler.pool.

У меня есть общее представление о том, как драйвер создает контекст искры, а затем разбивает их на задачи и задания. Может быть, я полностью упустил этот пункт, но мне очень хотелось бы понять, как работает внутренний планировщик Spark в контексте действий, задач и задания

ответ

2

По умолчанию искра работает с планировщиком FIFO, где задания выполняются в режиме FIFO.

Но если у вас есть кластер в YARN, YARN имеет подключаемый планировщик, это означает, что в YARN вы можете планировать свой выбор. Если вы используете YARN, распространенный CDH, у вас будет FAIR-планировщик, но вы также можете пойти для планировщика емкости.

Если вы используете YARN, распространенный HDP, у вас будет планировщик CAPACITY по умолчанию, и вы можете перейти к FAIR, если вам это нужно.

Как работает планировщик с искрой?

Я предполагаю, что у вас есть искровой кластер на YARN.

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

Как работает планировщик?

Справедливое планирование - это метод распределения ресурсов для заданий, при котором все задания получают в среднем равную долю ресурсов с течением времени. Когда выполняется одно задание, это задание использует весь кластер. Когда отправляются другие задания, для новых заданий назначаются слоты для заданий, которые освобождаются, так что каждое задание получает примерно одинаковое количество процессорного времени (с использованием preemption, убивающего все используемые задачи). В отличие от планировщика Hadoop по умолчанию (FIFO), который формирует очередь заданий, это позволяет короткие задания заканчиваться в разумные сроки, не голодая длительные рабочие места. Это также разумный способ совместного использования кластера между несколькими пользователями. Наконец, справедливый обмен может также работать с приоритетами работы - приоритеты используются в качестве весов для определения доли общего времени вычислений, которое должно получить каждая работа.

CapacityScheduler предназначен для совместного использования большого кластера, предоставляя каждой организации гарантию минимальной емкости. Основная идея заключается в том, что имеющиеся ресурсы в кластере Hadoop Map-Reduce разделены между несколькими организациями, которые коллективно финансируют кластер на основе вычислительных потребностей. Существует дополнительное преимущество, которое организация может получить в любой избыточной емкости, не используемой другими. Это обеспечивает эластичность для организаций экономически эффективным способом.

+7

Я понимаю, как планировщик работает с такими менеджерами ресурсов, как YARN и мезо. Думаю, мой вопрос связан с тем, как работает внутренний планировщик искры. Я пытаюсь понять, как «задачи» выделяются ресурсами JVM после инициирования контекста искры, а искровой драйвер отправляет их различным исполнителям. Приведенная документация довольно неоднозначна, и я не могу понять, что представляет собой концепция справедливого обмена, когда дело касается различных задач в рамках работы – Arpit1286

0

Spark внутренне использует планировщик заданий FIFO/FCFS. Но, когда вы говорите о задачах, он работает в стиле Round Robin.Будет ясно, если мы сосредоточимся на приведенном ниже примере:

Предположим, что первое задание в собственной очереди Spark не требует использования всех ресурсов кластера; поэтому сразу же начнется выполнение второго задания в очереди. Теперь оба задания запускаются одновременно. У каждой задачи есть несколько задач, которые нужно выполнить, чтобы выполнить всю работу. Предположим, что первое задание назначает 10 задач, а второе назначает 8. Затем эти 18 задач будут делиться циклами ЦП всего кластера превентивным образом. Если вы хотите продолжить сверление, начните с исполнителей.

В кластере будет мало исполнителей. Предположим, что число равно 6. Таким образом, в идеальном состоянии каждому исполнителю будут назначены 3 задачи, и эти 3 задания получат одинаковое время процессора исполнителей (отдельная JVM).

Это то, как искровое внутреннее расписание задач.