Zookeeper. Быстрый старт
Zookeeper – это централизованная служба для поддержки информации о конфигурации, именования, обеспечения распределённой синхронизации и предоставления групповых служб.
Свойства Zookeeper:
- пространство ключей образует дерево (иерархию, подобную файловой системе);
- значения могут содержаться в любом узле иерархии, а не только в листьях (как если бы файлы одновременно были бы и каталогами), узел иерархии называется
znode
; - между клиентом и сервером двунаправленная связь, следовательно, клиент может подписываться как изменение конкретного значения или части иерархии;
- возможно создать временную пару
ключ/значение
, которая существует, пока клиент, её создавший, подключен к кластеру; - все данные должны помещаться в память;
- устойчивость к выходу из строя некритического количества узлов кластера.
Интерфейс командной строки Zookeeper (CLI) используется для взаимодействия с Zookeeper в целях разработки. Это полезно для отладки и работы с различными опциями.
Чтобы выполнить операции CLI Zookeeper, сначала включите сервер Zookeeper:
/usr/hdp/current/zookeeper-server/bin/zkServer.sh start
Затем запустите клиент Zookeeper:
/usr/hdp/current/zookeeper-server/bin/zkCli.sh
Как только клиент запустится, вы сможете выполнить операции, представленные в таблице ниже.
Операция | Описание | Синтаксис |
---|---|---|
create | Создает новый znode (пару ключ/значение ) и возвращает ключ. Кажется странным, что возвращается ключ, если он указывается как аргумент, но дело в том, что в Zookeeper в качестве ключа можно указать префикс и сказать, что znode последовательный, тогда к префиксу добавится выровненное число, и результат будет использоваться в качестве ключа. Гарантируется, что создавая последовательные znode с одним и тем же префиксом, ключи будут образовывать возрастающую последовательность. Аргумент flag указывает, будет ли созданный znode эфемерным, постоянным или последовательным. Эфемерный znode (флаг: e) будет автоматически удален по истечении сеанса или при отключении клиента. Если флаги не указаны, то znode считается постоянным. Последовательный - гарантируйте, что путь znode будет уникальным | create [-flag] /path /data |
create "children" | Создание дочерних элементов аналогично созданию новых znodes . Единственная разница заключается в том, что путь дочернего znode будет иметь и родительский путь | create /parent/path/subnode/path /data |
get | Он возвращает связанные данные znode и метаданные указанного znode . Вы получите информацию, например, когда данные были изменены в последний раз, где они были изменены, и информацию о данных. Этот CLI также используется для назначения часов, чтобы показать уведомление о данных | get /path |
set data | Установить данные указанного znode | set /path /data |
ls | Эта команда используется для перечисления и отображения дочерних элементов znode | ls /path |
check status | Статус описывает метаданные указанного znode . Он содержит такие сведения, как метка времени, номер версии, ACL, длина данных и дочерний znode | stat /path |
remove a znode | Удаляет указанный znode и рекурсивно все его дочерние элементы. Это произойдет только в том случае, если такой znode доступен | rmr /path |
watch | Наблюдатель показывает уведомление при изменении указанных данных znode или дочерних данных znode . Можно установить watch только в get . Вывод аналогичен обычной команде get , но она будет ждать изменений znode в фоновом режиме | get /path watch 1 |
Используя API Zookeeper, приложение может подключаться, взаимодействовать, манипулировать данными, координировать и, наконец, отключаться от Zookeeper.
Операция | Описание | Синтаксис |
---|---|---|
Подключение к Zookeeper | Класс Zookeeper обеспечивает функциональность соединения через свой конструктор | Подпись конструктора выглядит следующим образом − Zookeeper (String connectionString, int sessionTimeout, Watcher watcher ). connectionString – строка подключения к сеансу. sessionTimeout - тайм-аут сеанса в миллисекундах. watcher - объект, реализующий интерфейс "наблюдатель". Zookeeper возвращает состояние соединения через объект watcher |
Создание znode | Метод Create позволяет создать новый znode в Zookeeper. После компиляции и выполнения приложения в Zookeeper будет создан znode с указанными данными. Можно проверить это с помощью get команды CLI Zookeeper zk Cli.sh | Сигнатура метода Create выглядит следующим образом - create (String path, byte [] data, List<ACL> acl, CreateMode create . path − путь znode . Например: /myapp1, / myapp2, /myapp1/mydata1 , myapp2/mydata1/myanothersubdata , data − данные для хранения в указанном пути znode , acl - список управления доступом узла, createMode - тип узла, либо эфемерный, последовательный, либо оба |
Проверка существования znode | Метод Exists позволяет проверить существование znode . Он возвращает метаданные, если указанный znode существует | Сигнатура метода Exists выглядит следующим образом - exists(String path, boolean watcher) . Path - путь, znode watcher - логическое значение для указания того, следует ли наблюдат за указанныим znode |
Метод getData | Метод getData позволяет получить данные, вложенные в указанный znode и его статус. Приложение будет ждать дальнейшего уведомления от Zookeeper. Измените данные указанного znode с помощью команды set в Zookeeper CLI zkCli.sh | Сигнатура метода getData выглядит следующим образом - getData(String path, Watcher watcher, Stat stat) . path - путь znode , watcher − функция обратного вызова типа Watcher. Zookeeper будет уведомлять через обратный вызов Watcher, когда данные указанного znode изменятся. Это одноразовое уведомление. stat - возвращает метаданные znode |
Метод setData | Метод setData для изменения данных, вложенных в указанный znode . Можно проверить с помощью get команды в CLI ZooKeeper, zk Cli.sh | Сигнатура метода setData выглядит следующим образом - setData (String path, byte[] data, int version) . path - путь znode , data - данные для хранения в указанном пути znode , version - текущая версия znode . ZooKeeper обновляет номер версии znode всякий раз, когда данные изменяются |
Метод getChildren | Метод getChildren позволяет получить все подузлы конкретного znode | Сигнатура метода getChildren выглядит следующим образом - getChildren(String path, Watcher watcher) . path - путь znode , watcher - Zookeeper уведомит, когда znode будет удалён |
Удалить znode | Метод delete для удаления указанного znode | Сигнатура метода Delete выглядит следующим образом - delete (String path, int version) . path - путь znode , version - текущая версия znode |
Отключения от сервера Zookeeper | Закрыть соединение | Метод Close выглядит следующим образом - public void close() throws InterruptedException { zoo.close(); } |