Какой тип кластера мне выбрать для Spark?
Я новичок в Apache Spark, и я только что узнал, что Spark поддерживает три типа кластеров:
- Автономный - это означает, что Spark будет управлять своим собственным кластером
- YARN - с помощью менеджера ресурсов Hadoop YARN
- Mesos - проект менеджера ресурсов Apache
Так как я новичок в Spark, я думаю, что я должен сначала попробовать Standalone. Но мне интересно, какой из них рекомендуется. Скажем, в будущем мне нужно построить большой кластер (сотни экземпляров), к какому типу кластеров мне следует перейти?
5 ответов
Думаю, лучше всего ответить тем, кто работает на Spark. Итак, из Learning Spark
Начните с автономного кластера, если это новое развертывание. Автономный режим является самым простым в настройке и предоставляет почти все те же функции, что и другие менеджеры кластеров, если вы используете только Spark.
Если вы хотите запускать Spark вместе с другими приложениями или использовать более широкие возможности планирования ресурсов (например, очереди), то и YARN, и Mesos предоставляют эти функции. Из них YARN, вероятно, будет предустановлен во многих дистрибутивах Hadoop.
Одним из преимуществ Mesos над YARN и автономным режимом является его тонкая опция совместного использования, которая позволяет интерактивным приложениям, таким как оболочка Spark, сокращать распределение ресурсов ЦП между командами. Это делает его привлекательным в средах, где несколько пользователей используют интерактивные оболочки.
Во всех случаях лучше всего запускать Spark на тех же узлах, что и HDFS, для быстрого доступа к хранилищу. Вы можете установить Mesos или автономный менеджер кластеров на одни и те же узлы вручную, или большинство дистрибутивов Hadoop уже устанавливают YARN и HDFS вместе.
Spark Standalone Manager: простой диспетчер кластеров, включенный в Spark, который упрощает настройку кластера. По умолчанию каждое приложение использует все доступные узлы в кластере.
Несколько преимуществ YARN по сравнению с Standalone & Mesos:
YARN позволяет динамически обмениваться и централизованно настраивать один и тот же пул ресурсов кластера между всеми платформами, работающими на YARN.
Вы можете воспользоваться всеми функциями планировщиков YARN для категоризации, изоляции и определения приоритетов рабочих нагрузок.
Автономный режим Spark требует, чтобы каждое приложение запускало исполнителя на каждом узле кластера; тогда как с YARN вы выбираете количество исполнителей для использования
YARN напрямую обрабатывает расположение стеллажей и машин в ваших запросах, что удобно.
Модель запроса ресурсов, как ни странно, обратна в Месосе. В YARN вы (инфраструктура) запрашиваете контейнеры с заданной спецификацией и задаете предпочтения локальности. В Mesos вы получаете "предложения" ресурсов и выбираете, принимать или отклонять их, основываясь на собственной политике планирования. Модель Mesos является, возможно, более гибкой, но, по-видимому, более трудоемкой для человека, внедряющего фреймворк.
Если у вас уже есть большой кластер Hadoop, YARN - лучший выбор.
Автономный менеджер требует, чтобы пользователь настраивал каждый из узлов с общим секретом. Модуль аутентификации Mesos по умолчанию, Cyrus SASL, можно заменить пользовательским модулем. YARN обладает безопасностью для аутентификации, авторизации уровня обслуживания, аутентификации для веб-консолей и конфиденциальности данных. Аутентификация Hadoop использует Kerberos для проверки подлинности Kerberos для каждого пользователя и службы.
- Высокая доступность обеспечивается всеми тремя менеджерами кластеров, но Hadoop YARN не нужно запускать отдельный контроллер отказоустойчивости ZooKeeper.
Полезные ссылки:
страница документации искры
статья agildata
Автономный довольно ясно, как другие упомянули, это должно использоваться, только когда у вас есть только искровая рабочая нагрузка.
Между пряжей и мезо, следует учитывать тот факт, что в отличие от mapreduce, искра работы захватывает исполнителей и удерживает их в течение всей жизни. где в Mapreduce работа может получить и выпустить картографы и редукторы в течение жизни.
если у вас есть долго выполняющиеся задания спарка, которые в течение срока службы задания не полностью используют все ресурсы, которые были получены в начале, вы можете поделиться этими ресурсами с другим приложением, и это можно сделать только с помощью динамического планирования Mesos или Spark., https://spark.apache.org/docs/2.0.2/job-scheduling.html Таким образом, для пряжи единственным способом динамического выделения для искры является использование динамического выделения, обеспеченного искрой. Пряжа не будет вмешиваться в это, в то время как Месос будет. Опять же, весь этот пункт важен только в том случае, если у вас есть длительное приложение Spark, и вы хотите динамически увеличивать и уменьшать его.
Mesos имеет более сложный дизайн планирования, позволяющий таким приложениям, как Spark, договариваться с ним. Это больше подходит для разнообразия приложений сегодня. Я нашел этот сайт действительно проницательным:
https://www.oreilly.com/ideas/a-tale-of-two-clusters-mesos-and-yarn
"... YARN оптимизирован для планирования заданий Hadoop, которые исторически (и до сих пор обычно) являются пакетными заданиями с длительным временем выполнения. Это означает, что YARN не был разработан для долгосрочных служб или для краткосрочных интерактивных запросов (например, небольших). и быстрые задания Spark), и хотя можно запланировать другие виды рабочих нагрузок, это не идеальная модель. Потребности в ресурсах, модель выполнения и архитектурные требования MapReduce сильно отличаются от требований для долго работающих сервисов, таких как как веб-серверы или приложения SOA, или рабочие нагрузки в реальном времени, такие как Spark или Storm..."
В этом случае и подобных дилеммах в инженерии данных есть много побочных вопросов, на которые нужно ответить, прежде чем выбрать один метод распределения вместо другого. Например, если вы не используете свой механизм обработки более чем на 3 узлах, вы обычно не сталкиваетесь с слишком большой проблемой, чтобы справиться с ней, поэтому разница в настройке производительности между YARN и SparkStandalone (на основе опыта) не прояснит ваше решение. Потому что обычно вы пытаетесь сделать свой конвейер простым, особенно когда ваши сервисы не управляются облаком самостоятельно, а ошибки и сбои случаются часто.
Я выбираю автономный режим для относительно небольших или несложных конвейеров, но если я чувствую себя хорошо и у меня уже есть кластер Hadoop, я предпочитаю использовать все дополнительные конфигурации, которые мне может предоставить Hadoop(Yarn).