SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
11 Распределенные хранилища данных

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

                     oleg.sukhoroslov@gmail.com


                            11.05.2012




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

   Введение

   HBase

   Cassandra




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

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




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

   Фиксированная схема, построчное хранение, ACID, SQL,
   абстрагирование от уровня хранения данных
   Изначально не ориентированы на работу с большими объемами
   данных в распределенном режиме (+ с высокими скоростями
   чтения-записи)
   Решения по репликации и распределению существующих РСУБД
        Попытки исправить ситуацию задним числом
        Сложны в установке и сопровождении
        Статическое разбиение данных




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

   Фиксированная схема, построчное хранение, ACID, SQL,
   абстрагирование от уровня хранения данных
   Изначально не ориентированы на работу с большими объемами
   данных в распределенном режиме (+ с высокими скоростями
   чтения-записи)
   Решения по репликации и распределению существующих РСУБД
        Попытки исправить ситуацию задним числом
        Сложны в установке и сопровождении
        Статическое разбиение данных

   Большой частью функциональности приходится жертвовать
        Join, сложные запросы, триггеры, представления, внешние ключи
        и контроль ссылочной целостности
        Становятся очень дорогими в распределенном режиме или вообще
        не работают
        Не удовлетворяют высоким требованиям по скорости
        чтения-записи
   О.В. Сухорослов   11 Распределенные хранилища данных
                         ()                               11.05.2012   3 / 49
Альтернативные решения (aka NoSQL1 )

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

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

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




  1
      http://en.wikipedia.org/wiki/NoSQL_(concept)
        О.В. Сухорослов     11 Распределенные хранилища данных
                                ()                               11.05.2012   4 / 49
Пример: webtable
   Таблица, хранящая загруженные поисковым роботом страницы и
   их атрибуты
         Количество записей в таблице - миллиарды
         Ключом является URL страницы
         Атрибуты - загруженное содержание, язык, MIME-тип,
         обработанный текст, ссылки, изображения...

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




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

       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
О.В. Сухорослов   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-Performance
    Store




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

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




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

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

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




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

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

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

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




    О.В. Сухорослов       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
         Пустые ячейки не хранятся
         Содержимое ячейки является просто массивом байт
         Нет встроенных типов данных




    О.В. Сухорослов   11 Распределенные хранилища данных
                          ()                               11.05.2012   12 / 49
Физическая модель данных
   Каждая ячейка таблицы хранится в виде
         (table, row, family:column, timestamp) -> data
         Пустые ячейки не хранятся
         Содержимое ячейки является просто массивом байт
         Нет встроенных типов данных

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




    О.В. Сухорослов   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 , Timestamp
6                )
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 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 > list
10   TABLE
11   test
12   1 row ( s ) in 0.0390 seconds
13
14   hbase ( main ):003:0 > put ’ test ’ , ’ row1 ’ , ’ data :1 ’ , ’ value1 ’
15   0 row ( s ) in 0.1270 seconds
16
17   hbase ( main ):004:0 > put ’ test ’ , ’ row2 ’ , ’ data :2 ’ , ’ value2 ’
18   0 row ( s ) in 0.0360 seconds
19
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 + 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 seconds
10
11   hbase ( main ):008:0 > drop ’ test ’
12   0 row ( s ) in 1.5430 seconds
13
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 = 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
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             }
20
21             // Drop the table
22             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 и 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
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
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
5
Apache 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
Модель данных

   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 hashing
         token = MD5(row_key), 0 − 2127
         Обеспечивает равномерное распределение данных по узлам
         Рекомендуется использовать по-умолчанию

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




    О.В. Сухорослов      11 Распределенные хранилища данных
                             ()                               11.05.2012   37 / 49
Репликация
   Стратегия репликации определяется для каждого keyspace
         Кол-во реплик (replication factor)
         Распределение реплик по узлам
               SimpleStrategy
               NetworkTopologyStrategy




    О.В. Сухорослов      11 Распределенные хранилища данных
                             ()                               11.05.2012   38 / 49
Gossip
   Децентрализованный (peer-to-peer) протокол, используемый для
   обмена информацией между узлами
         Состояние узла и других известных ему узлов
         Позволяет достаточно быстро распространять информацию между
         узлами

   Seed nodes

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




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




    О.В. Сухорослов   11 Распределенные хранилища данных
                          ()                               11.05.2012   40 / 49
6
Теорема CAP
       В распределенной системе невозможно одновременно обеспечить
       свойства
             согласованности данных (consistency)
             доступности (availability)
             устойчивости к разделению (partition tolerance)

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

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




  6
      http://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_factor
         W=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 Handoff
   Read repair
   Anti-Entropy




    О.В. Сухорослов   11 Распределенные хранилища данных
                          ()                               11.05.2012   44 / 49
Атомарные операции и разрешение конфликтов

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

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

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

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




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




  7
      http://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 drivers
        cqlsh




   О.В. Сухорослов     11 Распределенные хранилища данных
                           ()                               11.05.2012   47 / 49
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 );
15
16   cqlsh > INSERT INTO users ( KEY , password ) VALUES
17            ( ’ 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 users
5         WHERE state = ’ TX ’ AND
6         birth_year = ’1968 ’;
7   u ’ user1 ’ | u ’ birth_year ’ ,1968 | u ’ gender ’ ,u ’f ’ | ...




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

Más contenido relacionado

La actualidad más candente

Основы баз данных
Основы баз данныхОсновы баз данных
Основы баз данных
Evgeny Smirnov
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
7bits
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
7bits
 
Стажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данныхСтажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данных
7bits
 
база данных диски. доработано
база данных диски. доработанобаза данных диски. доработано
база данных диски. доработано
Ирина Платонова
 

La actualidad más candente (11)

базы данных
базы данныхбазы данных
базы данных
 
Основы баз данных
Основы баз данныхОсновы баз данных
Основы баз данных
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
 
Управление данными (литература)
Управление данными (литература)Управление данными (литература)
Управление данными (литература)
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
 
Управление данными. Основы проектирования БД
Управление данными. Основы проектирования БДУправление данными. Основы проектирования БД
Управление данными. Основы проектирования БД
 
Стажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данныхСтажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данных
 
загрузить в DSpace
загрузить в DSpaceзагрузить в DSpace
загрузить в DSpace
 
лекция 2
лекция 2лекция 2
лекция 2
 
Presentation1
Presentation1Presentation1
Presentation1
 
база данных диски. доработано
база данных диски. доработанобаза данных диски. доработано
база данных диски. доработано
 

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

презентация семинар по бд
презентация семинар по бдпрезентация семинар по бд
презентация семинар по бд
anna_pal
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
открытый урок бд
открытый урок бдоткрытый урок бд
открытый урок бд
guest0ffa3f
 
санжировская урок 1 базы данных
санжировская урок 1 базы данныхсанжировская урок 1 базы данных
санжировская урок 1 базы данных
serdj phil
 
Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Фёдор Строк - Базы данных - SQL, ORM, NoSQLФёдор Строк - Базы данных - SQL, ORM, NoSQL
Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Yandex
 
Data base
Data baseData base
Data base
sng
 

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

презентация семинар по бд
презентация семинар по бдпрезентация семинар по бд
презентация семинар по бд
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Baza de date rus
Baza de date rusBaza de date rus
Baza de date rus
 
Relational database testing
Relational database testingRelational database testing
Relational database testing
 
открытый урок бд
открытый урок бдоткрытый урок бд
открытый урок бд
 
санжировская урок 1 базы данных
санжировская урок 1 базы данныхсанжировская урок 1 базы данных
санжировская урок 1 базы данных
 
Hcs3
Hcs3Hcs3
Hcs3
 
10 субд
10 субд10 субд
10 субд
 
базы данных
базы данныхбазы данных
базы данных
 
Lekcia4
Lekcia4Lekcia4
Lekcia4
 
Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Фёдор Строк - Базы данных - SQL, ORM, NoSQLФёдор Строк - Базы данных - SQL, ORM, NoSQL
Фёдор Строк - Базы данных - SQL, ORM, NoSQL
 
Data base
Data baseData base
Data base
 
лекция 9
лекция 9лекция 9
лекция 9
 
Опыт разработки масштабируемого решения по хранению журналов в Hadoop
Опыт разработки масштабируемого решения по хранению журналов в HadoopОпыт разработки масштабируемого решения по хранению журналов в Hadoop
Опыт разработки масштабируемого решения по хранению журналов в Hadoop
 
Практика миграции реляционных баз данных в экосистему Hadoop
Практика миграции реляционных баз данных в экосистему HadoopПрактика миграции реляционных баз данных в экосистему Hadoop
Практика миграции реляционных баз данных в экосистему Hadoop
 
0. odant intro
0. odant intro0. odant intro
0. odant intro
 
Data bases in pictures
Data bases in picturesData bases in pictures
Data bases in pictures
 
Анализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМАнализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМ
 

Más de Yandex

Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 

Más de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

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

  • 1. 11 Распределенные хранилища данных О.В. Сухорослов oleg.sukhoroslov@gmail.com 11.05.2012 О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 1 / 49
  • 2. План лекции Введение HBase Cassandra О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 2 / 49
  • 3. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  • 4. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) Решения по репликации и распределению существующих РСУБД Попытки исправить ситуацию задним числом Сложны в установке и сопровождении Статическое разбиение данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  • 5. Реляционные СУБД Фиксированная схема, построчное хранение, ACID, SQL, абстрагирование от уровня хранения данных Изначально не ориентированы на работу с большими объемами данных в распределенном режиме (+ с высокими скоростями чтения-записи) Решения по репликации и распределению существующих РСУБД Попытки исправить ситуацию задним числом Сложны в установке и сопровождении Статическое разбиение данных Большой частью функциональности приходится жертвовать Join, сложные запросы, триггеры, представления, внешние ключи и контроль ссылочной целостности Становятся очень дорогими в распределенном режиме или вообще не работают Не удовлетворяют высоким требованиям по скорости чтения-записи О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 3 / 49
  • 6. Альтернативные решения (aka NoSQL1 ) Изначально имеют распределенную архитектуру, ориентированную на горизонтальное масштабирование путем добавления новых узлов Нарушают классические принципы (нормализация данных, фиксированная схема, ACID) и отказываются от части функциональности РСУБД (join, вторичные индексы) Для большого класса задач позволяют делать то, чего не могут РСУБД Хранить и обеспечивать быстрый, масштабируемый доступ к очень большим таблицам на кластерах из массовых серверов 1 http://en.wikipedia.org/wiki/NoSQL_(concept) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 4 / 49
  • 7. Пример: webtable Таблица, хранящая загруженные поисковым роботом страницы и их атрибуты Количество записей в таблице - миллиарды Ключом является URL страницы Атрибуты - загруженное содержание, язык, MIME-тип, обработанный текст, ссылки, изображения... Работа с данными таблицы Массовая оффлайн обработка и аналитика (batch, MapReduce) Запись данных роботом (random access) Выдача закэшированного содержимого страниц поиском (random access) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 5 / 49
  • 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. О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 7 / 49
  • 10. HBase Распределенная “база данных” для Hadoop Ориентирована на случайный доступ к большим данным в режиме реального времени Реализована по образу Google Bigtable Работает поверх HDFS Проект Apache (май 2010) http://hbase.apache.org/ Пользователи Facebook, Twitter, Yahoo! ... О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 8 / 49
  • 11. Точнее... Distributed, Versioned, Column-Oriented, High-Availability, High-Performance Store О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 9 / 49
  • 12. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  • 13. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  • 14. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок Колонки сгруппированы в “семейства” (column family) Семейства колонок должны быть заданы при создании таблицы Все колонки семейства имеют общий префикс content:data, content:language, content:type Новые колонки внутри семейства можно создавать в любой момент О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  • 15. Концептуальная модель данных Поименованные таблицы, в строках которых хранятся данные Каждая строка таблицы имеет Ключ (primary key) Произвольный набор колонок Колонки сгруппированы в “семейства” (column family) Семейства колонок должны быть заданы при создании таблицы Все колонки семейства имеют общий префикс content:data, content:language, content:type Новые колонки внутри семейства можно создавать в любой момент Внутри ячеек таблицы хранятся данные Поддерживается хранение несколько версий данных По умолчанию версия идентифицируется с помощью времени записи (timestamp) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 10 / 49
  • 16. Концептуальная модель данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 11 / 49
  • 17. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  • 18. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных Строки таблицы отсортированы по ключу О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  • 19. Физическая модель данных Каждая ячейка таблицы хранится в виде (table, row, family:column, timestamp) -> data Пустые ячейки не хранятся Содержимое ячейки является просто массивом байт Нет встроенных типов данных Строки таблицы отсортированы по ключу Строки таблицы разбиты вертикально на семейства колонок Данные семейств колонок хранятся вместе (непрерывно на диске), в отсортированном порядке по rowid, column, timestamp О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 12 / 49
  • 20. Физическая модель данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 13 / 49
  • 21. Структура данных 1 SortedMap ( 2 RowKey , List ( 3 SortedMap ( 4 Column , List ( 5 Value , Timestamp 6 ) 7 ) 8 ) 9 ) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 14 / 49
  • 22. Row-oriented vs Column-oriented О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 15 / 49
  • 23. Пример О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 16 / 49
  • 24. Распределеное хранение данных О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 17 / 49
  • 25. Распределение данных в HBase Разбиение данных Таблицы разбиваются горизонтально на регионы [startkey , endkey ) В самом начале таблица состоит из одного региона По мере увеличения размера таблицы происходит автоматическое разбиение данных на новые регионы Регионы распределяются между серверами HBase-кластера Репликация данных Данные регионов хранятся и реплицируются в HDFS О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 18 / 49
  • 26. Архитектура HBase-кластера О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 19 / 49
  • 27. Подробности О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 20 / 49
  • 28. Доступ к данным Создание и удаление таблиц, колонок Чтение данных (Get, Scan) По ключу: все или определенные колонки для строки с данным ключом По времени: самое позднее значение, определенный момент времени, N значений, все значения По диапазону: итератор по строкам (Scanner) Начальный и конечный ключи, набор колонок, фильтр Запись данных (Put) Атомарные изменения одной строки (row lock) Multi-row locking (new) О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 21 / 49
  • 29. Клиентские интерфейсы Интерфейс командной строки HBase Shell Программный интерфейс Java API Удаленные программные интерфейсы Avro, REST, Thrift Web-интерфейс О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 22 / 49
  • 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 > list 10 TABLE 11 test 12 1 row ( s ) in 0.0390 seconds 13 14 hbase ( main ):003:0 > put ’ test ’ , ’ row1 ’ , ’ data :1 ’ , ’ value1 ’ 15 0 row ( s ) in 0.1270 seconds 16 17 hbase ( main ):004:0 > put ’ test ’ , ’ row2 ’ , ’ data :2 ’ , ’ value2 ’ 18 0 row ( s ) in 0.0360 seconds 19 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
  • 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 seconds 10 11 hbase ( main ):008:0 > drop ’ test ’ 12 0 row ( s ) in 1.5430 seconds 13 14 hbase ( main ):009:0 > exit О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 24 / 49
  • 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. 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 } 20 21 // Drop the table 22 admin . disableTable ( tablename ); 23 admin . deleteTable ( tablename ); 24 } 25 } О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 26 / 49
  • 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. 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. HBase vs HDFS? О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 29 / 49
  • 37. Область применения HBase Да Random read/write Большое кол-во операций/сек + большой объем данных Часто повторяющиеся запросы Нет Append + read all data Уникальные запросы (ad-hoc analytics) Данные могут быть размещены на одном сервере О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 30 / 49
  • 38. О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 31 / 49
  • 39. 5 Apache 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. Модель данных Keyspace = база данных (схема) Column family = таблица статические / динамические О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 33 / 49
  • 41. Типы данных Validator Определяет тип данных для ключей и значений колонок Comparator Определяет тип данных для имен колонок Определяет порядок сортировки (и хранения) колонок О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 34 / 49
  • 42. Индексы Primary По значениям ключей Строится автоматически Secondary По значениям колонок Создается по требованию О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 35 / 49
  • 43. Распределение данных между узлами О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 36 / 49
  • 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. Репликация Стратегия репликации определяется для каждого keyspace Кол-во реплик (replication factor) Распределение реплик по узлам SimpleStrategy NetworkTopologyStrategy О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 38 / 49
  • 46. Gossip Децентрализованный (peer-to-peer) протокол, используемый для обмена информацией между узлами Состояние узла и других известных ему узлов Позволяет достаточно быстро распространять информацию между узлами Seed nodes Обнаружение отказов О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 39 / 49
  • 47. Обработка запросов клиентов О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 40 / 49
  • 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. Уровни согласованности Могут быть указаны для каждой 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. Eventual Consistency В любом случае гарантируется согласованность в конечном итоге Некоторое время после записи клиенты могут считывать устаревшие данные Но, в конечном итоге, записанные данные распространятся по всей системе О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 43 / 49
  • 51. Базовые механизмы восстановления согласованности См. Amazon Dynamo Hinted Handoff Read repair Anti-Entropy О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 44 / 49
  • 52. Атомарные операции и разрешение конфликтов Атомарными являются только записи в одну строку Несколько обновлений строки не являются атомарными В случае неудачной записи, данные могут быть сохранены на части реплик Откаты не производятся Для разрешения конфликтов используется timestamp, передаваемый клиентом при записи данных При записи не осуществляется проверка на уникальность row key (UPSERT) Есть риск случайно перезаписать данные О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 45 / 49
  • 53. 7 Распределенные счетчики 7 http://www.datastax.com/wp-content/uploads/2011/07/cassandra_sf_counters.pdf О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 46 / 49
  • 54. Клиенты Thrift RPC API Command-line (cassandra-cli) Cassandra Query Language (CQL) Python, Java drivers cqlsh О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 47 / 49
  • 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 ); 15 16 cqlsh > INSERT INTO users ( KEY , password ) VALUES 17 ( ’ 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. 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 users 5 WHERE state = ’ TX ’ AND 6 birth_year = ’1968 ’; 7 u ’ user1 ’ | u ’ birth_year ’ ,1968 | u ’ gender ’ ,u ’f ’ | ... О.В. Сухорослов 11 Распределенные хранилища данных () 11.05.2012 49 / 49