Komarov borba za-miesto-urfu_2013

456 views
348 views

Published on

Иван Комаров на Я.Студенте в УрФУ.
Борьба за место в MapReduce

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
456
On SlideShare
0
From Embeds
0
Number of Embeds
104
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Komarov borba za-miesto-urfu_2013

  1. 1. Борьба за место в MapReduce Иван Комаров Яндекс 26 ноября 2013 года
  2. 2. Большие данные Суммарный объём данных, хранящихся в MapReduce в Яндексе, — около 15 петабайт. Тысячи машин. Несколько терабайт данных на каждой. Сотни разработчиков, которые ежедневно работают с этими данными.
  3. 3. Примеры данных Пользовательские логи 8 терабайт за день. Поисковые запросы ко всем сервисам Яндекса. Показанные результаты. Клики по результатам. Twitter Firehose 1,2 терабайт за день — все твиты в мире с дополнительной метаинформацией. Логи поискового паука 2 терабайта за день — информация о том, какие страницы были скачаны (без содержимого самих страниц).
  4. 4. Нужно больше золота . . . цена вопроса — шоколадка или немного квоты на MapReduce. (из рабочей переписки) Что делать, если места не хватает? Закупать дополнительные машины. Просить разработчиков избавиться от ненужных данных. Хранить данные более компактно.
  5. 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, . . .).
  6. 6. План лекции
  7. 7. Часть 1 Сжатие метаданных
  8. 8. Исходные требования Алгоритм жмёт лучше, чем алгоритмы сжатия общего назначения. Время записи несжатых данных > время сжатия + время записи сжатых данных.
  9. 9. Предварительные преобразования Двойное дельта-кодирование Переходим от значений к разностям между соседними значениями. ∆0 24756436, 24756486, 24756531, 24756577, 24756584, 24756630, 24756680 ∆1 50, 45, 46, 7, 46, 50 ∆2 -5, 1, -39, 39, 4 Зигзаг-кодирование Биекция Z → N (для удобства дальнейших преобразований). 0, −1, 1, −2, 2, −3, 3 . . . → 1, 2, 3, 4, 5, 6, 7 . . .
  10. 10. γ-кодирование Элиаса Унарное кодирование 1 → 1, 5 → 00001, 7 → 0000001 Бинарное кодирование 1 → 1, 5 → 101, 7 → 111 (почти) γ-кодирование Элиаса 1 → 11, 5 → 001101, 7 → 001111, 16 → 0000110000
  11. 11. γ-кодирование Элиаса Дополнительное требование Последовательные записи с одинаковыми длинами должны кодироваться максимально экономно. Наблюдение Первый бит синей части разница длин зигзаг 0 1 2 5 3 7 -8 16 всегда равен почти γ 11 001101 001111 0000110000 единице. γ 1 00101 00111 000010000
  12. 12. δ-кодирование Элиаса Наблюдение Красную часть можно закодировать γ-кодированием. γ l(γ) δ l(δ) 1 1 1 1 1 5 001 01 5 01 1 01 5 7 001 11 5 01 1 11 5 16 00001 0000 9 001 01 0000 9 200 00000001 1001000 15 0001 000 1001000 14 1024 00000000001 0000000000 21 0001 011 0000000000 17 2048 000000000001 00000000000 23 0001 100 00000000000 18 8000 0000000000001 111101000000 25 0001 101 111101000000 19
  13. 13. ω-кодирование Элиаса Наблюдение γ-кодирование можно применять рекурсивно. Главное — вовремя остановиться!
  14. 14. Коды Голомба–Райса Дополнительные условия Длина ключа ограничена сверху 4 килобайтами. Длины ключей разнятся на сотни байт. Кодирование числа n Выбираем параметр M = 2k (например, M = 256). Записываем q = n M + 1 в унарном коде. Далее в k битах записываем r = n mod M в бинарном коде. Пример 1000 → 000111101000 (q = 3, r = 232)
  15. 15. Коды Голомба–Райса δ l(δ) GR l(GR) 100 001 11 100100 11 1 01100100 9 200 0001 000 1001000 14 1 11001000 9 300 0001 001 00101100 15 01 00101100 10 500 0001 001 11110100 15 01 11110100 10 1000 0001 010 111101000 16 0001 11101000 12 2000 0001 011 1111010000 17 00000001 11010000 16
  16. 16. Результаты Чем больше мы знаем о природе наших данных, тем эффективнее мы можем их сжимать. Небольшой, но видимый выигрыш места почти бесплатно.
  17. 17. Часть 2 Избавление от тройной репликации
  18. 18. Кодирование Рида–Соломона Идея Разобьём каждый чанк на n частей, каждую часть положим на отдельную машину. Создадим дополнительные k восстанавливающих частей и тоже разложим на отдельные машины. Если не более k из n + k частей пропадут, мы сможем по тому, что осталось, восстановить исходные n частей. Результат Если, например, k = n , то мы получаем двукратную экономию 2 по сравнению с тройной репликацией. На практике n = 6, k = 3.
  19. 19. Конечные поля Для простоты будем считать, что каждая часть — это один байт. GF (28 ) Чтобы Рид с Соломоном работали, нужно, чтобы байты образовывали поле. Конечные поля GF (p n ) существуют для любого простого p и для любого n. В GF (28 ) можно очень быстро складывать и умножать.
  20. 20. Матрица Вандермонда αi — i-й элемент GF (28 ).  1 α1 1 α2  1 α3  . . . . . . 2 α1 2 α2 2 α3 ··· ··· ··· . . . 2 1 αn+m αn+m · · · n−1  α1 n−1 α2   n−1 α3     n−1 αn+m Любая квадратная подматрица матрицы Вандермонда обратима, поскольку имеет ненулевой определитель. (αj − αi ) Vn = 1≤i<j≤n
  21. 21. Восстановление после пропажи частей di – исходные байты, ci – востанавливающие байты. AD = E  1 0 . . .       0  an+1,1  an+2,1   .  . . 0 1 . . . ··· ··· 0 ··· an+1,2 · · · an+2,2 · · · . . . an+k,1 an+k,2 · · ·   d1  d2        .  d1 .     . 1  d2  dn  × =  . an+1,n   .   c1  .     c2   an+2,n  dn   . .  .  . . . 0 0 . . . an+k,n  ck Наблюдение Поскольку после удаления любых k строк из A получившаяся матрица будет обратима, то мы можем восстановить D.
  22. 22. Результаты Двукратная экономия места. Даётся далеко не бесплатно: работа с данными становится менее удобной и быстрой.
  23. 23. Вопросы?

×