komarov borba za-miesto-urfu_2013

Post on 15-Jun-2015

238 Views

Category:

Education

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Борьба за место в MapReduce

Иван Комаров

Яндекс

26 ноября 2013 года

Большие данные

Суммарный объём данных, хранящихся в MapReduce вЯндексе, — около 15 петабайт.

I Тысячи машин.I Несколько терабайт данных на каждой.I Сотни разработчиков, которые ежедневно работают с

этими данными.

Примеры данных

Пользовательские логи8 терабайт за день.

I Поисковые запросы ко всем сервисам Яндекса.I Показанные результаты.I Клики по результатам.

Twitter Firehose1,2 терабайт за день — все твиты в мире с дополнительнойметаинформацией.

Логи поискового паука2 терабайта за день — информация о том, какие страницыбыли скачаны (без содержимого самих страниц).

Нужно больше золота

. . . цена вопроса — шоколадка или немного квотына MapReduce. (из рабочей переписки)

Что делать, если места не хватает?I Закупать дополнительные машины.I Просить разработчиков избавиться от ненужных данных.I Хранить данные более компактно.

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

I Пользователи работают с таблицами.I Каждая таблица — это набор ключей и значений.

вконтакте http://vk.com; https://twitter.com/vkontakteновости http://ria.ru; http://lenta.ru, http://vesti.ruпогода http://pogoda.yandex.ru; http://weather.rambler.ru

I Данные в таблице уже пожаты каким-то алгоритмомобщего назначения (lzma, zlib, . . .).

План лекции

Часть 1

Сжатие метаданных

Исходные требования

I Алгоритм жмёт лучше, чем алгоритмы сжатия общегоназначения.

I Время записи несжатых данных > время сжатия + времязаписи сжатых данных.

Предварительные преобразования

Двойное дельта-кодированиеПереходим от значений к разностям между соседнимизначениями.

∆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 . . . 7→ 1, 2, 3, 4, 5, 6, 7 . . .

γ-кодирование Элиаса

Унарное кодирование

1 7→ 1, 5 7→ 00001, 7 7→ 0000001

Бинарное кодирование

1 7→ 1, 5 7→ 101, 7 7→ 111

(почти) γ-кодирование Элиаса

1 7→ 11, 5 7→ 001101, 7 7→ 001111, 16 7→ 0000110000

γ-кодирование Элиаса

Дополнительное требованиеПоследовательные записи с одинаковыми длинами должныкодироваться максимально экономно.

НаблюдениеПервый бит синей части всегда равен единице.разница длин зигзаг почти γ γ

0 1 11 12 5 001101 001013 7 001111 00111-8 16 0000110000 000010000

δ-кодирование Элиаса

НаблюдениеКрасную часть можно закодировать γ-кодированием.

γ 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

ω-кодирование Элиаса

Наблюдениеγ-кодирование можно применять рекурсивно.Главное — вовремя остановиться!

Коды Голомба–Райса

Дополнительные условия

I Длина ключа ограничена сверху 4 килобайтами.I Длины ключей разнятся на сотни байт.

Кодирование числа n

I Выбираем параметр M = 2k (например, M = 256).I Записываем q =

⌊nM

⌋+ 1 в унарном коде.

I Далее в k битах записываем r = n mod M в бинарномкоде.

Пример

1000 7→ 000111101000

(q = 3, r = 232)

Коды Голомба–Райса

δ 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

Результаты

I Чем больше мы знаем о природе наших данных, темэффективнее мы можем их сжимать.

I Небольшой, но видимый выигрыш места почти бесплатно.

Часть 2

Избавление от тройнойрепликации

Кодирование Рида–Соломона

Идея

I Разобьём каждый чанк на n частей, каждую частьположим на отдельную машину.

I Создадим дополнительные k восстанавливающих частей итоже разложим на отдельные машины.

I Если не более k из n + k частей пропадут, мы сможем потому, что осталось, восстановить исходные n частей.

РезультатЕсли, например, k = n

2 , то мы получаем двукратную экономиюпо сравнению с тройной репликацией. На практике n = 6, k = 3.

Конечные поля

Для простоты будем считать, что каждая часть — это одинбайт.

GF (28)

I Чтобы Рид с Соломоном работали, нужно, чтобы байтыобразовывали поле.

I Конечные поля GF (pn) существуют для любого простого pи для любого n.

I В GF (28) можно очень быстро складывать и умножать.

Матрица Вандермонда

αi — i-й элемент GF (28).1 α1 α2

1 · · · αn−11

1 α2 α22 · · · αn−1

2

1 α3 α23 · · · αn−1

3...

......

1 αn+m α2n+m · · · αn−1

n+m

Любая квадратная подматрица матрицы Вандермондаобратима, поскольку имеет ненулевой определитель.

Vn =∏

1≤i<j≤n

(αj − αi )

Восстановление после пропажи частей

di – исходные байты, ci – востанавливающие байты.

AD = E

1 0 · · · 00 1 · · · 0...

......

0 0 · · · 1an+1,1 an+1,2 · · · an+1,n

an+2,1 an+2,2 · · · an+2,n...

......

an+k,1 an+k,2 · · · an+k,n

×

d1d2...dn

=

d1d2...dnc1c2...ck

НаблюдениеПоскольку после удаления любых k строк из A получившаясяматрица будет обратима, то мы можем восстановить D.

Результаты

I Двукратная экономия места.I Даётся далеко не бесплатно: работа с данными становится

менее удобной и быстрой.

Вопросы?

top related