Apache Flink: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1:
{{карточка программы}}
'''Apache Flink''' — [[фреймворк]] с [[FOSS|открытым исходным кодом]] для реализации [[Обработка потоков событий|обработки потоков]], разработанный фондом [[Apache Software Foundation]].
В основу фреймворка положен движок для обработки процессов, написанный на языках [[Java]] и [[Scala (язык программирования)|Scala]].<ref>{{cite web|url=https://flink.apache.org/|title=Apache Flink: Scalable Batch and Stream Data Processing|work=apache.org}}</ref><ref>{{cite web|url=https://github.com/apache/flink|title=apache/flink|work=GitHub}}</ref> Flink поддерживает [[программирование потоков данных]] как в параллельном режиме, так и в турборежиме (pipeline).<ref>Alexander Alexandrov, Rico Bergmann, Stephan Ewen, Johann-Christoph Freytag, Fabian Hueske, Arvid Heise, Odej Kao, Marcus Leich, Ulf Leser, Volker Markl, Felix Naumann, Mathias Peters, Astrid Rheinländer, Matthias J. Sax, Sebastian Schelter, Mareike Höger, Kostas Tzoumas, and Daniel Warneke. 2014. ''The Stratosphere platform for big data analytics''. The VLDB Journal 23, 6 (December 2014), 939-964. [https://dx.doi.org/10.1007/s00778-014-0357-y DOI]</ref> В турборежиме (pipeline) Flink позволяет реализовать последовательность заданий (batch) и очерёдность заданий (stream).<ref>{{cite web|url=http://www.infoworld.com/article/2919602/hadoop/flink-hadoops-new-contender-for-mapreduce-spark.html|title=Apache Flink: New Hadoop contender squares off against Spark|author=Ian Pointer|date=7 May 2015|work=InfoWorld}}</ref><ref>{{cite web|url=http://www.odbms.org/blog/2015/06/on-apache-flink-interview-with-volker-markl/|title=On Apache Flink. Interview with Volker Markl.|work=odbms.org}}</ref> Flink поддерживает также итерационные алгоритмы естественным образом.<ref>Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann, and Volker Markl. 2012. ''Spinning fast iterative data flows''. Proc. VLDB Endow. 5, 11 (July 2012), 1268-1279. [https://dx.doi.org/10.14778/2350229.2350245 DOI]</ref>
 
Строка 12:
Первоначальные разработчики Apache Flink основали фирму Data Artisans, в которую вошли 12 программистов.<ref>{{cite web|url=http://data-artisans.com/about/team/|title=Team – data Artisans|website=data-artisans.com|language=en-US|access-date=2017-02-23|archive-url=https://web.archive.org/web/20170223212401/http://data-artisans.com/about/team/|archive-date=2017-02-23|url-status=dead}}</ref>.<ref>{{cite web|url=http://flink.apache.org/community.html#people|title=Apache Flink: Community & Project Info|website=flink.apache.org|language=en|access-date=2017-02-23}}</ref>
 
== Обзор ==
[[Программирование потоков данных]] в Apache Flink опирается на обработку событий как для ограниченных во времени наборов данных, так и для непрерывных потоков без временных ограничений. На нижнем уровне программы в системе Flink разделяются на потоки (stream) и преобразования (transformation). Поток по своей концепции представляет собой очередь записей, которая может и никогда не заканчиваться. Преобразование - это операция, еоторая на входе получает один или несколько потоков,и преоблазует данные также в один или несколько потоков. <ref name=":1">{{cite web|url=https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/programming-model.html#programs-and-dataflows|title=Apache Flink 1.2.0 Documentation: Dataflow Programming Model|website=ci.apache.org|language=en|access-date=2017-02-23}}</ref>
 
В Apache Flink используется два основных API: DataStream API для ограниченных или неограниченных потоков, и DataSet API для ограниченных наборов данных. Flink также поддерживает Table API для таблиц, используя язык типа SQL как для потоков так и для заданий. На высшем уровне Flink поддерживает язык SQL, который семантически близок к Table API и осуществляет запросы через SQL.
 
=== Программная модель и распределённое исполнение задач ===
Во время выполнения программы для Flink ставятся в соответствие с потоками данных (streaming).<ref name=":1" /> Каждый поток берёт входные данные от одного или нескольких источников (например, ввод данных, очередь или файл), и завершается, посылая данные в один или несколько выходных потоков (очередь сообщений, файлы, база данных). В потоку проводится произвольное количество преобразования. Потоки образуют граф без циклов, позволяя приложению ветвится на многие потоки и объединять потоки весте.
 
Flink предлагает соединять входные и выходные потоки с хранилищвми [[Alluxio]], [[Apache Kafka]], Amazon Kinesis, [[HDFS]], [[Apache Cassandra]] и др.<ref name=":0" />
 
В распределённых системах программы Flink могут работать по кластерам или быть независимыми, используя также YARN, Mesos, или Docker для конфигурирования и распределения ресурсов.<ref>{{cite web|url=https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/runtime.html|title=Apache Flink 1.2.0 Documentation: Distributed Runtime Environment|website=ci.apache.org|language=en|access-date=2017-02-24}}</ref>
 
<!--
=== State: Checkpoints, Savepoints, and Fault-tolerance ===
Apache Flink includes a lightweight fault tolerance mechanism based on distributed checkpoints.<ref name=":2" /> A checkpoint is an automatic, asynchronous snapshot of the state of an application and the position in a source stream. In the case of a failure, a Flink program with checkpointing enabled will, upon recovery, resume processing from the last completed checkpoint, ensuring that Flink maintains exactly-once state semantics within an application. The checkpointing mechanism exposes hooks for application code to include external systems into the checkpointing mechanism as well (like opening and committing transactions with a database system).
 
Flink also includes a mechanism called savepoints, which are manually-triggered checkpoints.<ref>{{cite web|url=https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/runtime.html#savepoints|title=Apache Flink 1.2.0 Documentation: Distributed Runtime Environment - Savepoints|website=ci.apache.org|language=en|access-date=2017-02-24}}</ref> A user can generate a savepoint, stop a running Flink program, then resume the program from the same application state and position in the stream. Savepoints enable updates to a Flink program or a Flink cluster without losing the application's state . As of Flink 1.2, savepoints also allow to restart an application with a different parallelism—allowing users to adapt to changing workloads.
 
=== DataStream API ===
Flink's DataStream API enables transformations (e.g. filters, aggregations, window functions) on bounded or unbounded streams of data. The DataStream API includes more than 20 different types of transformations and is available in Java and Scala.<ref>{{cite web|url=https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html|title=Apache Flink 1.2.0 Documentation: Flink DataStream API Programming Guide|website=ci.apache.org|language=en|access-date=2017-02-24}}</ref>
 
A simple example of a stateful stream processing program is an application that emits a word count from a continuous input stream and groups the data in 5-second windows:<syntaxhighlight lang="scala">
-->
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
 
case class WordCount(word: String, count: Int)
 
object WindowWordCount {
def main(args: Array[String]) {
 
val env = StreamExecutionEnvironment.getExecutionEnvironment
val text = env.socketTextStream("localhost", 9999)
 
val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
.map { WordCount(_, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5))
.sum("count")
 
counts.print
 
env.execute("Window Stream WordCount")
}
}
</syntaxhighlight>
 
== Примечания ==