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

4,275 views

Published on

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

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,275
On SlideShare
0
From Embeds
0
Number of Embeds
977
Actions
Shares
0
Downloads
142
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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

  1. 1. 11 Распределенные хранилища данных О.В. Сухорослов oleg.sukhoroslov@gmail.com 11.05.2012О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 1 / 49
  2. 2. План лекции Введение HBase Cassandra О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 2 / 49
  3. 3. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  4. 4. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) Решения по репликации и распределению существующих РСУБД Попытки исправить ситуацию задним числом Сложны в установке и сопровождении Статическое разбиение данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  5. 5. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) Решения по репликации и распределению существующих РСУБД Попытки исправить ситуацию задним числом Сложны в установке и сопровождении Статическое разбиение данных Большой частью функциональности приходится жертвовать Join, сложные запросы, триггеры, представления, внешние ключи и контроль ссылочной целостности Становятся очень дорогими в распределенном режиме или вообще не работают Не удовлетворяют высоким требованиям по скорости чтения-записи О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  6. 6. Альтернативные решения (aka NoSQL1 ) Изначально имеют распределенную архитектуру, ориентированную на горизонтальное масштабирование путем добавления новых узлов Нарушают классические принципы (нормализация данных, фиксированная схема, ACID) и отказываются от части функциональности РСУБД (join, вторичные индексы) Для большого класса задач позволяют делать то, чего не могут РСУБД Хранить и обеспечивать быстрый, масштабируемый доступ к очень большим таблицам на кластерах из массовых серверов 1 http://en.wikipedia.org/wiki/NoSQL_(concept) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 4 / 49
  7. 7. Пример: webtable Таблица, хранящая загруженные поисковым роботом страницы и их атрибуты Количество записей в таблице - миллиарды Ключом является URL страницы Атрибуты - загруженное содержание, язык, MIME-тип, обработанный текст, ссылки, изображения... Работа с данными таблицы Массовая оффлайн обработка и аналитика (batch, MapReduce) Запись данных роботом (random access) Выдача закэшированного содержимого страниц поиском (random access) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 5 / 49
  8. 8. Примеры распределенных хранилищ BigTable (Google)2 Dynamo (Amazon)3 HBase Cassandra Voldemort Riak Hypertable MongoDB Redis ... Column vs Key-value storage 2 http://labs.google.com/papers/bigtable.html 3 http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 6 / 49
  9. 9. О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 7 / 49
  10. 10. HBase Распределенная “база данных” для Hadoop Ориентирована на случайный доступ к большим данным в режиме реального времени Реализована по образу Google Bigtable Работает поверх HDFS Проект Apache (май 2010) http://hbase.apache.org/ Пользователи Facebook, Twitter, Yahoo! ... О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 8 / 49
  11. 11. Точнее... Distributed, Versioned, Column-Oriented, High-Availability, High-Performance Store О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 9 / 49
  12. 12. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  13. 13. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  14. 14. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок Колонки сгруппированы в “семейства” (column family) Семейства колонок должны быть заданы при создании таблицы Все колонки семейства имеют общий префикс content:data, content:language, content:type Новые колонки внутри семейства можно создавать в любой момент О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  15. 15. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок Колонки сгруппированы в “семейства” (column family) Семейства колонок должны быть заданы при создании таблицы Все колонки семейства имеют общий префикс content:data, content:language, content:type Новые колонки внутри семейства можно создавать в любой момент Внутри ячеек таблицы хранятся данные Поддерживается хранение несколько версий данных По умолчанию версия идентифицируется с помощью времени записи (timestamp) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  16. 16. Концептуальная модель данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 11 / 49
  17. 17. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  18. 18. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных Строки таблицы отсортированы по ключу О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  19. 19. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных Строки таблицы отсортированы по ключу Строки таблицы разбиты вертикально на семейства колонок Данные семейств колонок хранятся вместе (непрерывно на диске), в отсортированном порядке по rowid, column, timestamp О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  20. 20. Физическая модель данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 13 / 49
  21. 21. Структура данных1 SortedMap (2 RowKey , List (3 SortedMap (4 Column , List (5 Value , Timestamp6 )7 )8 )9 ) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 14 / 49
  22. 22. Row-oriented vs Column-oriented О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 15 / 49
  23. 23. Пример О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 16 / 49
  24. 24. Распределеное хранение данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 17 / 49
  25. 25. Распределение данных в HBase Разбиение данных Таблицы разбиваются горизонтально на регионы [startkey , endkey ) В самом начале таблица состоит из одного региона По мере увеличения размера таблицы происходит автоматическое разбиение данных на новые регионы Регионы распределяются между серверами HBase-кластера Репликация данных Данные регионов хранятся и реплицируются в HDFS О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 18 / 49
  26. 26. Архитектура HBase-кластера О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 19 / 49
  27. 27. Подробности О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 20 / 49
  28. 28. Доступ к данным Создание и удаление таблиц, колонок Чтение данных (Get, Scan) По ключу: все или определенные колонки для строки с данным ключом По времени: самое позднее значение, определенный момент времени, N значений, все значения По диапазону: итератор по строкам (Scanner) Начальный и конечный ключи, набор колонок, фильтр Запись данных (Put) Атомарные изменения одной строки (row lock) Multi-row locking (new) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 21 / 49
  29. 29. Клиентские интерфейсы Интерфейс командной строки HBase Shell Программный интерфейс Java API Удаленные программные интерфейсы Avro, REST, Thrift Web-интерфейс О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 22 / 49
  30. 30. HBase Shell 1 hadoop2 -00:~ $ hbase shell 2 HBase Shell ; enter ’ help < RETURN > ’ for list of supported commands . 3 Type " exit < RETURN >" to leave the HBase Shell 4 Version 0.90.1 - cdh3u0 , r , Fri Mar 25 16:10:51 PDT 2011 5 6 hbase ( main ):001:0 > create ’ test ’ , ’ data ’ 7 0 row ( s ) in 12.5240 seconds 8 9 hbase ( main ):002:0 > list10 TABLE11 test12 1 row ( s ) in 0.0390 seconds1314 hbase ( main ):003:0 > put ’ test ’ , ’ row1 ’ , ’ data :1 ’ , ’ value1 ’15 0 row ( s ) in 0.1270 seconds1617 hbase ( main ):004:0 > put ’ test ’ , ’ row2 ’ , ’ data :2 ’ , ’ value2 ’18 0 row ( s ) in 0.0360 seconds1920 hbase ( main ):005:0 > put ’ test ’ , ’ row3 ’ , ’ data :3 ’ , ’ value3 ’21 0 row ( s ) in 0.0310 seconds О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 23 / 49
  31. 31. HBase Shell 1 hbase ( main ):006:0 > scan ’ test ’ 2 ROW COLUMN + CELL 3 row1 column = data :1 , timestamp =1303416932470 , value = value1 4 row2 column = data :2 , timestamp =1303416939804 , value = value2 5 row3 column = data :3 , timestamp =1303416945399 , value = value3 6 3 row ( s ) in 0.2130 seconds 7 8 hbase ( main ):007:0 > disable ’ test ’ 9 0 row ( s ) in 12.1800 seconds1011 hbase ( main ):008:0 > drop ’ test ’12 0 row ( s ) in 1.5430 seconds1314 hbase ( main ):009:0 > exit О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 24 / 49
  32. 32. Java API (org.apache.hadoop.hbase.client) 1 public class ExampleClient { 2 public static void main ( String [] args ) throws IOException { 3 Configuration config = HBa se Co nfi gura tion . create (); 4 5 // Create table 6 HBaseAdmin admin = new HBaseAdmin ( config ); 7 HTableDescriptor htd = new HTableDescriptor ( " test " ); 8 HCol umnDescri ptor hcd = new HColumnDescriptor ( " data " ); 9 htd . addFamily ( hcd );10 admin . createTable ( htd );11 byte [] tablename = htd . getName (); О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 25 / 49
  33. 33. Java API (org.apache.hadoop.hbase.client) 1 // Run some operations -- a put , a get , and a scan 2 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 }2021 // Drop the table22 admin . disableTable ( tablename );23 admin . deleteTable ( tablename );24 }25 } О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 26 / 49
  34. 34. HBase и Hadoop MapReduce Пакет org.apache.hadoop.hbase.mapreduce Форматы данных TableInputFormat один map на каждый регион таблицы TableOutputFormat Базовые классы Map и Reduce TableMapper TableReducer Утилита TableMapReduceUtil Примеры использования HBASE_DIST/src/examples/mapreduce CellCounter4 4 http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 27 / 49
  35. 35. HBase vs СУБД СУБД HBase Data layout Row-oriented Column-oriented Транзакции Multi-row ACID Single row only Язык запросов SQL get/put/scan/... Индексы Произвольные колонки Ключи записей Максимальный объем Терабайты 1PB Чтение/Запись 1K запросов/сек 1M запросов/сек О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 28 / 49
  36. 36. HBase vs HDFS? О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 29 / 49
  37. 37. Область применения HBase Да Random read/write Большое кол-во операций/сек + большой объем данных Часто повторяющиеся запросы Нет Append + read all data Уникальные запросы (ad-hoc analytics) Данные могут быть размещены на одном сервере О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 30 / 49
  38. 38. О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 31 / 49
  39. 39. 5Apache Cassandra Распределенное хранилище с моделью данных по образу BigTable и децентрализованной архитектурой по образу Dynamo Первоначальная разработка - Inbox Search @ Facebook, при участии авторов Amazon Dynamo 2008 - open source 2010 - проект Apache Software Foundation 2010 - Facebook перешел на использование HBase 5 http://cassandra.apache.org/ О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 32 / 49
  40. 40. Модель данных Keyspace = база данных (схема) Column family = таблица статические / динамические О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 33 / 49
  41. 41. Типы данных Validator Определяет тип данных для ключей и значений колонок Comparator Определяет тип данных для имен колонок Определяет порядок сортировки (и хранения) колонок О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 34 / 49
  42. 42. Индексы Primary По значениям ключей Строится автоматически Secondary По значениям колонок Создается по требованию О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 35 / 49
  43. 43. Распределение данных между узлами О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 36 / 49
  44. 44. Стратегия распределения данных Определяется на уровне всего кластера Random Patitioner Использует стратегию consistent hashing token = MD5(row_key), 0 − 2127 Обеспечивает равномерное распределение данных по узлам Рекомендуется использовать по-умолчанию Ordered Partitioner Данные хранятся в отсортированном порядке token = HEX(row_key_prefix) Позволяет делать range scans Сложнее в настройке и администрировании О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 37 / 49
  45. 45. Репликация Стратегия репликации определяется для каждого keyspace Кол-во реплик (replication factor) Распределение реплик по узлам SimpleStrategy NetworkTopologyStrategy О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 38 / 49
  46. 46. Gossip Децентрализованный (peer-to-peer) протокол, используемый для обмена информацией между узлами Состояние узла и других известных ему узлов Позволяет достаточно быстро распространять информацию между узлами Seed nodes Обнаружение отказов О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 39 / 49
  47. 47. Обработка запросов клиентов О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 40 / 49
  48. 48. 6Теорема CAP В распределенной системе невозможно одновременно обеспечить свойства согласованности данных (consistency) доступности (availability) устойчивости к разделению (partition tolerance) Из трех свойств одновременно можно обеспечить только два Неизбежный компромисс Влияние на реализацию распределенного хранилища Выбор реализуемых свойств на уровне системы (HBase=CP) Возможность выбора свойств пользователем на уровне отдельных операций (Cassandra) 6 http://en.wikipedia.org/wiki/CAP_theorem О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 41 / 49
  49. 49. Уровни согласованности Могут быть указаны для каждой Read/Write-операции ONE Требуется ответ только от одной реплики QUORUM (LOCAL_QUORUM, EACH_QUORUM) Требуется ответ от большинства реплик ALL Требуется ответ от всех реплик ANY (только для записи) Требуется ответ от любого узла (не обязательно реплики) Строгая согласованность достигается при (nodes_written + nodes_read) > replication_factor W=1, R=ALL | W=ALL, R=1 | W=Q, R=Q О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 42 / 49
  50. 50. Eventual Consistency В любом случае гарантируется согласованность в конечном итоге Некоторое время после записи клиенты могут считывать устаревшие данные Но, в конечном итоге, записанные данные распространятся по всей системе О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 43 / 49
  51. 51. Базовые механизмы восстановления согласованности См. Amazon Dynamo Hinted Handoff Read repair Anti-Entropy О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 44 / 49
  52. 52. Атомарные операции и разрешение конфликтов Атомарными являются только записи в одну строку Несколько обновлений строки не являются атомарными В случае неудачной записи, данные могут быть сохранены на части реплик Откаты не производятся Для разрешения конфликтов используется timestamp, передаваемый клиентом при записи данных При записи не осуществляется проверка на уникальность row key (UPSERT) Есть риск случайно перезаписать данные О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 45 / 49
  53. 53. 7Распределенные счетчики 7 http://www.datastax.com/wp-content/uploads/2011/07/cassandra_sf_counters.pdf О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 46 / 49
  54. 54. Клиенты Thrift RPC API Command-line (cassandra-cli) Cassandra Query Language (CQL) Python, Java drivers cqlsh О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 47 / 49
  55. 55. Cassandra Query Language (CQL) 1 $ cqlsh 103.263.89.126 9160 2 cqlsh > CREATE KEYSPACE twissandra WITH 3 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 );1516 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
  56. 56. Cassandra Query Language (CQL)1 cqlsh > CREATE INDEX state_key ON users ( state );2 cqlsh > CREATE INDEX birth_year_key ON users ( birth_year );34 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

×