Ako je implementovane fluent API v Apache Spark?

asdsad

Ako je implementovane fluent API v Apache Spark?
« kdy: 02. 09. 2017, 23:39:43 »
Citam si dokumentaciu k Apache Sparku a vrta mi hlavou, ako je vnutorne naimplementavana tato vec, pozorne si precitajte ten kod, nie je tazke to pochopit co to robi.

Ide ale o to, ze na konci je volanie metody scc.start() co znamena, ze vsetko co som napisal za kod predtym defakto vobec nebezal, pretoze tymto start() ho spustim.

Ako ale dokazem toto vnutorne naimplementovat? Ono to potom znamena, ze mi to vrati vzdy nejaky medzi objekt na ktorom sa vola ta dalsia metoda? Nie je to nahodou skorej tak, ze si "ukladam" dovnutra ake metody spustim, ked zavolam ten start()?

Kód: [Vybrat]
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
// Create a DStream that will connect to hostname:port, like localhost:9999
val lines = ssc.socketTextStream("localhost", 9999)
// Split each line into words
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)

Citace
Note that when these lines are executed, Spark Streaming only sets up the computation it will perform when it is started, and no real processing has started yet. To start the processing after all the transformations have been setup, we finally call

Kód: [Vybrat]
// Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.print()
ssc.start()             // Start the computation
ssc.awaitTermination()  // Wait for the computation to terminate


ffjzdgh

Re:Ako je implementovane fluent API v Apache Spark?
« Odpověď #1 kdy: 02. 09. 2017, 23:56:00 »
Nechapu v cem mas problem.
Tride ssc nastavis membery /parametry
Jak ma delit radky na slova atd.
Ale spustis to az startem.

Kdyz das opravari do ruky sroubovak, tak to jeste neznamena, ze hned zacne sroubovat, kdyz je zatim ve skladu naradi.

Re:Ako je implementovane fluent API v Apache Spark?
« Odpověď #2 kdy: 03. 09. 2017, 00:05:30 »
Tride ssc nastavis membery /parametry
Jak ma delit radky na slova atd.
Ale spustis to az startem.
Ne, takhle fakt ne. StreamingContext není žádný algoritmus, kterýmu bys jenom předával parametry.

Nie je to nahodou skorej tak, ze si "ukladam" dovnutra ake metody spustim, ked zavolam ten start()?
Je to v principu tak. Doporučil bych ti kouknout se na Flink, tam je to trochu líp vidět, je tam v základu i grafické znázornění toho stromu operací.

V principu jde o to, že tím zápisem jenom vytváříš nějaký strom uzlů, kde v každém uzlu se má provádět nějaká operace. Ten strom se dá v některých implementacích i třeba uložit jako JSON (jestli to jde konkrétně ve Sparku si teď z hlavy nevybavím). Každý uzel pak může reálně běžet na jiném stroji v clusteru apod. - proto když tu metodu voláš, tak se ještě nic reálně nepočítá, jenom se staví struktura výpočtu a teprve tím startem se reálně odešle do clusteru ke spočítání.

Pro fajnšmekry: je to princip hodně podobný monádám ;)

asdsad

Re:Ako je implementovane fluent API v Apache Spark?
« Odpověď #3 kdy: 03. 09. 2017, 00:33:16 »
super takto som si to presne myslel ze to bude, fascinujuca vec :D

jednu vec este nechapem a to je to, ako su tie "serializovane" uzly v tom strome o ktorom hovoris poslane na tie nody v clustery - to by som este asi tiez domysel sam, ze sa to serializuje, posle sa ten kod ako data a tam sa to deserializuje a bude sa to vykonavat.

no a teraz je otazka, ze ako / na zaklade coho Spark vie, ze vypocitane data sa maju poslat na ten nod kde je ten konkretny uzol z toho vypoctoveho stromu. ako su tie data posielane ze toho streamu na rozne nody?

Re:Ako je implementovane fluent API v Apache Spark?
« Odpověď #4 kdy: 03. 09. 2017, 12:25:02 »
no a teraz je otazka, ze ako / na zaklade coho Spark vie, ze vypocitane data sa maju poslat na ten nod kde je ten konkretny uzol z toho vypoctoveho stromu. ako su tie data posielane ze toho streamu na rozne nody?
Tyhle implementační detaily už nevím - se Sparkem jsem dělal už nějakej pátek zpátky, pak jsem se spíš orientoval právě na Flink.

Ale to, na co se ptáš, není nijak složitý/zajímavý, ne? Prostě node A ví, že má výstup poslat na node B, takže v clusteru bude nejspíš nějaký orchestrator, který si udržuje informaci, že node B je právě na stroji X, ne? Šlo by to i pomocí autodiscovery, ale to myslím není případ Sparku. Implementační detaily fakt nevím, třeba bude vědět nějaký kolega.

Mně osobně přijde na tom všem vůbec nejzajímavější, jakým způsobem je implementovaný stavový výpočet na klíčovaném streamu - že se pro každý klíč udržuje vlastní stav a samotný výpočetní node může být jenom jeden. To mi přijde geniálně jednoduchý a přitom strašně mocný.