О.В. Сухорослов "Распределенные хранилища данных"

Post on 22-May-2015

3.772 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

О.В. Сухорослов "Распределенные хранилища данных", 11.05.2012, место показа: МФТИ, Школа анализа данных (ШАД)

TRANSCRIPT

11 Распределенные хранилища данных

О.В. Сухорослов

oleg.sukhoroslov@gmail.com

11.05.2012

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 1 / 49

План лекции

Введение

HBase

Cassandra

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 2 / 49

Реляционные СУБД

Фиксированная схема, построчное хранение, ACID, SQL,абстрагирование от уровня хранения данныхИзначально не ориентированы на работу с большими объемамиданных в распределенном режиме (+ с высокими скоростямичтения-записи)

Решения по репликации и распределению существующих РСУБДПопытки исправить ситуацию задним числомСложны в установке и сопровожденииСтатическое разбиение данных

Большой частью функциональности приходится жертвоватьJoin, сложные запросы, триггеры, представления, внешние ключии контроль ссылочной целостностиСтановятся очень дорогими в распределенном режиме или вообщене работаютНе удовлетворяют высоким требованиям по скоростичтения-записи

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 3 / 49

Реляционные СУБД

Фиксированная схема, построчное хранение, ACID, SQL,абстрагирование от уровня хранения данныхИзначально не ориентированы на работу с большими объемамиданных в распределенном режиме (+ с высокими скоростямичтения-записи)

Решения по репликации и распределению существующих РСУБДПопытки исправить ситуацию задним числомСложны в установке и сопровожденииСтатическое разбиение данных

Большой частью функциональности приходится жертвоватьJoin, сложные запросы, триггеры, представления, внешние ключии контроль ссылочной целостностиСтановятся очень дорогими в распределенном режиме или вообщене работаютНе удовлетворяют высоким требованиям по скоростичтения-записи

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 3 / 49

Реляционные СУБД

Фиксированная схема, построчное хранение, ACID, SQL,абстрагирование от уровня хранения данныхИзначально не ориентированы на работу с большими объемамиданных в распределенном режиме (+ с высокими скоростямичтения-записи)

Решения по репликации и распределению существующих РСУБДПопытки исправить ситуацию задним числомСложны в установке и сопровожденииСтатическое разбиение данных

Большой частью функциональности приходится жертвоватьJoin, сложные запросы, триггеры, представления, внешние ключии контроль ссылочной целостностиСтановятся очень дорогими в распределенном режиме или вообщене работаютНе удовлетворяют высоким требованиям по скоростичтения-записи

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 3 / 49

Альтернативные решения (aka NoSQL1)

Изначально имеют распределенную архитектуру, ориентированнуюна горизонтальное масштабирование путем добавления новыхузлов

Нарушают классические принципы (нормализация данных,фиксированная схема, ACID) и отказываются от частифункциональности РСУБД (join, вторичные индексы)

Для большого класса задач позволяют делать то, чего не могутРСУБД

Хранить и обеспечивать быстрый, масштабируемый доступ к оченьбольшим таблицам на кластерах из массовых серверов

1http://en.wikipedia.org/wiki/NoSQL_(concept)О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 4 / 49

Пример: webtable

Таблица, хранящая загруженные поисковым роботом страницы иих атрибуты

Количество записей в таблице - миллиардыКлючом является URL страницыАтрибуты - загруженное содержание, язык, MIME-тип,обработанный текст, ссылки, изображения...

Работа с данными таблицыМассовая оффлайн обработка и аналитика (batch, MapReduce)Запись данных роботом (random access)Выдача закэшированного содержимого страниц поиском (randomaccess)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 5 / 49

Примеры распределенных хранилищ

BigTable (Google)2

Dynamo (Amazon)3

HBaseCassandraVoldemortRiakHypertableMongoDBRedis...

Column vs Key-value storage2http://labs.google.com/papers/bigtable.html3http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 6 / 49

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 7 / 49

HBase

Распределенная “база данных” для HadoopОриентирована на случайный доступ к большим данным в режимереального времениРеализована по образу Google BigtableРаботает поверх HDFS

Проект Apache (май 2010)http://hbase.apache.org/

ПользователиFacebook, Twitter, Yahoo! ...

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 8 / 49

Точнее...

Distributed,Versioned,Column-Oriented,High-Availability,High-PerformanceStore

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 9 / 49

Концептуальная модель данных

Поименованные таблицы, в строках которых хранятся данные

Каждая строка таблицы имеетКлюч (primary key)Произвольный набор колонок

Колонки сгруппированы в “семейства” (column family)Семейства колонок должны быть заданы при создании таблицыВсе колонки семейства имеют общий префикс

content:data, content:language, content:type

Новые колонки внутри семейства можно создавать в любой момент

Внутри ячеек таблицы хранятся данныеПоддерживается хранение несколько версий данныхПо умолчанию версия идентифицируется с помощью временизаписи (timestamp)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 10 / 49

Концептуальная модель данных

Поименованные таблицы, в строках которых хранятся данные

Каждая строка таблицы имеетКлюч (primary key)Произвольный набор колонок

Колонки сгруппированы в “семейства” (column family)Семейства колонок должны быть заданы при создании таблицыВсе колонки семейства имеют общий префикс

content:data, content:language, content:type

Новые колонки внутри семейства можно создавать в любой момент

Внутри ячеек таблицы хранятся данныеПоддерживается хранение несколько версий данныхПо умолчанию версия идентифицируется с помощью временизаписи (timestamp)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 10 / 49

Концептуальная модель данных

Поименованные таблицы, в строках которых хранятся данные

Каждая строка таблицы имеетКлюч (primary key)Произвольный набор колонок

Колонки сгруппированы в “семейства” (column family)Семейства колонок должны быть заданы при создании таблицыВсе колонки семейства имеют общий префикс

content:data, content:language, content:type

Новые колонки внутри семейства можно создавать в любой момент

Внутри ячеек таблицы хранятся данныеПоддерживается хранение несколько версий данныхПо умолчанию версия идентифицируется с помощью временизаписи (timestamp)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 10 / 49

Концептуальная модель данных

Поименованные таблицы, в строках которых хранятся данные

Каждая строка таблицы имеетКлюч (primary key)Произвольный набор колонок

Колонки сгруппированы в “семейства” (column family)Семейства колонок должны быть заданы при создании таблицыВсе колонки семейства имеют общий префикс

content:data, content:language, content:type

Новые колонки внутри семейства можно создавать в любой момент

Внутри ячеек таблицы хранятся данныеПоддерживается хранение несколько версий данныхПо умолчанию версия идентифицируется с помощью временизаписи (timestamp)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 10 / 49

Концептуальная модель данных

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 11 / 49

Физическая модель данных

Каждая ячейка таблицы хранится в виде(table, row, family:column, timestamp) -> dataПустые ячейки не хранятсяСодержимое ячейки является просто массивом байтНет встроенных типов данных

Строки таблицы отсортированы по ключу

Строки таблицы разбиты вертикально на семейства колонокДанные семейств колонок хранятся вместе (непрерывно на диске),в отсортированном порядке по rowid, column, timestamp

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 12 / 49

Физическая модель данных

Каждая ячейка таблицы хранится в виде(table, row, family:column, timestamp) -> dataПустые ячейки не хранятсяСодержимое ячейки является просто массивом байтНет встроенных типов данных

Строки таблицы отсортированы по ключу

Строки таблицы разбиты вертикально на семейства колонокДанные семейств колонок хранятся вместе (непрерывно на диске),в отсортированном порядке по rowid, column, timestamp

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 12 / 49

Физическая модель данных

Каждая ячейка таблицы хранится в виде(table, row, family:column, timestamp) -> dataПустые ячейки не хранятсяСодержимое ячейки является просто массивом байтНет встроенных типов данных

Строки таблицы отсортированы по ключу

Строки таблицы разбиты вертикально на семейства колонокДанные семейств колонок хранятся вместе (непрерывно на диске),в отсортированном порядке по rowid, column, timestamp

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 12 / 49

Физическая модель данных

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 13 / 49

Структура данных

1 SortedMap(2 RowKey , List(3 SortedMap(4 Column , List(5 Value , Timestamp6 )7 )8 )9 )

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 14 / 49

Row-oriented vs Column-oriented

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 15 / 49

Пример

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 16 / 49

Распределеное хранение данных

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 17 / 49

Распределение данных в HBase

Разбиение данныхТаблицы разбиваются горизонтально на регионы

[startkey , endkey)В самом начале таблица состоит из одного регионаПо мере увеличения размера таблицы происходит автоматическоеразбиение данных на новые регионы

Регионы распределяются между серверами HBase-кластера

Репликация данныхДанные регионов хранятся и реплицируются в HDFS

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 18 / 49

Архитектура HBase-кластера

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 19 / 49

Подробности

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 20 / 49

Доступ к данным

Создание и удаление таблиц, колонок

Чтение данных (Get, Scan)По ключу: все или определенные колонки для строки с даннымключомПо времени: самое позднее значение, определенный моментвремени, N значений, все значенияПо диапазону: итератор по строкам (Scanner)

Начальный и конечный ключи, набор колонок, фильтр

Запись данных (Put)Атомарные изменения одной строки (row lock)Multi-row locking (new)

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 21 / 49

Клиентские интерфейсы

Интерфейс командной строкиHBase Shell

Программный интерфейсJava API

Удаленные программные интерфейсыAvro, REST, Thrift

Web-интерфейс

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 22 / 49

HBase Shell

1 hadoop2 -00:~$ hbase shell2 HBase Shell; enter ’help <RETURN >’ for list of supported commands.3 Type "exit <RETURN >" to leave the HBase Shell4 Version 0.90.1 - cdh3u0 , r, Fri Mar 25 16:10:51 PDT 20115

6 hbase(main ):001:0 > create ’test ’, ’data ’7 0 row(s) in 12.5240 seconds8

9 hbase(main ):002:0 > list10 TABLE11 test12 1 row(s) in 0.0390 seconds13

14 hbase(main ):003:0 > put ’test ’, ’row1 ’, ’data:1’, ’value1 ’15 0 row(s) in 0.1270 seconds16

17 hbase(main ):004:0 > put ’test ’, ’row2 ’, ’data:2’, ’value2 ’18 0 row(s) in 0.0360 seconds19

20 hbase(main ):005:0 > put ’test ’, ’row3 ’, ’data:3’, ’value3 ’21 0 row(s) in 0.0310 seconds

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 23 / 49

HBase Shell

1 hbase(main ):006:0 > scan ’test ’2 ROW COLUMN+CELL3 row1 column=data:1, timestamp =1303416932470 , value=value14 row2 column=data:2, timestamp =1303416939804 , value=value25 row3 column=data:3, timestamp =1303416945399 , value=value36 3 row(s) in 0.2130 seconds7

8 hbase(main ):007:0 > disable ’test ’9 0 row(s) in 12.1800 seconds

10

11 hbase(main ):008:0 > drop ’test ’12 0 row(s) in 1.5430 seconds13

14 hbase(main ):009:0 > exit

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 24 / 49

Java API (org.apache.hadoop.hbase.client)

1 public class ExampleClient {2 public static void main(String [] args) throws IOException {3 Configuration config = HBaseConfiguration.create ();4

5 // Create table6 HBaseAdmin admin = new HBaseAdmin(config );7 HTableDescriptor htd = new HTableDescriptor("test");8 HColumnDescriptor hcd = new HColumnDescriptor("data");9 htd.addFamily(hcd);

10 admin.createTable(htd);11 byte [] tablename = htd.getName ();

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 25 / 49

Java API (org.apache.hadoop.hbase.client)

1 // Run some operations -- a put , a get , and a scan2 HTable table = new HTable(config , tablename );3 byte [] row1 = Bytes.toBytes("row1");4 Put p1 = new Put(row1);5 p1.add(Bytes.toBytes("data"), Bytes.toBytes("1"),6 Bytes.toBytes("value1"));7 table.put(p1);8 Get g = new Get(row1);9 Result result = table.get(g);

10 System.out.println("Get: " + result );11 Scan scan = new Scan ();12 ResultScanner scanner = table.getScanner(scan);13 try {14 for (Result scannerResult: scanner) {15 System.out.println("Scan: " + scannerResult );16 }17 } finally {18 scanner.close ();19 }20

21 // Drop the table22 admin.disableTable(tablename );23 admin.deleteTable(tablename );24 }25 }

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 26 / 49

HBase и Hadoop MapReduce

Пакет org.apache.hadoop.hbase.mapreduce

Форматы данныхTableInputFormat

один map на каждый регион таблицы

TableOutputFormat

Базовые классы Map и ReduceTableMapperTableReducer

Утилита TableMapReduceUtil

Примеры использованияHBASE_DIST/src/examples/mapreduceCellCounter4

4http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java?view=markup

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 27 / 49

HBase vs СУБД

СУБД HBaseData layout Row-oriented Column-orientedТранзакции Multi-row ACID Single row only

Язык запросов SQL get/put/scan/...Индексы Произвольные колонки Ключи записей

Максимальный объем Терабайты 1PBЧтение/Запись 1K запросов/сек 1M запросов/сек

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 28 / 49

HBase vs HDFS?

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 29 / 49

Область применения HBase

ДаRandom read/writeБольшое кол-во операций/сек + большой объем данныхЧасто повторяющиеся запросы

НетAppend + read all dataУникальные запросы (ad-hoc analytics)Данные могут быть размещены на одном сервере

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 30 / 49

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 31 / 49

Apache Cassandra 5

Распределенное хранилище с моделью данных по образу BigTableи децентрализованной архитектурой по образу Dynamo

Первоначальная разработка - Inbox Search @ Facebook, приучастии авторов Amazon Dynamo2008 - open source2010 - проект Apache Software Foundation2010 - Facebook перешел на использование HBase

5http://cassandra.apache.org/О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 32 / 49

Модель данных

Keyspace = база данных (схема)Column family = таблица

статические / динамические

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 33 / 49

Типы данных

ValidatorОпределяет тип данных для ключей и значений колонок

ComparatorОпределяет тип данных для имен колонокОпределяет порядок сортировки (и хранения) колонок

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 34 / 49

Индексы

PrimaryПо значениям ключейСтроится автоматически

SecondaryПо значениям колонокСоздается по требованию

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 35 / 49

Распределение данных между узлами

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 36 / 49

Стратегия распределения данных

Определяется на уровне всего кластера

Random PatitionerИспользует стратегию consistent hashingtoken = MD5(row_key), 0− 2127

Обеспечивает равномерное распределение данных по узламРекомендуется использовать по-умолчанию

Ordered PartitionerДанные хранятся в отсортированном порядкеtoken = HEX(row_key_prefix)Позволяет делать range scansСложнее в настройке и администрировании

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 37 / 49

Репликация

Стратегия репликации определяется для каждого keyspaceКол-во реплик (replication factor)Распределение реплик по узлам

SimpleStrategyNetworkTopologyStrategy

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 38 / 49

Gossip

Децентрализованный (peer-to-peer) протокол, используемый дляобмена информацией между узлами

Состояние узла и других известных ему узловПозволяет достаточно быстро распространять информацию междуузлами

Seed nodes

Обнаружение отказов

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 39 / 49

Обработка запросов клиентов

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 40 / 49

Теорема CAP 6

В распределенной системе невозможно одновременно обеспечитьсвойства

согласованности данных (consistency)доступности (availability)устойчивости к разделению (partition tolerance)

Из трех свойств одновременно можно обеспечить только дваНеизбежный компромисс

Влияние на реализацию распределенного хранилищаВыбор реализуемых свойств на уровне системы (HBase=CP)Возможность выбора свойств пользователем на уровне отдельныхопераций (Cassandra)

6http://en.wikipedia.org/wiki/CAP_theoremО.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 41 / 49

Уровни согласованности

Могут быть указаны для каждой Read/Write-операции

ONEТребуется ответ только от одной реплики

QUORUM (LOCAL_QUORUM, EACH_QUORUM)Требуется ответ от большинства реплик

ALLТребуется ответ от всех реплик

ANY (только для записи)Требуется ответ от любого узла (не обязательно реплики)

Строгая согласованность достигается при(nodes_written + nodes_read) > replication_factorW=1, R=ALL | W=ALL, R=1 | W=Q, R=Q

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 42 / 49

Eventual Consistency

В любом случае гарантируется согласованность в конечном итогеНекоторое время после записи клиенты могут считыватьустаревшие данныеНо, в конечном итоге, записанные данные распространятся по всейсистеме

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 43 / 49

Базовые механизмы восстановления согласованности

См. Amazon Dynamo

Hinted HandoffRead repairAnti-Entropy

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 44 / 49

Атомарные операции и разрешение конфликтов

Атомарными являются только записи в одну строкуНесколько обновлений строки не являются атомарными

В случае неудачной записи, данные могут быть сохранены начасти репликОткаты не производятся

Для разрешения конфликтов используется timestamp,передаваемый клиентом при записи данных

При записи не осуществляется проверка на уникальность row key(UPSERT)

Есть риск случайно перезаписать данные

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 45 / 49

Распределенные счетчики 7

7http://www.datastax.com/wp-content/uploads/2011/07/cassandra_sf_counters.pdf

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 46 / 49

Клиенты

Thrift RPC API

Command-line (cassandra-cli)

Cassandra Query Language (CQL)Python, Java driverscqlsh

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 47 / 49

Cassandra Query Language (CQL)

1 $ cqlsh 103.263.89.126 91602 cqlsh > CREATE KEYSPACE twissandra WITH3 strategy_class = ’NetworkTopologyStrategy ’4 AND strategy_options:DC1 = 3;5

6 cqlsh > USE twissandra;7

8 cqlsh > CREATE COLUMNFAMILY users (9 ... KEY varchar PRIMARY KEY ,

10 ... password varchar ,11 ... gender varchar ,12 ... session_token varchar ,13 ... state varchar ,14 ... birth_year bigint );15

16 cqlsh > INSERT INTO users (KEY , password) VALUES17 (’jsmith ’, ’ch@ngem3a ’) USING TTL 86400;18 cqlsh > SELECT * FROM users WHERE KEY=’jsmith ’;19 u’jsmith ’ | u’password ’,u’ch@ngem3a ’ | u’ttl ’, 86400

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 48 / 49

Cassandra Query Language (CQL)

1 cqlsh > CREATE INDEX state_key ON users (state);2 cqlsh > CREATE INDEX birth_year_key ON users (birth_year );3

4 cqlsh > SELECT * FROM users5 WHERE state=’TX’ AND6 birth_year =’1968’;7 u’user1 ’ | u’birth_year ’ ,1968 | u’gender ’,u’f’ | ...

О.В. Сухорослов ()11 Распределенные хранилища данных 11.05.2012 49 / 49

top related