SlideShare a Scribd company logo
Методы распределенной обработки
больших объемов данных в Hadoop
Москва 2014
Лекция 9: ZooKeeper
Zookeeper
• Сервис для координации
процессов распределенных
приложений
• Разработан в Yahoo! Research
• Проект Apache
– http://zookeeper.apache.org/
• Используется для координации
приложений в Hadoop
ЛЕКЦИЯ 9: ZOOKEEPER
Zookeeper в экосистеме Hadoop
HDFS
HBase
MapReduce
Oozie Pig Hive
ZooKeeper
ЛЕКЦИЯ 9: ZOOKEEPER
Неправда о распределенных
вычислениях
• Сеть надежна
• Не существует latency
• Топология не изменяется
• Сеть гомогенна
• Пропускная способность сети безгранична
• ….
ЛЕКЦИЯ 9: ZOOKEEPER
Мотивация
• Раньше: одна программа запускалась на одном
компьютере с одним процессором
• Сейчас: приложения состоят из независимых
программ, запущенных на постоянно изменяющемся
множестве компьютеров
• Сложность: координация всех этих независимых
программ
• Разработчик должен уметь реализовать логику
координации и логику приложения
• ZooKeeper предназначен для того, что облегчить
разработчику жизнь и оградить его от написания
логики координациии
ЛЕКЦИЯ 9: ZOOKEEPER
Как может выглядеть стандартная
распределенная система?
Master
Slave Slave Slave Slave
ЛЕКЦИЯ 9: ZOOKEEPER
Как может выглядеть стандартная
распределенная система?
Master
Slave Slave Slave Slave
Backup Master
Coordination
Service
ЛЕКЦИЯ 9: ZOOKEEPER
Как может выглядеть стандартная
распределенная система?
Master
Slave Slave Slave Slave
Backup Master
Coordination
Service
ЛЕКЦИЯ 9: ZOOKEEPER
Как может выглядеть стандартная
распределенная система?
Slave Slave Slave Slave
Coordination
Service
ЛЕКЦИЯ 9: ZOOKEEPER
Почему координация распределенных
систем сложна?
• Partial failures делает написание приложение
сложным
• Если сообщение отправляется по сети и в сети
происходит fail, то отправитель не узнает:
– Дошло ли его сообщение
– Не упал ли процесс на стороне приемника
– Правильно ли обработалось отправленное сообщение
• Единственный вариант для отправителя это
переконнектиться и спросить его об этом
• ZooKeeper предлагает набор тулзов для построения
распределенных приложений, которые могут
успешно обрабатывать partial failure
ЛЕКЦИЯ 9: ZOOKEEPER
Многопоточные программы на одной
машине
• Многопоточные программы сталкиваются с
похожими проблемами
• Важное отличие: разные машины в кластере
не объединяет ничего кроме сети
(архитектура shared-nothing)
ЛЕКЦИЯ 9: ZOOKEEPER
Типичные проблемы координации в
распределенных системах
• Static configuration: набор параметров для
системных процессов
• Dynamic configuration : параметры, которые
изменяются on the fly
• Group membership: кто жив (или мертв)?
• Leader election: кто ответственный
• Mutually exclusive access к критичным ресурсам
(locks)
• ZooKeeper позволяет это довольно просто
реализовать
ЛЕКЦИЯ 9: ZOOKEEPER
ZooKeeper’s design principles
• API wait-free
– Нет блокирующих примитивов
– Блокировка может быть реализована на клиенте
– Нет deadlocks
• Клиентские запросы обрабатываются в порядке
FIFO
• Клиенты получают нотификацию об изменениях
– Всегда, прежде чем клиент увидит измененные
данные
ЛЕКЦИЯ 9: ZOOKEEPER
Стратегия ZooKeeper: быть быстрым и
надежным
• Сервис ZooKeeper это несколько серверов,
использующих репликацию (high availability)
• Данные кешируются на стороне клиента
– Пример: клиент кеширует ID текущего лидера
вместо того, чтобы каждый раз его запрашивать в
ZooKeeper
• Что случится, если будет выбран новый лидер?
– Одно из решений: polling (не оптимально)
– Другой вариант: watch mechanism
• Клиенты могут наблюдать обновление данного объекта с
данными
ЛЕКЦИЯ 9: ZOOKEEPER
Терминология ZooKeeper
• Client: пользователь сервиса ZooKeeper
• Server: процесс, предоставляемый сервисом
ZooKeeper
• znode: in-memory data node в ZooKeeper,
организованные в hierarchical namespace (data
tree)
• update/write: любые операции, которые
изменяют состояние data tree
• Клиент устанавливает session когда соединяется
с ZooKeeper
ЛЕКЦИЯ 9: ZOOKEEPER
Модель данных ZooKeeper: filesystem
• Znodes организованы в hierarchical namespace
• Ими можно управлять из клиента через ZooKeeper API
• Znodes похожи на UNIX-style пути в файловой системе
– Все znodes хранят данные (как файлы) и могут иметь детей
(как директории)
/
/app2/app1
/app1/p_1 /app1/p_2
ЛЕКЦИЯ 9: ZOOKEEPER
Флаги znode
• Клиенты управляет znodes путем добавления и удаления
их
• EPHEMERAL flag: клиент создает znode, которая будет
удалена в конце клиентской сессии
• SEQUENTIAL flag: монотонно увеличивает счетчик
добавляемый к путю znode
– Значение счетчика новой znode под одним родителем всегда
больше, чем у уже существующих детей
/app1_5
/app1_5/p_1 /app1_5/p_2 /app1_5/p_3
create(/app1_5/p_, data, SEQUENTIAL)
ЛЕКЦИЯ 9: ZOOKEEPER
znodes & watch flag
• Клиент может выполнять операции чтения к znode c
watch flag
• Сервер уведомляет клиента, когда данные на ноде
изменились
• Наблюдатели – это one-time триггеры,
ассоциированные с сессией
• Уведомления только информируют об изменениях, а
не о том, что это новые данные
• Znodes не предназначены для general data storage
– Порядок данных определяется килобайтами
ЛЕКЦИЯ 9: ZOOKEEPER
Сессии
• Клиент соединяется с ZooKeeper и инициирует сессию
– Сессии позволяют клиенту прозрачно переходить от
сервера к серверу
– Любой сервер может обрабатывать клиентские запросы
• Сессия имеет соответствующий таймаут
– ZooKeeper считает клиент невалидным, если за время
таймаута от него ничего не пришло
– Сессия завершается либо из-за невалидного клиента,
либо явно закрывается клиентом
ЛЕКЦИЯ 9: ZOOKEEPER
Client API
• create(znode, data, flags)
– Флаги определяют типа znode
• REGULAR, EPHEMERAL, SEQUENTIAL
– Znode должна быть адресована все время по полному
пути
• /app1/foo/bar
– Возвращает путь к znode
• delete(znode, version)
– Удаляет znode если версия эквивалентна актуальной
версии znode
– Чтобы исключить проверку версии нужно установить
version=-1
ЛЕКЦИЯ 9: ZOOKEEPER
Client API
• exists(znode, watch)
– Возвращает true если znode существует, иначе false
– Флаг watch позволяет установить наблюдения за znode
– watch позволяет подписать на информацию об
изменении znode
– Можно установить флаг даже на несуществующую znode
и клиент будет проинформирован, когда нода появится
• getData(znode, watch)
– Возвращает данные, записанные в znode
– watch не устанавливается, если нода не существует
ЛЕКЦИЯ 9: ZOOKEEPER
Client API
• setData(znode, data, version)
– Перезаписывает данные в znode если версия
соответствует указанной
– version=-1 позволяет форсированно записать данные
• getChildren(znode, watch)
– Возвращает множество детей (znodes) указанной
znode
• sync()
– Ждет завершения всех обновлений отправленных на
сервер ZooKeeper
ЛЕКЦИЯ 9: ZOOKEEPER
Client API operation
• Синхронные вызовы
– Клиент блокируется после вызова операции и ждет, пока
операция не завершится
– Нельзя делать конкурентные запросы из одного клиента
• Асинхронные вызовы
– Возможны конкурентные запросы
– Клиент может обрабатывать множество запросов
• Операции
– update/write
• create, setData, sync, delete
– read
• exists, getData, getChildren
ЛЕКЦИЯ 9: ZOOKEEPER
Примитивы: configuration
1. Как новый воркер запрашивает
конфигурацию у ZK?
2. Как администратор изменяет
конфигурацию “на лету”?
3. Как воркеры получают новую
конфигурацию?
/
/app2/app1
/app1/config /app1/progressКонфигурация хранится в /app1/config
1. getData(/app1/config, true)
2. setData(/app1/config/config, data, -1)
• Notify watching clients
3. getData(/app1/config, true)
ЛЕКЦИЯ 9: ZOOKEEPER
Примитивы: group
membership
1. Как все воркеры
приложения регистрируют
себя в ZK?
2. Как процесс может узнать
все обо всех активных
воркерах приложения?
1. create(/app1/workers/worker, data, EPHEMERAL)
2. getChildren(/app1/workers, true)
/app1
/app1/workers
/app1/workers/worker1 /app1/workers/worker2
/
ЛЕКЦИЯ 9: ZOOKEEPER
ЛЕКЦИЯ 9: ZOOKEEPER
public class CreateGroup implements Watcher {
private static final int SESSION_TIMEOUT = 5000;
private ZooKeeper zk;
private CountDownLatch connectedSignal = new CountDownLatch(1);
public void connect(String hosts) throws IOException, InterruptedException {
zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
connectedSignal.await();
}
@Override
public void process(WatchedEvent event) { // Watcher interface
if (event.getState() == KeeperState.SyncConnected) {
connectedSignal.countDown();
}
}
Group membership
ЛЕКЦИЯ 9: ZOOKEEPER
public void create(String groupName) throws KeeperException,
InterruptedException {
String path = "/" + groupName;
String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
System.out.println("Created " + createdPath);
}
public void close() throws InterruptedException {
zk.close();
}
public static void main(String[] args) throws Exception {
CreateGroup createGroup = new CreateGroup();
createGroup.connect(args[0]);
createGroup.create(args[1]);
createGroup.close();
}
}
Group membership
Примитивы: simple locks
1. Как все воркеры могут
использовать один ресурс с
помощью lock?
/app1
/app1/workers
/app1/workers/worker1 /app1/workers/worker2
/
/app1/lock1
create(/app1/lock1,…,EPHE.)
Ok? Use locked resource
getData(/app1/lock1,true)
yes
ЛЕКЦИЯ 9: ZOOKEEPER
Примитивы: leader election
1. Как все воркеры могут
выбрать лидера среди себя?
/app1
/app1/workers
/app1/workers/leader /app1/workers/worker1
/
getData(/app1/workers/leader, true)
Ok? follow
create(/app1/workers/leader, IP, EPHE.)
yes
Ok? lead
yesno
Если лидер умирает,
выбирают нового
(“herd effect”)
ЛЕКЦИЯ 9: ZOOKEEPER
Примитивы: locking
без herd effect
1. Как все воркеры могут
использовать один ресурс с
помощью lock?
/app1
/app1/locks
/app1/locks/lock_1 /app1/locks/lock_2
/
id=create(/app1/locks/lock_, SEQ.|EPHE.)
id=min(ids)? exit (use lock)
wait for notification
yes
exists(max_id<id,true)
no
ids = getChildren(/app1/locks/, false)
ЛЕКЦИЯ 9: ZOOKEEPER
Архитектура ZooKeeper
Request
Processor
ZAB
Atomic
Broadcast
ZAB
Atomic
Broadcast
ZAB
Atomic
Broadcast
DB
Commit
Log
In-memory
Replicated
DB
Write
Requests
Read
Requests
ЛЕКЦИЯ 9: ZOOKEEPER
Zookeeper DB
• Fully replicated
– Нет партиционирования/шардинга данных
• Каждый сервер содержит копию БД в памяти
– Хранится полностью znode tree
– Значение по-умолчанию 1Мб на znode
• Crash-recovery model
– Commit log
– Периодические снапшоты базы
ЛЕКЦИЯ 9: ZOOKEEPER
ZAB
• Используется для упорядочивания write requests
• ZAB внутри себя выбирает лидера (главную
реплику)
– Не путать с Leader Election используя ZooKeeper API
– Другие сервер становятся фоловерами (followers)
• Все write requests отправляются фоловерами
лидеру
– Лидер нумерует запросы и выполняет ZAB atomic
broadcast
ЛЕКЦИЯ 9: ZOOKEEPER
Request processor
• При получении write request
– Лидер определяет, в каком состоянии будет система после
применения запроса
– Трансформирует операцию в transactional update
• Такой transactional update затем используется в ZAB, DB
– Гарантируется идемпотентность апдейтов к БД для одной и
той же операции
• Идемпотентность: важно, т.к. ZAB может повторно
отправлять сообщение
– После восстановления прерванной операции
– Также позволяет делать более эффективные DB снапшоты
ЛЕКЦИЯ 9: ZOOKEEPER
Ресурсы
Hadoop: The Definitive Guide
Tom White (Author)
O'Reilly Media; 3rd Edition
Chapter 14 ZooKeeper
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• Что такое и сколько может быть запущено на
кластере:
– JobTracker?
– NameNode?
– DataNode?
– TaskTracker?
– MasterServer?
– RegionServer?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• MapReduce
– Каким образом определяется количество
мапперов?
– Редьюсеров?
– Когда и при каких условиях запускается
combiner()?
– Что приходит на вход и выход функции map() И
reduce()?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• MapReduce
– Каков процесс выполнения редьюсера?
– Что происходит между фазами map и reduce?
– Что происходит при падении таска?
– Что происходит при падении TaskTracker?
– Что такое Distributed Cache? Зачем нужно?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• HDFS
– Из чего состоят файлы?
– Какой размер блока у файла в HDFS?
– Что происходит с блоками файлов при падении
DataNode?
– Что произойдет с файловой системой при
падении NameNode?
– Как клиент читает и пишет файлы?
– Как задача MapReduce читает данные из HDFS?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• Pig и Hive
– Что это такое? Зачем нужно? Как работает?
– В чем отличие между собой?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• NoSQL
– Что такое шардинг?
– О чем говорит CAP-теорема?
– Что такое Eventual Consistency?
– Зачем нужны Schema-less DB?
– Что такое Consistent Hashing?
ЛЕКЦИЯ 9: ZOOKEEPER
Контроль знаний
• Hbase
– Как хранятся данные в Hbase?
– Что такое регион в таблице?
– Из чего он состоит?
– Что происходит при падении RegionServer?
– Зачем нужны операции compactions? Какие
бывают? В чем отличие?
ЛЕКЦИЯ 9: ZOOKEEPER
Вопросы?
ЛЕКЦИЯ 9: ZOOKEEPER

More Related Content

PDF
Лекция 10. Apache Mahout
PDF
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PPTX
Mysql vs postgresql
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
Лекция 10. Apache Mahout
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Mysql vs postgresql
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
СУБД 2013 Лекция №9 "Безопасность баз данных"

What's hot (20)

PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
Лекция 2. Основы Hadoop
PDF
Класс!ная Cassandra
PDF
Чему мы научились разрабатывая микросервисы?
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PPTX
Масштабирование баз данных. (Database Scalability)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PPTX
СУБД осень 2012 лекция 9
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PPTX
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PDF
За гранью NoSQL: NewSQL на Cassandra
PPT
XML Native Database на примере SednaXML
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PDF
PostgreSQL в высоконагруженных проектах
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PDF
Call of Postgres: Advanced Operations (part 2)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Лекция 2. Основы Hadoop
Класс!ная Cassandra
Чему мы научились разрабатывая микросервисы?
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Масштабирование баз данных. (Database Scalability)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
СУБД осень 2012 лекция 9
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Devconf2013 new-features-in-mysql-and-mariadb
За гранью NoSQL: NewSQL на Cassandra
XML Native Database на примере SednaXML
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PostgreSQL в высоконагруженных проектах
СУБД 2013 Лекция №5 "Определение узких мест"
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Call of Postgres: Advanced Operations (part 2)
Ad

Viewers also liked (10)

PDF
Лекция 1. Введение в Big Data и MapReduce
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
PDF
Лекция 13. YARN
PDF
Лекция 6. MapReduce в Hadoop (графы)
PDF
Лекция 12. Spark
PDF
Лекция 4. MapReduce в Hadoop (введение)
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
PDF
Лекция 7. Введение в Pig и Hive
PDF
Лекция 3. Распределённая файловая система HDFS
PDF
Лекция 11. Вычислительная модель Pregel
Лекция 1. Введение в Big Data и MapReduce
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 13. YARN
Лекция 6. MapReduce в Hadoop (графы)
Лекция 12. Spark
Лекция 4. MapReduce в Hadoop (введение)
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 7. Введение в Pig и Hive
Лекция 3. Распределённая файловая система HDFS
Лекция 11. Вычислительная модель Pregel
Ad

Similar to Лекция 9. ZooKeeper (20)

PDF
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
PDF
еще один недостаток современных клиент серверных приложений
PPT
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
PDF
Нюансы запуска приложений в Kubernetes
PPTX
Errors Tracker
PPTX
Olap и oltp технологии
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PPTX
Docker Containers orchestrators: Kubernetes vs. Swarm
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PPTX
антон веснин Rails Application Servers
PPTX
развертывание среды Rails (антон веснин, Locum Ru)
PPTX
RAD на Java: как устроена CUBA Platform?
PPT
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PDF
И снова разработка под iOS. Павел Тайкало
PDF
Хорошо поддерживаемое приложение
PDF
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
PDF
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
PPTX
Построение аналитического хранилища на 100 петабайт
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
еще один недостаток современных клиент серверных приложений
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Нюансы запуска приложений в Kubernetes
Errors Tracker
Olap и oltp технологии
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Docker Containers orchestrators: Kubernetes vs. Swarm
Оптимизация производительности нагруженных веб-систем на Java
антон веснин Rails Application Servers
развертывание среды Rails (антон веснин, Locum Ru)
RAD на Java: как устроена CUBA Platform?
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
И снова разработка под iOS. Павел Тайкало
Хорошо поддерживаемое приложение
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Построение аналитического хранилища на 100 петабайт

More from Technopark (15)

PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
PPT
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
PPTX
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
PPTX
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
PPTX
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
PPTX
СУБД 2013 Лекция №1 "Введение и начало проектирования"
PDF
Java осень 2014 занятие 8
PDF
Java осень 2014 занятие 7
PDF
Java осень 2014 занятие 6
PDF
Java осень 2014 занятие 5
PDF
Java осень 2014 занятие 3
PDF
Java осень 2014 занятие 1
PDF
Java осень 2014 занятие 2
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Java осень 2014 занятие 8
Java осень 2014 занятие 7
Java осень 2014 занятие 6
Java осень 2014 занятие 5
Java осень 2014 занятие 3
Java осень 2014 занятие 1
Java осень 2014 занятие 2

Лекция 9. ZooKeeper

  • 1. Методы распределенной обработки больших объемов данных в Hadoop Москва 2014 Лекция 9: ZooKeeper
  • 2. Zookeeper • Сервис для координации процессов распределенных приложений • Разработан в Yahoo! Research • Проект Apache – http://zookeeper.apache.org/ • Используется для координации приложений в Hadoop ЛЕКЦИЯ 9: ZOOKEEPER
  • 3. Zookeeper в экосистеме Hadoop HDFS HBase MapReduce Oozie Pig Hive ZooKeeper ЛЕКЦИЯ 9: ZOOKEEPER
  • 4. Неправда о распределенных вычислениях • Сеть надежна • Не существует latency • Топология не изменяется • Сеть гомогенна • Пропускная способность сети безгранична • …. ЛЕКЦИЯ 9: ZOOKEEPER
  • 5. Мотивация • Раньше: одна программа запускалась на одном компьютере с одним процессором • Сейчас: приложения состоят из независимых программ, запущенных на постоянно изменяющемся множестве компьютеров • Сложность: координация всех этих независимых программ • Разработчик должен уметь реализовать логику координации и логику приложения • ZooKeeper предназначен для того, что облегчить разработчику жизнь и оградить его от написания логики координациии ЛЕКЦИЯ 9: ZOOKEEPER
  • 6. Как может выглядеть стандартная распределенная система? Master Slave Slave Slave Slave ЛЕКЦИЯ 9: ZOOKEEPER
  • 7. Как может выглядеть стандартная распределенная система? Master Slave Slave Slave Slave Backup Master Coordination Service ЛЕКЦИЯ 9: ZOOKEEPER
  • 8. Как может выглядеть стандартная распределенная система? Master Slave Slave Slave Slave Backup Master Coordination Service ЛЕКЦИЯ 9: ZOOKEEPER
  • 9. Как может выглядеть стандартная распределенная система? Slave Slave Slave Slave Coordination Service ЛЕКЦИЯ 9: ZOOKEEPER
  • 10. Почему координация распределенных систем сложна? • Partial failures делает написание приложение сложным • Если сообщение отправляется по сети и в сети происходит fail, то отправитель не узнает: – Дошло ли его сообщение – Не упал ли процесс на стороне приемника – Правильно ли обработалось отправленное сообщение • Единственный вариант для отправителя это переконнектиться и спросить его об этом • ZooKeeper предлагает набор тулзов для построения распределенных приложений, которые могут успешно обрабатывать partial failure ЛЕКЦИЯ 9: ZOOKEEPER
  • 11. Многопоточные программы на одной машине • Многопоточные программы сталкиваются с похожими проблемами • Важное отличие: разные машины в кластере не объединяет ничего кроме сети (архитектура shared-nothing) ЛЕКЦИЯ 9: ZOOKEEPER
  • 12. Типичные проблемы координации в распределенных системах • Static configuration: набор параметров для системных процессов • Dynamic configuration : параметры, которые изменяются on the fly • Group membership: кто жив (или мертв)? • Leader election: кто ответственный • Mutually exclusive access к критичным ресурсам (locks) • ZooKeeper позволяет это довольно просто реализовать ЛЕКЦИЯ 9: ZOOKEEPER
  • 13. ZooKeeper’s design principles • API wait-free – Нет блокирующих примитивов – Блокировка может быть реализована на клиенте – Нет deadlocks • Клиентские запросы обрабатываются в порядке FIFO • Клиенты получают нотификацию об изменениях – Всегда, прежде чем клиент увидит измененные данные ЛЕКЦИЯ 9: ZOOKEEPER
  • 14. Стратегия ZooKeeper: быть быстрым и надежным • Сервис ZooKeeper это несколько серверов, использующих репликацию (high availability) • Данные кешируются на стороне клиента – Пример: клиент кеширует ID текущего лидера вместо того, чтобы каждый раз его запрашивать в ZooKeeper • Что случится, если будет выбран новый лидер? – Одно из решений: polling (не оптимально) – Другой вариант: watch mechanism • Клиенты могут наблюдать обновление данного объекта с данными ЛЕКЦИЯ 9: ZOOKEEPER
  • 15. Терминология ZooKeeper • Client: пользователь сервиса ZooKeeper • Server: процесс, предоставляемый сервисом ZooKeeper • znode: in-memory data node в ZooKeeper, организованные в hierarchical namespace (data tree) • update/write: любые операции, которые изменяют состояние data tree • Клиент устанавливает session когда соединяется с ZooKeeper ЛЕКЦИЯ 9: ZOOKEEPER
  • 16. Модель данных ZooKeeper: filesystem • Znodes организованы в hierarchical namespace • Ими можно управлять из клиента через ZooKeeper API • Znodes похожи на UNIX-style пути в файловой системе – Все znodes хранят данные (как файлы) и могут иметь детей (как директории) / /app2/app1 /app1/p_1 /app1/p_2 ЛЕКЦИЯ 9: ZOOKEEPER
  • 17. Флаги znode • Клиенты управляет znodes путем добавления и удаления их • EPHEMERAL flag: клиент создает znode, которая будет удалена в конце клиентской сессии • SEQUENTIAL flag: монотонно увеличивает счетчик добавляемый к путю znode – Значение счетчика новой znode под одним родителем всегда больше, чем у уже существующих детей /app1_5 /app1_5/p_1 /app1_5/p_2 /app1_5/p_3 create(/app1_5/p_, data, SEQUENTIAL) ЛЕКЦИЯ 9: ZOOKEEPER
  • 18. znodes & watch flag • Клиент может выполнять операции чтения к znode c watch flag • Сервер уведомляет клиента, когда данные на ноде изменились • Наблюдатели – это one-time триггеры, ассоциированные с сессией • Уведомления только информируют об изменениях, а не о том, что это новые данные • Znodes не предназначены для general data storage – Порядок данных определяется килобайтами ЛЕКЦИЯ 9: ZOOKEEPER
  • 19. Сессии • Клиент соединяется с ZooKeeper и инициирует сессию – Сессии позволяют клиенту прозрачно переходить от сервера к серверу – Любой сервер может обрабатывать клиентские запросы • Сессия имеет соответствующий таймаут – ZooKeeper считает клиент невалидным, если за время таймаута от него ничего не пришло – Сессия завершается либо из-за невалидного клиента, либо явно закрывается клиентом ЛЕКЦИЯ 9: ZOOKEEPER
  • 20. Client API • create(znode, data, flags) – Флаги определяют типа znode • REGULAR, EPHEMERAL, SEQUENTIAL – Znode должна быть адресована все время по полному пути • /app1/foo/bar – Возвращает путь к znode • delete(znode, version) – Удаляет znode если версия эквивалентна актуальной версии znode – Чтобы исключить проверку версии нужно установить version=-1 ЛЕКЦИЯ 9: ZOOKEEPER
  • 21. Client API • exists(znode, watch) – Возвращает true если znode существует, иначе false – Флаг watch позволяет установить наблюдения за znode – watch позволяет подписать на информацию об изменении znode – Можно установить флаг даже на несуществующую znode и клиент будет проинформирован, когда нода появится • getData(znode, watch) – Возвращает данные, записанные в znode – watch не устанавливается, если нода не существует ЛЕКЦИЯ 9: ZOOKEEPER
  • 22. Client API • setData(znode, data, version) – Перезаписывает данные в znode если версия соответствует указанной – version=-1 позволяет форсированно записать данные • getChildren(znode, watch) – Возвращает множество детей (znodes) указанной znode • sync() – Ждет завершения всех обновлений отправленных на сервер ZooKeeper ЛЕКЦИЯ 9: ZOOKEEPER
  • 23. Client API operation • Синхронные вызовы – Клиент блокируется после вызова операции и ждет, пока операция не завершится – Нельзя делать конкурентные запросы из одного клиента • Асинхронные вызовы – Возможны конкурентные запросы – Клиент может обрабатывать множество запросов • Операции – update/write • create, setData, sync, delete – read • exists, getData, getChildren ЛЕКЦИЯ 9: ZOOKEEPER
  • 24. Примитивы: configuration 1. Как новый воркер запрашивает конфигурацию у ZK? 2. Как администратор изменяет конфигурацию “на лету”? 3. Как воркеры получают новую конфигурацию? / /app2/app1 /app1/config /app1/progressКонфигурация хранится в /app1/config 1. getData(/app1/config, true) 2. setData(/app1/config/config, data, -1) • Notify watching clients 3. getData(/app1/config, true) ЛЕКЦИЯ 9: ZOOKEEPER
  • 25. Примитивы: group membership 1. Как все воркеры приложения регистрируют себя в ZK? 2. Как процесс может узнать все обо всех активных воркерах приложения? 1. create(/app1/workers/worker, data, EPHEMERAL) 2. getChildren(/app1/workers, true) /app1 /app1/workers /app1/workers/worker1 /app1/workers/worker2 / ЛЕКЦИЯ 9: ZOOKEEPER
  • 26. ЛЕКЦИЯ 9: ZOOKEEPER public class CreateGroup implements Watcher { private static final int SESSION_TIMEOUT = 5000; private ZooKeeper zk; private CountDownLatch connectedSignal = new CountDownLatch(1); public void connect(String hosts) throws IOException, InterruptedException { zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this); connectedSignal.await(); } @Override public void process(WatchedEvent event) { // Watcher interface if (event.getState() == KeeperState.SyncConnected) { connectedSignal.countDown(); } } Group membership
  • 27. ЛЕКЦИЯ 9: ZOOKEEPER public void create(String groupName) throws KeeperException, InterruptedException { String path = "/" + groupName; String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("Created " + createdPath); } public void close() throws InterruptedException { zk.close(); } public static void main(String[] args) throws Exception { CreateGroup createGroup = new CreateGroup(); createGroup.connect(args[0]); createGroup.create(args[1]); createGroup.close(); } } Group membership
  • 28. Примитивы: simple locks 1. Как все воркеры могут использовать один ресурс с помощью lock? /app1 /app1/workers /app1/workers/worker1 /app1/workers/worker2 / /app1/lock1 create(/app1/lock1,…,EPHE.) Ok? Use locked resource getData(/app1/lock1,true) yes ЛЕКЦИЯ 9: ZOOKEEPER
  • 29. Примитивы: leader election 1. Как все воркеры могут выбрать лидера среди себя? /app1 /app1/workers /app1/workers/leader /app1/workers/worker1 / getData(/app1/workers/leader, true) Ok? follow create(/app1/workers/leader, IP, EPHE.) yes Ok? lead yesno Если лидер умирает, выбирают нового (“herd effect”) ЛЕКЦИЯ 9: ZOOKEEPER
  • 30. Примитивы: locking без herd effect 1. Как все воркеры могут использовать один ресурс с помощью lock? /app1 /app1/locks /app1/locks/lock_1 /app1/locks/lock_2 / id=create(/app1/locks/lock_, SEQ.|EPHE.) id=min(ids)? exit (use lock) wait for notification yes exists(max_id<id,true) no ids = getChildren(/app1/locks/, false) ЛЕКЦИЯ 9: ZOOKEEPER
  • 32. Zookeeper DB • Fully replicated – Нет партиционирования/шардинга данных • Каждый сервер содержит копию БД в памяти – Хранится полностью znode tree – Значение по-умолчанию 1Мб на znode • Crash-recovery model – Commit log – Периодические снапшоты базы ЛЕКЦИЯ 9: ZOOKEEPER
  • 33. ZAB • Используется для упорядочивания write requests • ZAB внутри себя выбирает лидера (главную реплику) – Не путать с Leader Election используя ZooKeeper API – Другие сервер становятся фоловерами (followers) • Все write requests отправляются фоловерами лидеру – Лидер нумерует запросы и выполняет ZAB atomic broadcast ЛЕКЦИЯ 9: ZOOKEEPER
  • 34. Request processor • При получении write request – Лидер определяет, в каком состоянии будет система после применения запроса – Трансформирует операцию в transactional update • Такой transactional update затем используется в ZAB, DB – Гарантируется идемпотентность апдейтов к БД для одной и той же операции • Идемпотентность: важно, т.к. ZAB может повторно отправлять сообщение – После восстановления прерванной операции – Также позволяет делать более эффективные DB снапшоты ЛЕКЦИЯ 9: ZOOKEEPER
  • 35. Ресурсы Hadoop: The Definitive Guide Tom White (Author) O'Reilly Media; 3rd Edition Chapter 14 ZooKeeper ЛЕКЦИЯ 9: ZOOKEEPER
  • 36. Контроль знаний • Что такое и сколько может быть запущено на кластере: – JobTracker? – NameNode? – DataNode? – TaskTracker? – MasterServer? – RegionServer? ЛЕКЦИЯ 9: ZOOKEEPER
  • 37. Контроль знаний • MapReduce – Каким образом определяется количество мапперов? – Редьюсеров? – Когда и при каких условиях запускается combiner()? – Что приходит на вход и выход функции map() И reduce()? ЛЕКЦИЯ 9: ZOOKEEPER
  • 38. Контроль знаний • MapReduce – Каков процесс выполнения редьюсера? – Что происходит между фазами map и reduce? – Что происходит при падении таска? – Что происходит при падении TaskTracker? – Что такое Distributed Cache? Зачем нужно? ЛЕКЦИЯ 9: ZOOKEEPER
  • 39. Контроль знаний • HDFS – Из чего состоят файлы? – Какой размер блока у файла в HDFS? – Что происходит с блоками файлов при падении DataNode? – Что произойдет с файловой системой при падении NameNode? – Как клиент читает и пишет файлы? – Как задача MapReduce читает данные из HDFS? ЛЕКЦИЯ 9: ZOOKEEPER
  • 40. Контроль знаний • Pig и Hive – Что это такое? Зачем нужно? Как работает? – В чем отличие между собой? ЛЕКЦИЯ 9: ZOOKEEPER
  • 41. Контроль знаний • NoSQL – Что такое шардинг? – О чем говорит CAP-теорема? – Что такое Eventual Consistency? – Зачем нужны Schema-less DB? – Что такое Consistent Hashing? ЛЕКЦИЯ 9: ZOOKEEPER
  • 42. Контроль знаний • Hbase – Как хранятся данные в Hbase? – Что такое регион в таблице? – Из чего он состоит? – Что происходит при падении RegionServer? – Зачем нужны операции compactions? Какие бывают? В чем отличие? ЛЕКЦИЯ 9: ZOOKEEPER