Apache Flink

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 12.10.2020 tarkistetusta versiosta . tarkastukset vaativat 13 muokkausta .
Apache Flink
Kehittäjä Apache Software Foundation
Sisään kirjoitettu Java [2] [1] ja Scala [1]
Ensimmäinen painos 6. tammikuuta 2015 [1]
Laitteistoalusta Java-virtuaalikone
uusin versio
Lisenssi Apache-lisenssi 2.0
Verkkosivusto flink.apache.org
 Mediatiedostot Wikimedia Commonsissa

Apache Flink  on Apache Software Foundationin kehittämä avoimen lähdekoodin tietovirrankäsittelykehys .

Kehys perustuu Java- ja Scala -kielellä kirjoitettuun prosessinkäsittelymoottoriin [4] [5] . Flink tukee tietovirran ohjelmointia sekä rinnakkaistilassa että liukuhihnatilassa (pipeline) [6] . Liukuhihnatilassa (pipeline) Flink mahdollistaa töiden sarjan (erä) ja työvirran (stream) toteuttamisen [7] [8] . Flink tukee myös iteratiivisia algoritmeja luonnollisesti [9] .

Flinkillä on korkea suorituskyky ja alhainen latenssi [10] , tapahtumat voivat laukaista säikeet ja ylläpitää tilaa. Flink-järjestelmän tehtävät ovat vikasietoisia ja käyttävät täysin samaa semantiikkaa [11] . Ohjelmat puitteisiin voidaan kirjoittaa Javalla , Scalalla [12] , Pythonilla [13] ja SQL :llä [14] , työt käännetään ja optimoidaan automaattisesti [15] , jotka toimivat sekä klustereissa että pilvipalvelimessa [16] .

Flinkillä ei ole omaa tallennusjärjestelmää, mutta se käyttää tietolähteitä ja liittimiä, kuten Amazon Kinesis , Apache Kafka , Alluxio , HDFS , Apache Cassandra ja ElasticSearch [17] .

Kehitys

Apache Flink -yhteisö kehitti Apache 2.0 -lisenssillä [18] Apache Software Foundationissa . Projektia johti 25 ydinkehittäjää ja yli 340 ohjelmoijaa.

Apache Flinkin alkuperäiset kehittäjät perustivat Data Artisansin, 12 ydinkehittäjäyrityksen [19] [20] .

Yleiskatsaus

Tietovirran ohjelmointi Apache Flinkissä perustuu tapahtumien käsittelyyn sekä aikarajoitetuille tietojoukoille että jatkuville virroille ilman aikarajoituksia. Alimmalla tasolla Flink-järjestelmän ohjelmat on jaettu virtoihin (stream) ja muunnoksiin (transformaatio). Virta on käsitteellisesti tietueiden jono, joka ei ehkä koskaan lopu. Muunnos on toiminto, joka vastaanottaa yhden tai useamman virran syötteenä ja muuntaa sitten tiedot myös yhdeksi tai useammaksi virraksi [21] .

Apache Flink käyttää kahta pääsovellusliittymää: DataStream API:ta rajoitetuille tai rajoittamattomille streameille ja DataSet API:ta rajoitetuille tietojoukoille. Flink tukee myös Table API:ta taulukoille käyttämällä SQL:n kaltaista kieltä sekä virroille että töille. Korkeimmalla tasolla Flink tukee SQL-kieltä, joka on semanttisesti lähellä Table API:ta ja kyselyitä SQL:n kautta.

Ohjelmointimalli ja tehtävien hajautettu suoritus

Ajon aikana Flink-ohjelmat on yhdistetty suoratoistoon [21] . Jokainen säie ottaa syötteen yhdestä tai useammasta lähteestä (esim. syötteestä, jonosta tai tiedostosta) ja päättyy lähettämällä tietoja yhteen tai useampaan lähtövirtaan (viestijono, tiedostot, tietokanta). Virta käy läpi mielivaltaisen määrän muutosta. Säikeet muodostavat silmukattoman graafin, jolloin sovellus voi haarautua useiksi säikeiksi ja yhdistää säikeitä yhteen.

Flink ehdottaa tulo- ja lähtövirtojen yhdistämistä Alluxio- , Apache Kafka- , Amazon Kinesis-, HDFS- , Apache Cassandra- jne. [17] -tallennustiloihin .

Hajautetuissa järjestelmissä Flink-ohjelmat voivat toimia klustereina tai olla itsenäisiä, ja ne voivat myös käyttää YARN:ia, Mesosta tai Dockeria resurssien määrittämiseen ja allokoimiseen [22] .

Tilat: tarkistuspisteet, tallennuspisteet, vikasieto

Apache Flink sisältää kevyen vikasietomekanismin, joka käyttää hajautettuja tarkistuspisteitä [11] . Tarkistuspiste on automaattinen asynkroninen tallennus (snapshot) sovelluksen tilasta alkuperäisessä säikeessä. Vian sattuessa Flink-ympäristössä oleva ohjelma, jossa on keskeytyskohta, palauttaa prosessin viimeisestä tallennuksesta olettaen, että Flink toimii vain yhdellä sovelluksen tilasemantiikalla. Tarkistuspistemekanismi käyttää koukkuja sovelluskoodissa, jotta ulkoiset järjestelmät voivat mahdollistaa tilan tallennuksen tarkistuspisteissä (samalla tavalla kuin tapahtumat tietokantojen kanssa työskennellessä).

Flink sisältää myös mekanismin "tallennuspisteille", jotka aktivoidaan manuaalisesti [23] . Käyttäjä voi luoda tallennuspisteen, pysäyttää ohjelman Flink-ympäristössä ja käynnistää sen sitten uudelleen samasta paikasta. Tallennuspisteiden avulla voit myös tehdä muutoksia ohjelmaan menettämättä sovelluksen tilaa. Flink 1.2 -versiosta alkaen tallennuspisteiden avulla voit käynnistää sovelluksen uudelleen tietojen rinnakkaiskäsittelytilanteessa

DataStream API

DataStream API Flink-järjestelmässä suorittaa muunnoksia - kuten suodatuksen, yhdistämisen, näytteenoton - rajoitetuissa tai rajoittamattomissa tietovirroissa. DataStream API sisältää yli 20 erilaista muunnostyyppiä, joita voidaan käyttää Javassa ja Scalassa [24] .

Tässä on esimerkki yksinkertaisesta virrankäsittelystä sanamäärää varten jatkuvassa syöttövirrassa viiden sekunnin aikavälein:

tuonti org . apache . flinkkiä . suoratoisto . api . scala . _ tuontiorganisaatio . _ apache . flinkkiä . suoratoisto . api . ikkunointi . aika . Aika tapausluokka WordCount ( sana : merkkijono , määrä : Int ) _ object WindowWordCount { def main ( args : Array [ String ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "localhost" , 9999 ) val counts = teksti . flatMap { _ . pienet kirjaimet . split ( "\\W+" ) suodatin { _ . eiTyhjä } } . kartta { WordCount ( _ , 1 ) } . keyBy ( "sana" ) . timeWindow ( Aika . sekuntia ( 5 )) . summa ( "count" ) laskee . Tulosta env . suorita ( "Window Stream WordCount" ) } }

Tässä virrassa syöttöteksti jaetaan sanoiksi flatMap-toiminnolla, jokainen sana muunnetaan WordCount-rakenteeksi, jonka laskuri on yhtä suuri, WordCount-objektien virta ryhmitellään sanojen ja 5 sekunnin välein ja sitten tehdään yhteenveto. laskureilla, niin että lopullinen virta sisältää sanalaskurit viiden sekunnin välein.

Apache Beam - Flink esiintyjä

Apache Beam tarjoaa yhtenäisen ohjelmointimallin, jonka avulla kehittäjä voi luoda töitä liukuhihna- ja suoratoistotilassa ja suorittaa sitten luodut työt Flink-ympäristössä [25] . Apache Beam -pohjainen Flink Executor sisältää runsaasti ominaisuuksia [26] .

Data Artisans kehittää Flink-toteutusohjelmaa [27] .

DataSet API

Flink-järjestelmän DataSet API tukee datan muunnostoimintoja (kuten suodatusta, ryhmittelyä, kartoitusta, yhdistämistä) aikarajoitetuilla tietojoukoilla. DataSet API tarjoaa noin 20 muunnostyyppiä [28] . Tämä API on tuettu Javalle ja Scalalle, ja Pythonille on myös kokeellinen API. DataSet API:n käsite on samanlainen kuin DataStream API:n.

Taulukon API ja SQL

Table API on SQL-tyyppinen lausekekieli relaatiovirtojen ja töiden käsittelyyn, Table API on osa Java- ja Scala-sovellusliittymiä DataSet- ja DataStream. Taulukkosovellusliittymä ja vastaava SQL-käyttöliittymä toimivat relaatiotaulukoiden abstraktin esityksen kanssa. Abstrakteja taulukoita voidaan luoda ulkoisista tiedoista tai olemassa olevista tietovirroista ja tietojoukoista. Taulukon API tukee relaatiotoimintoja - valintaa, yhdistämistä, yhteyttä.

Taulukoista voi myös tehdä kyselyjä käyttämällä standardia SQL-kieltä. Table API ja SQL tarjoavat samat toiminnot ja ne voidaan sekoittaa samassa ohjelmassa. Taulukot voidaan muuntaa takaisin tietojoukoiksi tai tietovirroiksi, loogiset toiminnot optimoidaan Apache Calciten avulla ja muunnetaan DataSet- tai DataStream [29] -rajapintaohjelmiksi .

Muistiinpanot

  1. 1 2 3 https://projects.apache.org/json/projects/flink.json
  2. Flink Open Source -projekti Open Hubissa: Kielet-sivu - 2006.
  3. https://flink.apache.org/news/2022/10/28/1.16-announcement.html
  4. Apache Flink: Skaalautuva erä- ja stream-tiedonkäsittely . apache.org . Haettu 7. helmikuuta 2020. Arkistoitu alkuperäisestä 26. joulukuuta 2018.
  5. apache/flink . GitHub . Haettu 7. helmikuuta 2020. Arkistoitu alkuperäisestä 28. tammikuuta 2019.
  6. 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 ja Daniel Warneke. 2014. Stratosphere-alusta suurdatan analytiikkaan . The VLDB Journal 23, 6 (joulukuu 2014), 939-964. DOI
  7. Ian Pointer. Apache Flink: Uusi Hadoop-kilpailija kohtaa Sparkia vastaan . InfoWorld (7. toukokuuta 2015). Haettu 7. helmikuuta 2020. Arkistoitu alkuperäisestä 23. lokakuuta 2018.
  8. Apache Flink. Volker Marklin haastattelu. . odbms.org . Haettu 7. helmikuuta 2020. Arkistoitu alkuperäisestä 23. lokakuuta 2018.
  9. Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann ja Volker Markl. 2012. Nopeiden iteratiivisten tietovirtojen pyörittäminen . Proc. VLDB Endow. 5, 11 (heinäkuu 2012), 1268-1279. DOI
  10. Suoratoistolaskentamoottoreiden benchmarking Yahoo! . Arkistoitu alkuperäisestä 1. toukokuuta 2017. Haettu 7. helmikuuta 2020.
  11. ↑ 1 2 Carbone, Pariisi; Fora, Gyula; Ewen, Stephan; Haridi, Seif & Tzoumas, Kostas (29.6.2015), Kevyet asynkroniset tilannevedokset hajautetuille tietovirroille, arΧiv : 1506.08603 [cs.DC]. 
  12. ↑ Apache Flink 1.2.0 - dokumentaatio : Flink DataStream API - ohjelmointiopas  . ci.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 21. tammikuuta 2019.
  13. Apache Flink 1.2.0 -dokumentaatio: Python-  ohjelmointiopas . ci.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  14. Apache Flink 1.2.0 -dokumentaatio: Taulukko ja  SQL . ci.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 18. toukokuuta 2019.
  15. Fabian Hueske, Mathias Peters, Matthias J. Sax, Astrid Rheinländer, Rico Bergmann, Aljoscha Krettek ja Kostas Tzoumas. 2012. Tietovirran optimoinnin mustien laatikoiden avaaminen . Proc. VLDB Endow. 5, 11 (heinäkuu 2012), 1256-1267. DOI
  16. Daniel Warneke ja Odej Kao. 2009. Nephele: tehokas rinnakkaistietojenkäsittely pilvessä . Julkaisussa 2. työpaja monitehtävälaskentaa gridissä ja supertietokoneissa (MTAGS '09). ACM, New York, NY, USA, artikla 8, 10 sivua. DOI
  17. ↑ 1 2 Apache Flink 1.2.0 -dokumentaatio:  Suoratoistoliittimet . ci.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  18. ASF Git Repos - flink.git/blob - LICENSE (downlink ) . apache.org . Haettu 12. huhtikuuta 2015. Arkistoitu alkuperäisestä 23. lokakuuta 2017. 
  19. Tiimi - tiedot Artisans  (englanniksi)  (pääsemätön linkki) . data-artisans.com . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 23. helmikuuta 2017.
  20. Apache Flink: Yhteisö- ja  projektitiedot . flink.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  21. ↑ 1 2 Apache Flink 1.2.0 - dokumentaatio : Tietovirran ohjelmointimalli  . ci.apache.org . Haettu 23. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  22. ↑ Apache Flink 1.2.0 - dokumentaatio : Distributed Runtime Environment  . ci.apache.org . Käyttöpäivä: 24. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  23. Apache Flink 1.2.0 -dokumentaatio: Distributed Runtime Environment -  Savepoints . ci.apache.org . Käyttöpäivä: 24. helmikuuta 2017. Arkistoitu alkuperäisestä 21. helmikuuta 2017.
  24. ↑ Apache Flink 1.2.0 - dokumentaatio : Flink DataStream API - ohjelmointiopas  . ci.apache.org . Haettu 24. helmikuuta 2017. Arkistoitu alkuperäisestä 21. tammikuuta 2019.
  25. Apache  Beam . beam.apache.org . Käyttöpäivä: 24. helmikuuta 2017. Arkistoitu alkuperäisestä 25. helmikuuta 2017.
  26. ↑ Apache Beam Capability Matrix  . beam.apache.org . Käyttöpäivä: 24. helmikuuta 2017. Arkistoitu alkuperäisestä 25. helmikuuta 2017.
  27. Miksi Apache Beam? Googlen näkökulma | Google Cloud Big Data and Machine Learning -blogi | Google Cloud  Platform . Google Cloud Platform . Käyttöpäivä: 24. helmikuuta 2017. Arkistoitu alkuperäisestä 25. helmikuuta 2017.
  28. ↑ Apache Flink 1.2.0 - dokumentaatio : Flink DataSet API - ohjelmointiopas  . ci.apache.org . Haettu 24. helmikuuta 2017. Arkistoitu alkuperäisestä 21. tammikuuta 2019.
  29. Stream Processing kaikille SQL:n ja Apache  Flinkin käyttäjille . flink.apache.org . Haettu 8. tammikuuta 2020. Arkistoitu alkuperäisestä 3. heinäkuuta 2019.

Linkit