socialgekon.com
  • Glavni
  • Urejanje
  • Nasveti za iOS
  • Inženirski Management
  • Orodja In Vaje
Back-End

Kako sem uporabil Apache Spark in Docker v hackathonu za izdelavo vremenske aplikacije

V dveh prejšnjih člankih sem predstavil občinstvo Apache Spark in Docker . Prišel je čas, da sem vam pokazal popolnoma funkcionalno aplikacijo, ki vključuje obe prej omenjeni tehnologiji.

Motivacija je 'deževala z neba v obliki podatkov', sprožil pa jo je hackathon, ki ga je organiziral IBM. Sparkatonov Cilj je bil uporabiti vremenske podatke in Analytics za Apache Spark za IBM Bluemix za izdelavo mobilnih aplikacij, povezanih z vremenom.

IBM je močno vlaganje v Spark , nedavno pa je kupila digitalni del Vremenski kanal . Posledično se zdi ta dogodek kot nalašč za njihovo oglaševanje.



Navdih

Ste se kdaj pritoževali nad vremenom na vaši lokaciji, imeli nekaj načrtovanega prostega časa in denarja, ki bi ga lahko porabili, pa niste vedeli kje iti? Če je odgovor pritrdilen, bi vam res bil všeč Moje popolno vreme app.

Slika: primeri uporabe aplikacije.

Za ponazoritev, kako lahko aplikacijo uporabljamo, je nekaj primerov uporabe:

  1. Imate otroka, s katerim ste obljubili, da boste leteli z zmajem to teden, toda tam, kjer živite, je popolnoma brez vetra in ne želite prekršiti besede.
  2. Živite v vetrovnem in deževnem kraju kot jaz (Edinburgh, Škotska) in želite občutiti toplino na svoji koži in vsekakor št dež.
  3. Želite si zgraditi snežaka in ne boste počivali, dokler ga ne izpolnite.
  4. Želite iti na ribolov, tokrat pa res želite nekaj ujeti.

Kaj naredi

Ideja storitve je zelo preprosta. Najprej določite, kaj za vas v danem trenutku pomeni popolno vreme. Trenutno lahko filtrirate po temperaturi, hitrosti vetra, vrsti padavin in verjetnosti padavin, kot je prikazano na spodnjem posnetku zaslona. Nato storitev opravi vse ostalo in predstavljeni vam bodo najustreznejši cilji. Rezultati so razvrščeni po številu popolnih dni, tistih, ki ustrezajo prvotni poizvedbi, najdeni za vsako mesto in omejeni na prvih pet. Popolni dnevi so zaznamovani tudi z drugačnim ozadjem.

Poglejmo, kako bi lahko storitev uporabili za primere uporabe, opredeljene v prejšnjem razdelku.

  1. Veter nastavite na 16 do 32 km / h, kar je idealno za letenje z zmajem z majhno možnostjo dežja in udobne temperature.
  2. Minimalno temperaturo nastavite na dovolj toplo, možnost dežja nastavite na 0%.
  3. Nastavite temperaturo okoli in pod 0 C, izberite sneg kot vrsto padavin in možnost, da bodo padavine visoke.
  4. Hitrost vetra nastavite na manj kot 16 km / h, malo dežja in oblakov, saj se želite izogniti preveč sončnemu vremenu in naj bodo ribe globlje v vodi, prijetne temperature.

Če želite, lahko enostavno preverite, kako priti do izbranega cilja, saj je aplikacija vgrajena s storitvijo za iskanje potovanj Momondo.

Kako sem ga zgradil

V bistvu vse, razen zunanje storitve iskanja potovanj, deluje znotraj platforme IBM Bluemix.

IBM je vsem udeležencem hackathona ponudil brezplačno preskusno različico, zato mi ni bilo treba skrbeti, kje naj zaženem aplikacijo.

Poglejmo, kako se podatki pretakajo v aplikaciji in kako se sestavljajo komponente, predstavljene v diagramu arhitekture.

Aplikacija Play gostuje v vsebniku Dockerja. Ena od njegovih storitev lahko vzpostavi stik z vremensko službo in prenese 10-dnevno napoved v Cloudant. V koraku po prenosu Spark prebere neobdelane vremenske podatke iz Cloudanta, jih obdela in shrani nazaj v Cloudant za hiter in enostaven dostop aplikacije Play.

Ko se uporabniki pomaknejo na glavno stran aplikacije, se jim prikaže obrazec, ki vsebuje različne kontrole za določitev njihovega popolnega vremena. Njihov vložek se pošlje v ozadje, ki poišče Cloudant za mesta, ki vsebujejo popolne dni. Nato se izvede še ena poizvedba za vseh deset dni napovedi za mesta, vrnjena v prejšnji poizvedbi. Pridobljeni rezultati so predstavljeni uporabnikom, celice pa predstavljajo vremenske razmere na mesto na dan. Zadnja celica vsakega mesta vsebuje povezavo do potovalne storitve. S klikom nanj bodo uporabniki preusmerjeni na spletno mesto Momondo, obrazec za iskanje leta pa bo vnaprej izpolnjen z datumom cilja in potovanja. Če je uporabnik storitev uporabljal že prej (in je v svojem brskalniku shranil piškotek), bosta morda tudi predhodno izpolnjena izvor in količina potnikov. Seveda lahko polja na tem obrazcu spremenite. Na primer, lahko poskusite z različnimi datumi potovanja v iskanju boljše vozovnice.

Tako je zgrajena aplikacija. V naslednjih razdelkih so podrobneje opisane nekatere komponente.

Slika: Komponente vremenske aplikacije.

Iskra in vpogledi v vreme

Prva faza projekta je bila namenjena ugotavljanju delovanja API-ja za vreme in drugih storitev Bluemix, sledilo pa je začetno raziskovanje vremenskih podatkov s pomočjo Sparka. Sporočil mi je, kako deluje podatkovni model in kako ga lahko uporabim v aplikaciji.

Za namen te aplikacije se uporablja samo prva izmed naslednjih končnih točk API-ja Weather REST:

GET /v2/forecast/daily/10day - Weather Standard 10-day Daily Forecast GET /v2/forecast/hourly/24hour - Weather Standard Hourly Forecast GET /v2/observations/current - Current Weather Observation GET /v2/observations/timeseries/24hour - Time-Series Observation

Končna točka se vpraša za vremensko napoved za vsako mesto, ki nas zanima, z navedbo a geokoda parameter, ki zajema zemljepisno širino in dolžino zadevnega kraja.

Zaradi narave storitve je število zahtevkov za API za vreme povezano s številom podprtih mest. Upošteval sem brezplačno omejitev Insights for Weather Service, ki je znašala 500 klicev na dan, in se odločil, da bom za demo namen šel z varnimi petdesetimi mesti turističnega tipa v Evropi. Tako lahko dnevno opravim več klicev za vsako mesto in obravnavam neuspele zahteve, ne da bi izgubil pravico do uporabe API-ja. Moral bi začeti plačevati, da bi imel dovolj prošenj za pokrivanje večine mest na svetu.

Končni cilj projekta bi bil, da bi vremenske podatke Spark za vsa mesta na svetu (~ 50.000) pomnožili z desetdnevnimi napovednimi podatki in jih izvedli večkrat na dan, da bi bile napovedi čim bolj natančne.

Vsa koda Spark je v a Jupyter zvezek. Za zdaj ni drugega načina za izvajanje del Spark. Neobdelani vremenski podatki se berejo iz Cloudant DB, obdelujejo in zapisujejo nazaj.

Cloudant NoSQL DB

Skratka, zelo prijetno se mi je delalo z Cloudant NoSQL DB. Je enostaven za uporabo in ima dober uporabniški vmesnik, ki temelji na brskalniku. Gonilnika kot takega ni, ima pa preprost REST API in interakcija prek HTTP je bila preprosta.

Vendar Bluemix Spark vključuje API za podatkovne vire Cloudant, ki ga lahko uporabljamo za branje in pisanje v Cloudant brez potrebe po nizkih klicih. Omeniti velja, da v programu Cloudant iz Sparka ni mogoče ustvariti nove baze podatkov, zato jo je treba ustvariti vnaprej, na primer s spletnim uporabniškim vmesnikom.

Play Framework

Spletna aplikacija je napisana v Scali. Zelo preprosto je. Krmilnik ponuja enostransko aplikacijo z AngularJS in Bootstrap, storitev pa je v interakciji z Weather API in Cloudant.

Zanimiv izziv, s katerim sem se soočil, je neposredno povezan s storitvijo IBM Container Service. Moj namen je bil zagnati aplikacijo na vratih 80, tako da je uporabniku prijazna. Vendar v Bluemixu nisem mogel najti nobene možnosti za posredovanje vrat Docker in preslikati zunanja vrata 80 na notranja vrata Docker 9000 aplikacije Play. Moja rešitev je bila, da tečem kot koren znotraj vsebnika (ni priporočljivo) in za urejanje aplikacije Play.conf:

# Production port play.server.http.port = '80'

Docker

Docker je bil zelo priročen, še posebej v času uvajanja v Bluemix. Ni mi bilo treba vedeti o aplikacijah Cloud Foundry Apps, skrbeti za Scala buildpacks ali kaj drugega. Lahko bi samo potisnil svojo sliko Dockerja in videl, kako se izvaja.

Za ustvarjanje slike Dockerja sem uporabil Typesafe Docker vtičnik , zato nisem potreboval niti ustrezne datoteke Docker.

Za ogled aplikacije, ki se izvaja v oblaku, po kratki začetni konfiguraciji potrebujete le nekaj ukazov:

# log in to IBM Bluemix cf login cf ic login # create the image locally sbt docker:publishLocal # rename it docker tag -f my-perfect-weather:1.0-SNAPSHOT registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0 # push it docker push registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0 # and run it cf ic run --name my-perfect-weather -p 80 -m 2048 registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0

Omeniti velja, da storitev za zabojnike Bluemix izvede oceno ranljivosti slik, preden jih je mogoče zagnati. Čeprav za mojo aplikacijo v resnici ni bilo smiselno, sem vseeno moral popraviti /etc/login.defs nadrejene slike, tako da jo je mogoče zagnati. Tukaj je Dockerfile če vas zanima.

Izzivi, v katere sem naletel

Ker je Spark še vedno svež dodatek k IBM Bluemixu, ima nekatere omejitve. Trenutno je kodo mogoče izvršiti samo kot del zvezka, zato ni mogoče razporediti zagonov. To je bilo ob koncu mojega hackathona precej odkritje. Kaj pomeni Moje popolno vreme je, da bodo predstavljeni vremenski dnevi počasi zastareli, če se prenosni računalnik Spark ne zažene znova ročno . Upam, da bo IBM to pomanjkljivost odpravil takoj.

Prav tako sem naletel na majhno netočnost v dokumentaciji API-ja Insights for Weather, ki se je pojavila, ko je opazila nekatere težave s prikazanimi rezultati. Za vrsta padavin , edine pričakovane vrednosti so bile dež in sneg , vendar sem našel tudi tretjo vrednost precip . Iz vremenskega konteksta kaže, da kaže na dež s snegom, zato ga zaradi enostavnosti aplikacije obravnavamo kot sneg.

Dosežki, na katere sem ponosen

Slika: Uporaba Dockerja in Sparka v vremenski aplikaciji.

mislim Moje popolno vreme je zelo dobra ideja in ponosen sem, da bi jo lahko zelo hitro uvedel, tako da bi združil vse te različne tehnologije. Kljub temu je kramp, z veliko ohlapnimi konci, a najpomembneje je, da deluje!

Kaj sem se naučil

V tem kratkem projektu sem se veliko naučil. V IBM Bluemixu sem bil nov, zato je bila to samostojna pustolovščina.

Še nikoli nisem slišal za Cloudant DB, toda z nekaj izkušnjami z MongoDB je bil prehod precej enostaven.

Naučil sem se tudi, da ne bi smel delati na fronti. Sem srčni razvijalec po srcu, brez talent, da stvari izgledajo lepo , zato je bilo delo z Bootstrapom in CSS vaja iskanje-kopiranje-lepljenje-spreminjanje. Najlepša hvala moji ženi za pomoč pri oblikovanju, vizualnih predstavitvah, predstavitvah in splošnih nasvetih.

Kaj sledi za Moje popolno vreme

Rad bi dodal več vremenskih kontrol in jih v bližnji prihodnosti razširil tako, da bo zajel večino sveta ali vsaj vso Evropo. Z več mesti / vremenskimi dnevi, ki ustrezajo merilom, bo zahtevnejše predstaviti najbolj popolne dni, zato obstaja možnost uporabe Spark MLlib s Spark Streaming za podatke, ki prihajajo iz sej uporabnikov.

Upam, da bo IBM kmalu dodal možnost razporejanja delovnih mest Spark, tako da bo storitev lahko popolnoma avtomatizirana.

Zaključek

Aplikacijo si lahko sami ogledate v računalniku, pametnem telefonu ali tabličnem računalniku, tako da se pomaknete do myperfectweather.eu .

Če želite doseči vrhunec pri kodi, jo gosti Github .

My Perfect Weather je nastal kot konkurenčni projekt za IBM Sparkathon s skoraj 600 udeleženci. Dobil je veliko nagrado in priljubljene navijače. Oglejte si stran projekta če bi radi vedeli več.

Potreba po hitrosti: retrospektiva ApeeScape JavaScript Coding Challenge

Back-End

Potreba po hitrosti: retrospektiva ApeeScape JavaScript Coding Challenge
Najboljši čas za objavo na TikTok za rekordne oglede v letu 2021

Najboljši čas za objavo na TikTok za rekordne oglede v letu 2021

Objava

Priljubljene Objave
Pregled iPhone SE 2020: Se ga splača kupiti za fotografiranje?
Pregled iPhone SE 2020: Se ga splača kupiti za fotografiranje?
Kako narediti posnetek zaslona na iPhoneu: 5 načinov za zajem zaslona
Kako narediti posnetek zaslona na iPhoneu: 5 načinov za zajem zaslona
Kako urejati videoposnetke v iPhonu s fotografijami in iMovie
Kako urejati videoposnetke v iPhonu s fotografijami in iMovie
Kako nastaviti arhitekturo mikro storitev v Ruby: Vodnik po korakih
Kako nastaviti arhitekturo mikro storitev v Ruby: Vodnik po korakih
Cordova Frameworks: Ionic vs. Framework7
Cordova Frameworks: Ionic vs. Framework7
 
Kako snemati družinsko fotografijo doma samo z vašim iPhoneom
Kako snemati družinsko fotografijo doma samo z vašim iPhoneom
Stalni podatki na straneh, ki se ponovno naložijo: piškotki, IndexedDB in vse, kar je vmes
Stalni podatki na straneh, ki se ponovno naložijo: piškotki, IndexedDB in vse, kar je vmes
Razbijanje procesa oblikovalskega razmišljanja
Razbijanje procesa oblikovalskega razmišljanja
Vodnik za oddaljene delavce, kako ostati zdrav
Vodnik za oddaljene delavce, kako ostati zdrav
Kako implementirati popoln dizajn uporabniškega vmesnika za iOS
Kako implementirati popoln dizajn uporabniškega vmesnika za iOS
Kategorije
Podatkovne Vede In Zbirke PodatkovKpi In AnalitikaStreljanjeProces In OrodjaInženirski ManagementOdpravljanje težavDrugoŽivljenjski Cikel IzdelkaMobilno OblikovanjeIzdelki In Ekipe

© 2023 | Vse Pravice Pridržane

socialgekon.com