Что означает чтение данных как "потоковая мода"?

Я читал Apache Crunch documentation и я нашел следующее предложение:

Данные считываются из файловой системы в потоковом режиме, поэтому не требуется, чтобы содержимое PCollection помещалось в память, чтобы оно могло быть прочитано клиентом с использованием материализации.

Я хотел бы знать, что read in from the filesystem in a streaming fashion значит и был бы очень признателен, если бы кто-то мог сказать мне, в чем разница с другими способами чтения данных.

Я бы сказал, что эта концепция применима и к другим инструментам, таким как, например, Spark.

1 ответ

Решение

Допустим, у вас есть файл на английском языке в вашей файловой системе, который вам нужно перевести на немецкий язык. У вас есть два варианта. Вы можете загрузить весь английский файл в память как один большой пакет, перевести весь пакет сразу, а затем записать новый немецкий пакет обратно в файловую систему.

Или вы можете сделать это построчно. Прочитайте первую строку на английском языке; перевести на немецкий и записать в новый файл; прочитайте вторую строку на английском, переведите на немецкий и добавьте в новый файл; и так далее.

Последний подход аналогичен потоковому подходу, описанному в документации Apache Crunch.

PCollection это Crunch что RDD Это Spark- фундаментальная распределенная абстракция данных каркаса, но Crunch работает на более высоком уровне абстракции. Он стремится предоставить хороший API для конвейеров данных между технологиями.

Например, у вас могут быть данные в Hive, к которым у вас есть надежные запросы; вывод этих запросов служит входом для унаследованного задания MapReduce, хранящего данные в HBase; эти данные анализируются библиотекой машинного обучения Spark MLLib, и результаты в конечном итоге отправляются в Кассандру. Хруст стремится направить все это вместе через PCollection абстракция, но его потоковый подход означает, что вам не нужно ждать завершения одной работы, прежде чем начнется следующая. Как и в случае построчной трансляции файлов, вы обрабатываете поочередно и перемещаете каждый бит по каждой фазе конвейера - в отличие от выполнения всего этого в пакетном режиме.

Вы правы в том, что концепция потоковой передачи применима к таким инструментам, как Spark (наиболее очевидно, с Spark Streaming), но, как я уже говорил, Spark работает на более низком уровне абстракции, чем Crunch. Работа Spark может быть только одной частью конвейера Crunch. Но потоковое вещание действительно мощная парадигма. Это основа архитектуры Kappa, разработанной Джеем Крепсом (ранее из LinkedIn, а теперь - Confluent, который является пионером Apache Kafka) в качестве более простой, но более мощной альтернативы пакетной архитектуре Lambda, разработанной Натаном Марцем (ранее Twitter).

В конце концов, выбор делается между уровнями абстракции (Crunch выше, чем у Spark) и между работой по одному пакету за раз или побитно.

Другие вопросы по тегам