Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Komarov borba za-miesto-urfu_2013
1. Борьба за место в MapReduce
Иван Комаров
Яндекс
26 ноября 2013 года
2. Большие данные
Суммарный объём данных, хранящихся в MapReduce в
Яндексе, — около 15 петабайт.
Тысячи машин.
Несколько терабайт данных на каждой.
Сотни разработчиков, которые ежедневно работают с
этими данными.
3. Примеры данных
Пользовательские логи
8 терабайт за день.
Поисковые запросы ко всем сервисам Яндекса.
Показанные результаты.
Клики по результатам.
Twitter Firehose
1,2 терабайт за день — все твиты в мире с дополнительной
метаинформацией.
Логи поискового паука
2 терабайта за день — информация о том, какие страницы
были скачаны (без содержимого самих страниц).
4. Нужно больше золота
. . . цена вопроса — шоколадка или немного квоты
на MapReduce.
(из рабочей переписки)
Что делать, если места не хватает?
Закупать дополнительные машины.
Просить разработчиков избавиться от ненужных данных.
Хранить данные более компактно.
5. Модель данных
Пользователи работают с таблицами.
Каждая таблица — это набор ключей и значений.
вконтакте http://vk.com; https://twitter.com/vkontakte
новости
http://ria.ru; http://lenta.ru, http://vesti.ru
погода
http://pogoda.yandex.ru; http://weather.rambler.ru
Данные в таблице уже пожаты каким-то алгоритмом
общего назначения (lzma, zlib, . . .).
8. Исходные требования
Алгоритм жмёт лучше, чем алгоритмы сжатия общего
назначения.
Время записи несжатых данных > время сжатия + время
записи сжатых данных.
14. Коды Голомба–Райса
Дополнительные условия
Длина ключа ограничена сверху 4 килобайтами.
Длины ключей разнятся на сотни байт.
Кодирование числа n
Выбираем параметр M = 2k (например, M = 256).
Записываем q =
n
M
+ 1 в унарном коде.
Далее в k битах записываем r = n mod M в бинарном
коде.
Пример
1000 → 000111101000
(q = 3, r = 232)
18. Кодирование Рида–Соломона
Идея
Разобьём каждый чанк на n частей, каждую часть
положим на отдельную машину.
Создадим дополнительные k восстанавливающих частей и
тоже разложим на отдельные машины.
Если не более k из n + k частей пропадут, мы сможем по
тому, что осталось, восстановить исходные n частей.
Результат
Если, например, k = n , то мы получаем двукратную экономию
2
по сравнению с тройной репликацией. На практике n = 6, k = 3.
19. Конечные поля
Для простоты будем считать, что каждая часть — это один
байт.
GF (28 )
Чтобы Рид с Соломоном работали, нужно, чтобы байты
образовывали поле.
Конечные поля GF (p n ) существуют для любого простого p
и для любого n.
В GF (28 ) можно очень быстро складывать и умножать.