Я новичок в Hadoop/ZooKeeper. Я не понимаю цели использования ZooKeeper с Hadoop, является ли ZooKeeper записывать данные в Hadoop? Если нет, то почему мы используем ZooKeeper с Hadoop?
Зачем нам ZooKeeper в стеке Hadoop?
Ответ 1
Hadoop 1.x не использует Zookeeper. HBase использует zookeeper даже в установках Hadoop 1.x.
Hadoop также принял Zookeeper, начиная с версии 2.0.
Цель Zookeeper - управление кластерами. Это соответствует общей философии * nix использования более мелких специализированных компонентов - поэтому компоненты Hadoop, которые хотят, чтобы возможности кластеризации полагались на Zookeeper для этого, а не разрабатывали свои собственные.
Zookeeper - это распределенное хранилище, которое предоставляет следующие гарантии (скопировано из Страница обзора Zookeeper):
- Последовательная согласованность. Обновления от клиента будут применяться в чтобы они были отправлены.
- Атомность - обновления либо успешно, либо потерпеть неудачу. Нет частичных результатов.
- Единое системное изображение. Клиент увидит тот же вид сервиса независимо от того, какой сервер он подключает к.
- Надежность. Как только обновление будет применено, оно будет сохраняться с этого времени вперед, пока клиент не перезапишет обновление.
- Своевременность. Доступ к клиенту системы гарантированно будет в течение определенного времени.
Вы можете использовать их для реализации различных recipes, которые необходимы для управления кластерами, таких как блокировки, выборы лидеров и т.д.
Если вы собираетесь использовать ZooKeeper самостоятельно, я рекомендую вам взглянуть на куратор из Netflix, который упрощает его использование (например, они реализуют несколько рецептов из коробки)
Ответ 2
Zookeeper решает проблему надежной распределенной координации, а hasoop - распределенная система, правда?
Там есть отличная статья Paxos Algorithm, которую вы можете прочитать по этому вопросу.
Ответ 3
От страницы zookeeper:
ZooKeeper - это централизованный сервис для поддержки информации о конфигурации, присвоения имен, предоставления распределенной синхронизации и предоставления групповых услуг. Все эти виды услуг используются в той или иной форме распределенными приложениями.
Каждый раз, когда они выполняются, есть много работы, которая заключается в исправлении ошибок и условий гонки, которые неизбежны. Из-за сложности внедрения этих видов услуг приложения обычно обычно экономят на них, что делает их хрупкими при наличии изменений и их трудно справиться. Даже когда все сделано правильно, различные реализации этих служб приводят к сложности управления при развертывании приложений.
От страницы hadoop:
В проекте Apache ™ Hadoop® разрабатывается программное обеспечение с открытым исходным кодом для надежных масштабируемых распределенных вычислений.
Программная библиотека Apache Hadoop - это структура, которая позволяет распределенную обработку больших наборов данных в кластерах компьютеров с использованием простых моделей программирования.
По вашему запросу:
Зачем нам ZooKeeper в стеке Hadoop?
Фактор привязки - распределенная обработка и высокая доступность.
например. Hadoop Namenode не работает.
Высокая доступность Hadoop разработана для активного Namenode и резервного режима Namenode для отказа от процесса. В любой момент времени вы не должны одновременно иметь двух мастеров (активных Namenodes).
Из документации документации Apache на HDFSHighAvailabilityWithQJM:
Для правильной работы кластера HA жизненно важно, чтобы только один из NameNodes был активным одновременно. В противном случае состояние пространства имен будет быстро расходиться между ними, рискуя потерями данных или другими неправильными результатами. Чтобы обеспечить это свойство и предотвратить так называемый "сплит-мозговой сценарий", JournalNodes будут когда-либо позволять одному NameNode быть писателем одновременно.
Во время перехода на другой ресурс NameNode, который должен стать активным, просто возьмет на себя роль записи в JournalNodes, что эффективно предотвратит продолжение другого NameNode в активном состоянии, что позволит новому Active безопасно продолжить переход на другой ресурс.
Zookeeper используется, чтобы избежать сценария Split-brain. Вы можете найти роль Zookeeper в следующем вопросе: