Методы распределенной обработки
больших объемов данных в 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

Лекция 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 & watchflag • Клиент может выполнять операции чтения к 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 publicclass 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 publicvoid 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 без herdeffect 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
  • 31.
  • 32.
    Zookeeper DB • Fullyreplicated – Нет партиционирования/шардинга данных • Каждый сервер содержит копию БД в памяти – Хранится полностью 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 DefinitiveGuide 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
  • 43.