SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Методы распределенной обработки
больших объемов данных в 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

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (20)

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

Destaque

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

Destaque (10)

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

Semelhante a Лекция 9. ZooKeeper

Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Yandex
 
Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesАндрей Новиков
 
Olap и oltp технологии
Olap и oltp технологииOlap и oltp технологии
Olap и oltp технологииIlya Ternovoy
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Docker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDocker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDmitry Lazarenko
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
RAD на Java: как устроена CUBA Platform?
RAD на Java: как устроена  CUBA Platform?RAD на Java: как устроена  CUBA Platform?
RAD на Java: как устроена CUBA Platform?Aleksey Stukalov
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...Inhacking
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Аліна Шепшелей
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтAlexander Mazurov
 

Semelhante a Лекция 9. ZooKeeper (20)

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

Mais de Technopark

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

Mais de Technopark (15)

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