Приложение реального времени с Map-Reduce Давайте попробуем реализовать приложение реального времени, используя Hadoop.Чтобы понять сценарий, давайте рассмотрим датчик температуры.Предполагая, что датчик продолжает работать, мы будем получать новые показания.Таким образом, данные никогда не остановятся.
Мы не должны ждать окончания данных, поскольку это никогда не произойдет.Тогда, возможно, нам следует продолжать делать анализ периодически (например, каждый час).Мы можем запускать Spark каждый час и получать данные за последний час.
Что если каждый час нам требуется анализ последних 24 часов?Должны ли мы обрабатывать данные за последние 24 часа каждый час?Может быть, мы можем рассчитать почасовые данные, сохранить их и использовать их для расчета данных за 24 часа.Это будет работать, но мне придется написать код для этого.
Наши проблемы только начались.Давайте повторим несколько требований, которые усложняют нашу проблему.
- Что, если датчик температуры находится внутри атомной станции, и наш код создает аварийные сигналы.Создание аварийных сигналов по истечении одного часа, возможно, не лучший способ справиться с этим.Можем ли мы получать оповещения в течение 1 секунды?
- Что если вы хотите, чтобы показания рассчитывались на границе часов, пока данные поступают в хранилище в течение нескольких секунд.Теперь вы не можете запустить задание на своей границе, вам нужно наблюдать за диском и запускать задание, когда данные поступят за часовой предел.
- Что ж, вы можете быстро запустить Hadoop.Завершится ли работа в течение 1 секунды?Можем ли мы записать данные на диск, прочитать данные, обработать их, получить результаты и рекомбинировать с другими 23 часами данных за одну секунду?Теперь вещи начинают становиться напряженными.
- Причина, по которой вы начинаете чувствовать трение, заключается в том, что вы не используете правильный инструмент для работы.Вы используете плоскую отвертку, если у вас есть винт с внутренним шестигранником.
Потоковая обработка Правильный инструмент для решения этой проблемы называется «Потоковая обработка».Здесь «Поток» относится к потоку данных.Последовательность данных, которая будет продолжать поступать.«Потоковая обработка» может отслеживать данные по мере их поступления, обрабатывать и отвечать на них в миллисекундах.
Ниже приведены причины, по которым мы хотим выйти за пределы пакетной обработки (Hadoop / Spark), нашей зоны комфорта,и рассмотрим обработку потока.
- Некоторые данные, естественно, представляют собой бесконечный поток событий.Чтобы выполнить пакетную обработку, вам нужно сохранить ее, обрезать через некоторое время и обработать данные.Затем вы должны сделать следующий пакет, а затем беспокоиться об агрегации по нескольким пакетам.Напротив, потоковая передача обрабатывает бесконечные потоки данных изящно и естественно.Вы можете иметь условия, смотреть на несколько уровней фокусировки (обсудим это, когда мы доберемся до окон), а также легко просматривать данные из нескольких потоков одновременно.
- С помощью потоковой передачи вы можете быстрее реагировать на события.Вы можете получить результат в течение миллисекунд после получения события (обновления).В пакетном режиме это часто занимает минуты.
- Потоковая обработка естественным образом согласуется с данными временных рядов и обнаруживает закономерности во времени.Например, если вы пытаетесь определить продолжительность веб-сеанса в бесконечном потоке (это пример попытки обнаружить последовательность), это очень трудно сделать с пакетами, так как некоторый сеанс разделится на две части.партии.Потоковая обработка может легко справиться с этим.Если вы сделаете шаг назад и будете считать, что наиболее непрерывными рядами данных являются данные временных рядов.Например, почти все данные IoT являются данными временного ряда.Следовательно, имеет смысл использовать модель программирования, которая подходит естественным образом.
- Пакетная обработка позволяет накапливать данные и пытаться обрабатывать их сразу, а потоковая обработка данных по мере их поступления, следовательно, распространяет обработку с течением времени.Следовательно, потоковая обработка может работать с гораздо меньшим количеством аппаратного обеспечения, чем пакетная обработка.
- Иногда данные огромны, и их даже невозможно сохранить.Потоковая обработка позволяет обрабатывать большие данные в стиле пожарного коня и сохранять только полезные биты.
- Наконец, tЗдесь доступно много потоковых данных (например, транзакции клиентов, действия, посещения веб-сайтов), и они будут расти быстрее в случаях использования IoT (все виды датчиков).Потоковая передача - гораздо более естественная модель, чтобы думать и программировать эти варианты использования.