2. Обработка данных поверх множества
серверов:
● удобная модель автоматического
распределения данных и вычислений по
серверам
● отказоустойчивость
● минимизация перемещения данных по сети
Big Data
3. ● Hadoop Distributed File System (HDFS)
— распределяет данные
● Hadoop MapReduce — распределяет
вычисления
Hadoop
4. ● распределенная файловая система
● хранит файлы блоками по 128МБ
● распределяет отдельные блоки по разным
серверам
● реплицирует каждый блок 3 раза
HDFS
15. Плюсы
● Простая масштабируемая модель
вычислений
● Эффективность за счет больших батчей и
локальности данных
● Отказоустойчивый
Минусы
● Все пишется на диск
● Слишком низкоуровневый
● Невозможность итеративных алгоритмов
● Невозможность потоковой обработки
18. Потоковый Word Count
class RandomSentence < RedStorm::DSL::Spout
on_init { @sentences = [...] }
on_send { @sentences.sample }
end
19. Потоковый Word Count
class RandomSentence < RedStorm::DSL::Spout
on_init { @sentences = [...] }
on_send { @sentences.sample }
end
class SplitSentence < RedStorm::DSL::Bolt
on_receive do |sentence,|
sentence.split.map {|word| [word] }
end
end
20. Потоковый Word Count
class RandomSentence < RedStorm::DSL::Spout
on_init { @sentences = [...] }
on_send { @sentences.sample }
end
class SplitSentenceBolt < RedStorm::DSL::Bolt
on_receive do |sentence,|
sentence.split.map {|word| [word] }
end
end
class WordCountBolt < RedStorm::DSL::Bolt
on_init { @counts = Hash.new 0 }
on_receive {|word,| [word, @counts[word] += 1] }
end
21. class WordCountTopology < RedStorm::DSL::Topology
spout RandomSentence do
output_fields :sentence
end
bolt SplitSentenceBolt do
output_fields :word
source RandomSentence
end
bolt WordCountBolt, parallelism: 2 do
output_fields :word, :count
source SplitSentenceBolt, fields: ['word']
end
configure :word_count do
num_workers 4
end
end
22. Особенности
● Подходит для реалтайм потоков данных,
мониторинга, алертинга, DRPC, анализа по
временным интервалам
● Не подходит для полноценного анализа по
всем данным
23. Lambda Architecture
● Храним все входные данные в
необработанном виде
● Для анализа данных создаем подходящие
материализованные представления
● Как получить реалтайм представления?
24.
25.
26.
27.
28. Lambda архитектура по-нашему
● Не хотим писать одинаковые вычисления
для разных платформ
● Не хотим поддерживать две полностью
разных платформы
● Не хотим пересчитывать все данные, если
код остался неизменным или незначительно
изменился.
29. Стриминг на стероидах
● Реактивные связи для автоматического
инкрементализма вычислений
— возможность стримить не только новые
значения, но и откатывать предыдущие
● Интеграция с хранилищем — exactly-once
семантика, эффективность через колокацию
данных (отсутствие распределенных локов и
сетевого оверхеда ), отказоустойчивость
через репликацию
30. ● Floq — система очередей с простой
коллокацией данных, батчингом,
отказоустойчивостью (сайдкик не является
ни одним из этих пунктов)
● Flow — реактивный стриминг для реалтайм
представлений