Apache Flink - Краткое руководство
Прогресс данных за последние 10 лет был огромным; это дало начало термину «большие данные». Не существует фиксированного размера данных, который можно назвать большими данными; любые данные, которые ваша традиционная система (СУБД) не может обработать, являются большими данными. Эти большие данные могут быть в структурированном, полуструктурированном или неструктурированном формате. Изначально данные имели три измерения - объем, скорость, разнообразие. Размеры теперь вышли за рамки трех Vs. Теперь мы добавили другие V - достоверность, достоверность, уязвимость, ценность, изменчивость и т. Д.
Большие данные привели к появлению множества инструментов и фреймворков, которые помогают в хранении и обработке данных. Существует несколько популярных фреймворков для работы с большими данными, например Hadoop, Spark, Hive, Pig, Storm и Zookeeper. Это также дало возможность создавать продукты нового поколения во многих областях, таких как здравоохранение, финансы, розничная торговля, электронная коммерция и другие.
Будь то MNC или стартап, все используют большие данные для их хранения и обработки и принятия более разумных решений.
Что касается больших данных, существует два типа обработки:
- Пакетная обработка
- Обработка в реальном времени
Обработка на основе данных, собранных с течением времени, называется пакетной обработкой. Например, менеджер банка хочет обработать данные за последний месяц (собранные с течением времени), чтобы узнать количество чеков, аннулированных за последний месяц.
Обработка, основанная на немедленных данных для получения мгновенного результата, называется обработкой в реальном времени. Например, менеджер банка получает предупреждение о мошенничестве сразу после совершения мошеннической транзакции (мгновенный результат).
В приведенной ниже таблице перечислены различия между пакетной обработкой и обработкой в реальном времени.
Пакетная обработка | Обработка в реальном времени |
---|---|
Статические файлы |
Потоки событий |
Обрабатывается Периодически в минутах, часах, днях и т. Д. |
Обработано немедленно наносекунды |
Прошлые данные на диске |
В памяти |
Пример - создание счета |
Пример - оповещение о транзакции банкомата |
В наши дни обработка в реальном времени широко используется в каждой организации. Для таких случаев использования, как обнаружение мошенничества, оповещения в реальном времени в здравоохранении и оповещения о сетевых атаках, требуется обработка мгновенных данных в реальном времени; задержка даже в несколько миллисекунд может иметь огромное влияние.
Идеальным инструментом для таких случаев использования в реальном времени был бы тот, который может вводить данные как поток, а не пакет. Apache Flink - это инструмент обработки в реальном времени.
Apache Flink - это среда обработки в реальном времени, которая может обрабатывать потоковые данные. Это платформа обработки потоков с открытым исходным кодом для высокопроизводительных, масштабируемых и точных приложений реального времени. Он имеет настоящую потоковую модель и не принимает входные данные как пакетные или микропакеты.
Apache Flink был основан компанией Data Artisans и сейчас разрабатывается под лицензией Apache сообществом Apache Flink. В этом сообществе более 479 участников, и на данный момент 15500 + совершили.
Экосистема на Apache Flink
На приведенной ниже диаграмме показаны различные уровни экосистемы Apache Flink.
Место хранения
У Apache Flink есть несколько вариантов, откуда он может читать / писать данные. Ниже приведен базовый список хранилищ -
- HDFS (Распределенная файловая система Hadoop)
- Локальная файловая система
- S3
- СУБД (MySQL, Oracle, MS SQL и т. Д.)
- MongoDB
- HBase
- Апач Кафка
- Apache Flume
Развернуть
Вы можете развернуть Apache Fink в локальном режиме, режиме кластера или в облаке. Кластерный режим может быть автономным, YARN, MESOS.
В облаке Flink можно развернуть на AWS или GCP.
Ядро
Это уровень времени выполнения, который обеспечивает распределенную обработку, отказоустойчивость, надежность, возможности собственной итеративной обработки и многое другое.
API и библиотеки
Это верхний и самый важный уровень Apache Flink. У него есть Dataset API, который заботится о пакетной обработке, и Datastream API, который заботится о потоковой обработке. Существуют и другие библиотеки, такие как Flink ML (для машинного обучения), Gelly (для обработки графиков), Tables for SQL. Этот уровень предоставляет различные возможности Apache Flink.
Apache Flink работает с архитектурой Kappa. Архитектура Kappa имеет единственный процессор - stream, который обрабатывает весь ввод как поток, а механизм потоковой передачи обрабатывает данные в реальном времени. Пакетные данные в архитектуре каппа - это частный случай потоковой передачи.
На следующей диаграмме показан Apache Flink Architecture.
Ключевая идея в архитектуре Kappa - обрабатывать как пакетные данные, так и данные в реальном времени с помощью единого механизма потоковой обработки.
Большинство фреймворков больших данных работает на архитектуре Lambda, которая имеет отдельные процессоры для пакетных и потоковых данных. В архитектуре Lambda у вас есть отдельные кодовые базы для пакетного и потокового представлений. Для запроса и получения результата необходимо объединить кодовые базы. Не поддерживать отдельные кодовые базы / представления и объединять их - это проблема, но архитектура Kappa решает эту проблему, поскольку имеет только одно представление - в реальном времени, поэтому слияние кодовой базы не требуется.
Это не означает, что архитектура Kappa заменяет архитектуру Lambda, это полностью зависит от варианта использования и приложения, которое решает, какая архитектура будет предпочтительнее.
На следующей диаграмме показана архитектура выполнения задания Apache Flink.
Программа
Это фрагмент кода, который вы запускаете в кластере Flink.
Клиент
Он отвечает за принятие кода (программы) и построение графа потока данных задания, а затем передачу его в JobManager. Он также получает результаты работы.
JobManager
После получения графика потока данных задания от клиента он отвечает за создание графика выполнения. Он назначает задание диспетчерам задач в кластере и контролирует выполнение задания.
Диспетчер задач
Он отвечает за выполнение всех задач, которые были назначены JobManager. Все диспетчеры задач запускают задачи в своих отдельных слотах с указанным параллелизмом. Он отвечает за отправку статуса задач в JobManager.
Особенности Apache Flink
Особенности Apache Flink следующие:
Он имеет потоковый процессор, который может запускать как пакетные, так и потоковые программы.
Он может обрабатывать данные с молниеносной скоростью.
API-интерфейсы доступны на Java, Scala и Python.
Предоставляет API-интерфейсы для всех стандартных операций, которые очень легко использовать программистам.
Обрабатывает данные с малой задержкой (наносекунды) и высокой пропускной способностью.
Его отказоустойчивый. Если узел, приложение или оборудование выходит из строя, это не влияет на кластер.
Может легко интегрироваться с Apache Hadoop, Apache MapReduce, Apache Spark, HBase и другими инструментами для работы с большими данными.
Управление в памяти можно настроить для улучшения вычислений.
Он хорошо масштабируется и может масштабироваться до тысяч узлов в кластере.
Окно в Apache Flink очень гибкое.
Предоставляет библиотеки обработки графиков, машинного обучения и обработки сложных событий.
Ниже приведены системные требования для загрузки и работы с Apache Flink:
Рекомендуемая операционная система
- Microsoft Windows 10
- Ubuntu 16.04 LTS
- Apple macOS 10.13 / High Sierra
Требования к памяти
- Память - минимум 4 ГБ, рекомендуется 8 ГБ
- Место для хранения - 30 ГБ
Note - Java 8 должна быть доступна с уже установленными переменными среды.
Перед тем, как начать установку / настройку Apache Flink, давайте проверим, установлена ли у нас в системе Java 8.
Java - версия
Теперь мы загрузим Apache Flink.
wget http://mirrors.estointernet.in/apache/flink/flink-1.7.1/flink-1.7.1-bin-scala_2.11.tgz
Теперь распакуйте tar-файл.
tar -xzf flink-1.7.1-bin-scala_2.11.tgz
Перейдите в домашний каталог Flink.
cd flink-1.7.1/
Запустите кластер Flink.
./bin/start-cluster.sh
Откройте браузер Mozilla и перейдите по указанному ниже URL-адресу, откроется веб-панель управления Flink.
http://localhost:8081
Так выглядит пользовательский интерфейс Apache Flink Dashboard.
Теперь кластер Flink запущен и работает.
Flink имеет богатый набор API-интерфейсов, с помощью которых разработчики могут выполнять преобразования как пакетных данных, так и данных в реальном времени. Разнообразные преобразования включают отображение, фильтрацию, сортировку, объединение, группировку и агрегирование. Эти преобразования Apache Flink выполняются над распределенными данными. Давайте обсудим различные API, предлагаемые Apache Flink.
API набора данных
API набора данных в Apache Flink используется для выполнения пакетных операций с данными в течение определенного периода. Этот API можно использовать в Java, Scala и Python. Он может применять различные виды преобразований к наборам данных, такие как фильтрация, сопоставление, агрегирование, объединение и группировка.
Наборы данных создаются из источников, таких как локальные файлы, или путем чтения файла из определенного источника, а данные результатов могут быть записаны в разные приемники, такие как распределенные файлы или терминал командной строки. Этот API поддерживается языками программирования Java и Scala.
Вот программа Wordcount для Dataset API -
public class WordCountProg {
public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements(
"Hello",
"My Dataset API Flink Program");
DataSet<Tuple2<String, Integer>> wordCounts = text
.flatMap(new LineSplitter())
.groupBy(0)
.sum(1);
wordCounts.print();
}
public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
for (String word : line.split(" ")) {
out.collect(new Tuple2<String, Integer>(word, 1));
}
}
}
}
DataStream API
Этот API используется для обработки данных в непрерывном потоке. Вы можете выполнять различные операции, такие как фильтрация, отображение, управление окнами, агрегирование данных потока. В этом потоке данных есть различные источники, такие как очереди сообщений, файлы, потоки сокетов, и данные результатов могут быть записаны в разные приемники, такие как терминал командной строки. Оба языка программирования Java и Scala поддерживают этот API.
Вот потоковая программа Wordcount для DataStream API, где у вас есть непрерывный поток подсчета слов, а данные сгруппированы во втором окне.
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class WindowWordCountProg {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<String, Integer>> dataStream = env
.socketTextStream("localhost", 9999)
.flatMap(new Splitter())
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
dataStream.print();
env.execute("Streaming WordCount Example");
}
public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
for (String word: sentence.split(" ")) {
out.collect(new Tuple2<String, Integer>(word, 1));
}
}
}
}
Table API - это реляционный API с SQL-подобным языком выражений. Этот API может выполнять как пакетную, так и потоковую обработку. Он может быть встроен в Java и Scala Dataset и Datastream API. Вы можете создавать таблицы из существующих наборов данных и потоков данных или из внешних источников данных. С помощью этого реляционного API вы можете выполнять такие операции, как объединение, агрегирование, выбор и фильтрация. Независимо от того, является ли ввод пакетным или потоковым, семантика запроса остается неизменной.
Вот пример программы Table API -
// for batch programs use ExecutionEnvironment instead of StreamExecutionEnvironment
val env = StreamExecutionEnvironment.getExecutionEnvironment
// create a TableEnvironment
val tableEnv = TableEnvironment.getTableEnvironment(env)
// register a Table
tableEnv.registerTable("table1", ...) // or
tableEnv.registerTableSource("table2", ...) // or
tableEnv.registerExternalCatalog("extCat", ...)
// register an output Table
tableEnv.registerTableSink("outputTable", ...);
// create a Table from a Table API query
val tapiResult = tableEnv.scan("table1").select(...)
// Create a Table from a SQL query
val sqlResult = tableEnv.sqlQuery("SELECT ... FROM table2 ...")
// emit a Table API result Table to a TableSink, same for SQL result
tapiResult.insertInto("outputTable")
// execute
env.execute()
В этой главе мы узнаем, как создать приложение Flink.
Откройте Eclipse IDE, щелкните «Новый проект» и «Выберите проект Java».
Дайте название проекту и нажмите "Готово".
Теперь нажмите Готово, как показано на следующем снимке экрана.
Теперь щелкните правой кнопкой мыши на src и перейдите в New >> Class.
Дайте название классу и нажмите Готово.
Скопируйте и вставьте приведенный ниже код в редактор.
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.util.Collector;
public class WordCount {
// *************************************************************************
// PROGRAM
// *************************************************************************
public static void main(String[] args) throws Exception {
final ParameterTool params = ParameterTool.fromArgs(args);
// set up the execution environment
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// make parameters available in the web interface
env.getConfig().setGlobalJobParameters(params);
// get input data
DataSet<String> text = env.readTextFile(params.get("input"));
DataSet<Tuple2<String, Integer>> counts =
// split up the lines in pairs (2-tuples) containing: (word,1)
text.flatMap(new Tokenizer())
// group by the tuple field "0" and sum up tuple field "1"
.groupBy(0)
.sum(1);
// emit result
if (params.has("output")) {
counts.writeAsCsv(params.get("output"), "\n", " ");
// execute program
env.execute("WordCount Example");
} else {
System.out.println("Printing result to stdout. Use --output to specify output path.");
counts.print();
}
}
// *************************************************************************
// USER FUNCTIONS
// *************************************************************************
public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// normalize and split the line
String[] tokens = value.toLowerCase().split("\\W+");
// emit the pairs
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new Tuple2<>(token, 1));
}
}
}
}
}
Вы получите много ошибок в редакторе, потому что в этот проект нужно добавить библиотеки Flink.
Щелкните правой кнопкой мыши проект >> Путь сборки >> Настроить путь сборки.
Выберите вкладку «Библиотеки» и нажмите «Добавить внешние файлы JAR».
Перейдите в каталог библиотеки Flink, выберите все 4 библиотеки и нажмите OK.
Перейдите на вкладку Order and Export, выберите все библиотеки и нажмите OK.
Вы увидите, что ошибок больше нет.
Теперь давайте экспортируем это приложение. Щелкните проект правой кнопкой мыши и выберите «Экспорт».
Выберите файл JAR и нажмите Далее.
Укажите путь назначения и нажмите Далее
Нажмите Далее>
Нажмите «Обзор», выберите основной класс (WordCount) и нажмите «Готово».
Note - Нажмите ОК, если появится какое-либо предупреждение.
Выполните приведенную ниже команду. Далее он запустит только что созданное приложение Flink.
./bin/flink run /home/ubuntu/wordcount.jar --input README.txt --output /home/ubuntu/output
В этой главе мы узнаем, как запустить программу Flink.
Давайте запустим пример подсчета слов Flink на кластере Flink.
Перейдите в домашний каталог Flink и выполните следующую команду в терминале.
bin/flink run examples/batch/WordCount.jar -input README.txt -output /home/ubuntu/flink-1.7.1/output.txt
Перейдите в панель управления Flink, вы сможете увидеть выполненную работу с ее деталями.
Если вы нажмете «Завершенные работы», вы получите подробный обзор работ.
Чтобы проверить вывод программы wordcount, выполните следующую команду в терминале.
cat output.txt
В этой главе мы узнаем о различных библиотеках Apache Flink.
Комплексная обработка событий (CEP)
FlinkCEP - это API в Apache Flink, который анализирует шаблоны событий для непрерывных потоковых данных. Эти события происходят почти в реальном времени, имеют высокую пропускную способность и низкую задержку. Этот API используется в основном для данных датчиков, которые поступают в режиме реального времени и очень сложны для обработки.
CEP анализирует структуру входящего потока и очень скоро выдает результат. Он имеет возможность предоставлять уведомления и предупреждения в режиме реального времени в случае сложной схемы событий. FlinkCEP может подключаться к различным источникам входного сигнала и анализировать в них закономерности.
Вот как выглядит образец архитектуры с CEP -
Данные датчиков будут поступать из разных источников, Kafka будет действовать как среда распределенного обмена сообщениями, которая будет распределять потоки в Apache Flink, а FlinkCEP будет анализировать сложные шаблоны событий.
Вы можете писать программы на Apache Flink для сложной обработки событий с помощью Pattern API. Это позволяет вам выбирать шаблоны событий для обнаружения из данных непрерывного потока. Ниже приведены некоторые из наиболее часто используемых шаблонов CEP -
Начать
Он используется для определения начального состояния. Следующая программа показывает, как это определяется в программе Flink -
Pattern<Event, ?> next = start.next("next");
где
Он используется для определения условия фильтрации в текущем состоянии.
patternState.where(new FilterFunction <Event>() {
@Override
public boolean filter(Event value) throws Exception {
}
});
следующий
Он используется для добавления нового состояния шаблона и соответствующего события, необходимого для передачи предыдущего шаблона.
Pattern<Event, ?> next = start.next("next");
С последующим
Он используется для добавления нового состояния шаблона, но здесь могут происходить другие события ч / б двух совпадающих событий.
Pattern<Event, ?> followedBy = start.followedBy("next");
Gelly
API-интерфейс Apache Flink Graph - это Gelly. Gelly используется для выполнения графического анализа в приложениях Flink с использованием набора методов и утилит. Вы можете анализировать огромные графы с помощью Apache Flink API распределенным образом с помощью Gelly. Существуют и другие библиотеки графов, такие как Apache Giraph, для той же цели, но поскольку Gelly используется поверх Apache Flink, он использует единый API. Это очень полезно с точки зрения разработки и эксплуатации.
Давайте запустим пример, используя Apache Flink API - Gelly.
Во-первых, вам нужно скопировать 2 файла Gelly jar из каталога opt Apache Flink в его каталог lib. Затем запустите jar flink-gelly-examples.
cp opt/flink-gelly* lib/
./bin/flink run examples/gelly/flink-gelly-examples_*.jar
Давайте теперь запустим пример PageRank.
PageRank вычисляет оценку для каждой вершины, которая представляет собой сумму оценок PageRank, переданных за границу. Оценка каждой вершины поровну делится между внешними ребрами. Вершины с высокими показателями связаны с другими вершинами с высокими показателями.
Результат содержит идентификатор вершины и рейтинг PageRank.
usage: flink run examples/flink-gelly-examples_<version>.jar --algorithm PageRank [algorithm options] --input <input> [input options] --output <output> [output options]
./bin/flink run examples/gelly/flink-gelly-examples_*.jar --algorithm PageRank --input CycleGraph --vertex_count 2 --output Print
Библиотека машинного обучения Apache Flink называется FlinkML. Поскольку за последние 5 лет использование машинного обучения экспоненциально росло, сообщество Flink решило добавить этот APO машинного обучения также в свою экосистему. Список участников и алгоритмов во FlinkML увеличивается. Этот API еще не является частью двоичного дистрибутива.
Вот пример линейной регрессии с использованием FlinkML -
// LabeledVector is a feature vector with a label (class or real value)
val trainingData: DataSet[LabeledVector] = ...
val testingData: DataSet[Vector] = ...
// Alternatively, a Splitter is used to break up a DataSet into training and testing data.
val dataSet: DataSet[LabeledVector] = ...
val trainTestData: DataSet[TrainTestDataSet] = Splitter.trainTestSplit(dataSet)
val trainingData: DataSet[LabeledVector] = trainTestData.training
val testingData: DataSet[Vector] = trainTestData.testing.map(lv => lv.vector)
val mlr = MultipleLinearRegression()
.setStepsize(1.0)
.setIterations(100)
.setConvergenceThreshold(0.001)
mlr.fit(trainingData)
// The fitted model can now be used to make predictions
val predictions: DataSet[LabeledVector] = mlr.predict(testingData)
Внутри flink-1.7.1/examples/batch/путь, вы найдете файл KMeans.jar. Давайте запустим этот образец FlinkML.
Этот пример программы запускается с использованием точки по умолчанию и набора данных центроида.
./bin/flink run examples/batch/KMeans.jar --output Print
В этой главе мы разберемся с несколькими тестовыми примерами в Apache Flink.
Apache Flink - Bouygues Telecom
Bouygues Telecom - одна из крупнейших телекоммуникационных организаций Франции. У него более 11 миллионов абонентов мобильной связи и более 2,5 миллионов постоянных клиентов. Компания Bouygues впервые услышала об Apache Flink на собрании группы Hadoop в Париже. С тех пор они использовали Flink для нескольких сценариев использования. Они обрабатывали миллиарды сообщений в день в режиме реального времени через Apache Flink.
Вот что Буиг говорит об Apache Flink: «Мы закончили с Flink, потому что система поддерживает настоящую потоковую передачу - как на уровне API, так и на уровне времени выполнения, что дает нам программируемость и низкую задержку, которые мы искали. Кроме того, мы смогли настроить и запустить нашу систему с помощью Flink за меньшее время по сравнению с другими решениями, что привело к появлению большего количества доступных ресурсов разработчика для расширения бизнес-логики в системе ».
В компании Bouygues качество обслуживания клиентов является наивысшим приоритетом. Они анализируют данные в режиме реального времени, чтобы дать своим инженерам следующие идеи:
Опыт работы с клиентами в реальном времени по их сети
Что происходит в сети в мире
Оценка сети и операции
Они создали систему под названием LUX (Logged User Experience), которая обрабатывала массивные данные журнала от сетевого оборудования с внутренними ссылками на данные, чтобы дать показатели качества опыта, которые будут регистрировать их клиентский опыт и создать тревожную функцию для обнаружения любого сбоя в потреблении данных в течение 60 секунд. секунд.
Для этого им требовалась структура, которая может принимать большие объемы данных в режиме реального времени, проста в настройке и предоставляет богатый набор API для обработки потоковых данных. Apache Flink идеально подходил для Bouygues Telecom.
Apache Flink - Алибаба
Alibaba - крупнейшая в мире розничная компания в сфере электронной коммерции с доходом в размере 394 миллиардов долларов в 2015 году. Поиск Alibaba - это точка входа для всех клиентов, которая показывает все результаты поиска и дает соответствующие рекомендации.
Alibaba использует Apache Flink в своей поисковой системе, чтобы отображать результаты в режиме реального времени с максимальной точностью и релевантностью для каждого пользователя.
Alibaba искала фреймворк, который был -
Очень гибкая поддержка единой базы кода для всего процесса поисковой инфраструктуры.
Обеспечивает низкую задержку при изменении доступности продуктов на веб-сайте.
Последовательный и экономичный.
Apache Flink соответствует всем вышеперечисленным требованиям. Им нужна структура, которая имеет единый механизм обработки и может обрабатывать как пакетные, так и потоковые данные с помощью одного и того же механизма, и это то, что делает Apache Flink.
Они также используют Blink, разветвленную версию Flink, чтобы удовлетворить некоторые уникальные требования для их поиска. Они также используют API таблиц Apache Flink с небольшими улучшениями для поиска.
Вот что Alibaba сказал об apache Flink: « Оглядываясь назад, можно сказать , что это был, без сомнения, огромный год для Blink и Flink в Alibaba. Никто не думал, что мы добьемся такого большого прогресса за год, и мы очень благодарны всем. люди, которые помогли нам в сообществе. Доказано, что Flink работает в очень больших масштабах. Мы более чем когда-либо привержены продолжению нашей работы с сообществом, чтобы продвигать Flink вперед! "
Вот исчерпывающая таблица, в которой показано сравнение трех самых популярных платформ больших данных: Apache Flink, Apache Spark и Apache Hadoop.
Apache Hadoop | Apache Spark | Apache Flink | |
---|---|---|---|
Year of Origin |
2005 г. | 2009 г. | 2009 г. |
Place of Origin |
MapReduce (Google) Hadoop (Yahoo) | Калифорнийский университет в Беркли | Технический университет Берлина |
Data Processing Engine |
Партия | Партия | Поток |
Processing Speed |
Медленнее, чем Spark and Flink | В 100 раз быстрее, чем Hadoop | Быстрее искры |
Programming Languages |
Java, C, C ++, Ruby, Groovy, Perl, Python | Java, Scala, python и R | Java и Scala |
Programming Model |
Уменьшение карты | Устойчивые распределенные наборы данных (RDD) | Циклические потоки данных |
Data Transfer |
Партия | Партия | Конвейерный и пакетный |
Memory Management |
На основе диска | Управляемая JVM | Активный управляемый |
Latency |
Низкий | Средняя | Низкий |
Throughput |
Средняя | Высоко | Высоко |
Optimization |
Руководство | Руководство | Автоматический |
API |
Низкий уровень | Высокий уровень | Высокий уровень |
Streaming Support |
NA | Spark Streaming | Flink Streaming |
SQL Support |
Улей, Импала | SparkSQL | Табличный API и SQL |
Graph Support |
NA | GraphX | Gelly |
Machine Learning Support |
NA | SparkML | FlinkML |
Таблица сравнения, которую мы видели в предыдущей главе, в значительной степени завершает указатели. Apache Flink - это наиболее подходящий фреймворк для обработки и использования в реальном времени. Уникальная система с одним движком позволяет обрабатывать как пакетные, так и потоковые данные с помощью различных API, таких как Dataset и DataStream.
Это не означает, что Hadoop и Spark вышли из игры, выбор наиболее подходящей платформы для работы с большими данными всегда зависит и варьируется от варианта использования к варианту использования. Может быть несколько вариантов использования, в которых может подойти комбинация Hadoop и Flink или Spark и Flink.
Тем не менее, Flink в настоящее время является лучшим фреймворком для обработки в реальном времени. Рост Apache Flink был поразительным, и число участников его сообщества растет день ото дня.
Счастливого мигания!