socialgekon.com
  • Põhiline
  • Ux Disain
  • Planeerimine Ja Prognoosimine
  • Innovatsioon
  • Veaotsing
Tagumine Ots

Kuidas ma kasutasin Apache Sparki ja Dockerit häkatonil, et luua ilmarakendus

Oma kahes oma eelmises artiklis tutvustasin publikule Apache Spark ja Docker . Kätte on jõudnud aeg, kus ma näitasin teile täiesti toimivat rakendust, mis sisaldab mõlemat ülalnimetatud tehnoloogiat.

Motivatsioon 'sadas taevast alla andmete kujul' ja selle põhjustas IBMi korraldatud häkaton. Sparkathon Eesmärk oli kasutada ilmastikutingimustega seotud mobiilirakenduste loomiseks IBM Bluemixi Apache Sparki ilmaandmeid ja Analyticsit.

IBM on tugevalt investeerides Sparki ja see ostis hiljuti digitaalse osa Ilmakanal . Seetõttu näib see sündmus nende reklaamimiseks ideaalne.



Inspiratsioon

Kas olete kunagi oma asukohas ilmade üle kurtnud, kas teil oli plaanitud vaba aeg ja raha kulutada, kuid ei teadnud kus minema? Kui vastus on jaatav, siis teile tõesti meeldiks Minu täiuslik ilm rakendus.

Pilt: rakenduse jaoks kasutage juhtumeid.

Selleks, et illustreerida rakenduse kasutamist, on siin mõned kasutamisjuhud:

  1. Teil on laps, kellega lubasite lohega lennata seda nädal, kuid seal, kus elate, on täiesti tuulevaikne ja te ei soovi oma sõna rikkuda.
  2. Te elate tuulises ja vihmases kohas nagu mina (Edinburgh, Šotimaa) ja soovite oma nahal soojust tunda ning kindlasti ei vihma.
  3. Teil on soov ehitada lumememm ja te ei puhka enne, kui selle täidate.
  4. Sa tahad kalale minna ja seekord tahad tõesti midagi püüda.

Mida see teeb

Teenuse idee on väga lihtne. Esiteks määrate kindlaks, mida tähendab teie jaoks ideaalne ilm antud ajahetkel. Praegu saate filtreerida temperatuuri, tuule kiiruse, sademete tüübi ja sademete tõenäosuse järgi, nagu on näidatud alloleval ekraanipildil. Siis teenus teeb ülejäänud ja teile kuvatakse kõige paremini sobivad sihtkohad. Tulemused on sorteeritud täiuslike päevade arvu järgi, vastates algsele päringule, leitud iga linna kohta ja piirdudes viie parima hulka. Täiuslikud päevad on tähistatud ka erineva taustaga.

Vaatame, kuidas saaksime teenust kasutada eelmises jaotises määratletud kasutusjuhtumite jaoks.

  1. Seadke tuuleks vahemikus 16–32 km / h, mis sobib ideaalselt lohe lennutamiseks, väikese vihmasaju ja mugava temperatuuriga.
  2. Määrake min. Temperatuur teie jaoks piisavalt soojaks, määrake vihma tõenäosuseks 0%.
  3. Seadke temperatuur 0 ° C ümbrusse ja alla selle, valige sademete tüübiks lumi ja sademete võimalus on kõrge.
  4. Määrake tuule kiiruseks alla 16 km / h, vähese vihma ja pilvedega, kuna soovite vältida liiga päikeselist aega ja lasta kaladel minna sügavamale vette, mugav temperatuur.

Soovi korral saate hõlpsalt uurida, kuidas oma valitud sihtkohta jõuda, kuna rakendus on integreeritud reisiotsingu teenusega Momondo.

Kuidas ma selle ehitasin

Põhimõtteliselt töötab kõik peale välise reisiotsingu teenuse IBM Bluemix platvormil.

IBM pakkus kõigile häkatonil osalejatele tasuta prooviversiooni, nii et ma ei pidanud muretsema, kus rakendust käivitada.

Vaatame, kuidas rakenduses andmed liiguvad ja kuidas arhitektuuriskeemil toodud komponendid kokku saavad.

Play rakendus on hostitud Dockeri konteineris. Üks selle teenustest on võimeline ühendust võtma ilmateenistusega ja alla laadima 10-päevase prognoosi Cloudanti. Allalaadimisele järgnevas etapis loeb Spark Cloudanti toored ilmaandmed, töötleb neid ja salvestab need tagasi Cloudanti, et Play rakenduse abil saaksite seda kiiresti ja hõlpsalt juurde pääseda.

Kui kasutajad navigeerivad rakenduse põhilehele, kuvatakse neile ideaalse ilma määratlemiseks vorm, mis sisaldab erinevaid juhtnuppe. Nende sisend edastatakse taustaprogrammile, mis esitab päringu Cloudant linnadele, kus on ideaalsed päevad. Seejärel tehakse uus päring kõigi kümne prognoosipäeva kohta eelmises päringus tagastatud linnade kohta. Saadud tulemused esitatakse kasutajatele ja lahtrid tähistavad ilmastikutingimusi linna kohta päevas. Iga linna viimases lahtris on link reisiteenusega. Sellel klõpsates suunatakse kasutajad Momondo veebisaidile ning lennu otsinguvorm täidetakse eelnevalt koos sihtkoha ja reisikuupäevadega. Kui kasutaja on teenust varem kasutanud (ja see salvestas brauserisse küpsise), võidakse ka reisijate päritolu ja arv eelnevalt täita. Muidugi saab selle vormi välju muuta. Näiteks võib parema hinna otsimiseks proovida erinevaid reisikuupäevi.

See on peaaegu nii, kuidas rakendus on üles ehitatud. Järgmistes jaotistes käsitletakse mõningaid komponente üksikasjalikumalt.

Pilt: ilmarakenduse komponendid.

Säde ja ilmateadmised

Projekti esimene etapp kulus Weather API ja teiste Bluemixi teenuste toimimise väljaselgitamisele ning sellele järgnes esialgne ilmaandmete uurimine Sparki abil. See andis mulle mõista, kuidas andmemudel toimis ja kuidas seda rakenduses rakendada.

Selle rakenduse jaoks kasutatakse järgmistest Weather REST API lõpp-punktidest ainult esimest:

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

Lõpp-punkti küsitakse iga huvipakkuva linna ilmaprognoosi jaoks, esitades a geokood parameeter, mis võtab arvesse kõnealuse koha laius- ja pikkuskraadi.

Teenuse olemuse tõttu on Weather API-le tehtud taotluste arv korrelatsioonis toetatud linnade arvuga. Kaalusin Insights for Weather Service'i tasuta taseme limiiti, mis oli 500 kõnet päevas, ja otsustasin, et tutvustan demo eesmärgil turvalist arvu viiskümmend turismitüüpi linna Euroopas. See võimaldas mul teha iga linna jaoks mitu kõnet päevas ja käsitleda ebaõnnestunud taotlusi, ilma et oleks oht kaotada API kasutamise õigust. Peaksin hakkama maksma, et mul oleks piisavalt taotlusi enamiku maailma linnade katmiseks.

Projekti lõppeesmärk oleks korrutada kümne päeva prognoosiandmetega Sparki kõigi maailma linnade (~ 50 000) ilmastikuolude ilmateate ja teostada neid mitu korda päevas, et ennustused oleksid võimalikult täpsed.

Kogu Sparki kood asub a Jupyter märkmik. Siiani pole muud võimalust Sparki tööde teostamiseks. Toored ilmaandmed loetakse Cloudant DB-st, töödeldakse ja kirjutatakse tagasi.

Pilves NoSQL DB

Ühesõnaga, minu arvates oli Cloudant NoSQL DB-ga töötamine väga meeldiv. Seda on lihtne kasutada ja sellel on hea brauseripõhine kasutajaliides. Draiverit kui sellist pole, kuid sellel on lihtne REST API ja HTTP kaudu oli suhtlemine lihtne.

Kuid Bluemix Spark sisaldab Cloudant Data Sources API-d, mida saaks kasutada Cloudanti lugemiseks ja kirjutamiseks ilma madalama kõne vajaduseta. Väärib märkimist, et Cloudist ei saa Sparkist uut andmebaasi luua, nii et see tuleb eelnevalt luua, näiteks veebi kasutajaliidese abil.

Play raamistik

Veebirakendus on kirjutatud Scalas. See on väga lihtne. Kontroller teenindab ühelehelist rakendust koos AngularJSi ja Bootstrapiga ning teenus suhtleb Weather API ja Cloudantiga.

Üks huvitav väljakutse, millega kokku puutusin, on otseselt seotud IBM-i konteinerteenusega. Minu eesmärk oli käivitada rakendus pordis 80, nii et see oleks kasutajasõbralik. Kuid ma ei leidnud Bluemixist kuidagi võimalust kasutada Dockeri pordi edastamist ja välise pordi 80 kaardistamist Play rakenduse Dockeri sisemisse porti 9000. Minu lahendus pidi jooksma nagu juur konteineri sees (pole soovitatav tava) ja Play rakenduse redigeerimiseks.conf:

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

Docker

Docker tuli tõesti kasuks, eriti Bluemixi juurutamise ajal. Mul ei olnud vaja teadmisi Cloud Foundry Appsist, muretseda Scala ehituskomplektide ega muu pärast. Ma saaksin lihtsalt oma Dockeri pilti lükata ja seda näha.

Dockeri pildi loomiseks kasutasin Typesafe'i Dockeri pistikprogramm , nii et mul polnud vaja isegi korralikku Dockerfile'i.

Rakenduse pilves töötamise nägemiseks pärast lühikest algset konfigureerimist on vaja ainult mõnda käsku:

# 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

Väärib märkimist, et Bluemix Container Service teostab piltide haavatavuse hindamise enne nende käivitamist. Kuigi minu rakendusel polnud tegelikult mõtet, pidin ikkagi /etc/login.defs lappima vanempildi osa, nii et seda saab käivitada. Siin on Dockerfile kui olete huvitatud.

Väljakutsed, kuhu ma jooksin

Kuna Spark on IBM Bluemixile veel üsna värske lisand, on sellel teatud piirangud. Praegu saab koodi käivitada ainult sülearvuti osana, seega pole jooksu ajastamise võimalust. See oli hackathonile omase aja lõpus üsna avastus. Mida see tähendab Minu täiuslik ilm on see, et esitatud ilmapäevad aeguvad aeglaselt, kui Sparki märkmikku uuesti ei käivitata käsitsi . Loodan, et IBM lahendab selle puuduse kiiresti.

Samuti kohtasin Insights for Weather API dokumentatsioonis väikest ebatäpsust, mis ilmus pärast kuvatud tulemuste mõningate probleemide märkamist. Jaoks sademete tüüp , ainsad oodatavad väärtused olid vihma ja lumi , kuid leidsin ka kolmanda väärtuse sademed . Ilmakonteksti põhjal näib see vihma vihmaga viitavat, nii et rakenduse lihtsuse huvides käsitletakse seda lumena.

Saavutused, mille üle ma olen uhke

Pilt: Dockeri ja Sparki kasutamine ilmarakenduses.

ma mõtlen Minu täiuslik ilm on üsna lahe idee ja olen uhke, et sain selle rakendada väga kiiresti, ühendades kõik need erinevad tehnoloogiad omavahel. Sellegipoolest on see häkkimine, millel on palju lõdvaid otsi, kuid mis kõige tähtsam on see, et see töötab!

Mida ma õppisin

Õppisin selle lühikese projekti käigus üsna palju. IBM Bluemix oli mulle uus, nii et see oli omaette seiklus.

Ma pole kunagi varem Cloudant DB-st kuulnud, kuid MongoDB mõningate kogemustega oli üleminek üsna lihtne.

Sain ka teada, et ma ei peaks töötama frontendiga. Olen hingelt taustarendaja, ilma anne teha asjad kenaks , nii et Bootstrapi ja CSS-iga töötamine oli otsingu-kopeerimise-kleepimise-muutmise harjutus. Suur tänu mu naisele, et ta aitas kujunduse, visuaalide, demo ja üldiste nõuannete osas.

Mis saab edasi minu täiuslikust ilmast

Tahaksin lisada lähitulevikus rohkem ilmastikutingimusi ja laiendada seda suurema osa maailmast või vähemalt kogu Euroopast. Kui kriteeriumidele vastab rohkem linnu / ilmapäevi, on kõige täiuslikumate päevade esitamine keerukam, seega on kasutajate seanssidest pärinevate andmete jaoks võimalik kasutada Spark MLlibi koos Spark Streaminguga.

Loodan, et IBM lisab Sparki tööde ajastamise võimaluse peagi, nii et teenus võib muutuda täielikult automatiseeritud.

Järeldus

Rakenduse saate oma arvutis, nutitelefonis või tahvelarvutis vaadata navigeerides myperfectweather.eu .

Kui soovite koodi tippu saada, on see hostitud Github .

Minu täiuslik ilm loodi IBM Sparkathoni võistleva projektina, milles osales ligi 600 osalejat. See võitis peaauhinna ja fännide lemmiku. Vaadake projekti leht kui soovite rohkem teada saada.

Scala vs Java: Miks peaksin Scalat õppima?

Tehnoloogia

Scala vs Java: Miks peaksin Scalat õppima?
Kasvav kasv: tehke selle avatud lähtekoodiga oma kohordianalüüs

Kasvav kasv: tehke selle avatud lähtekoodiga oma kohordianalüüs

Andmeteadus Ja Andmebaasid

Lemmik Postitused
Kuidas veenda e-kaubanduse ostjaid UX-disaini abil
Kuidas veenda e-kaubanduse ostjaid UX-disaini abil
Sissejuhatus PHP 7-sse: mis on uut ja mis kadunud
Sissejuhatus PHP 7-sse: mis on uut ja mis kadunud
Mitme põlvkonna tööjõu võimu vabastamine, 1. osa: kas vanusel on tähtsust?
Mitme põlvkonna tööjõu võimu vabastamine, 1. osa: kas vanusel on tähtsust?
Tööstuse ärkamine: madratsitööstuse häired
Tööstuse ärkamine: madratsitööstuse häired
Sügav sukeldumine tugevdamise õppesse
Sügav sukeldumine tugevdamise õppesse
 
Lemmikloomade pildistamine iPhone'is: kuidas teha kõige armsamaid lemmikloomafotosid
Lemmikloomade pildistamine iPhone'is: kuidas teha kõige armsamaid lemmikloomafotosid
Juhend npm: paketihaldur Node.js
Juhend npm: paketihaldur Node.js
Juhend: kuidas tõhusat UX-i uuringut läbi viia
Juhend: kuidas tõhusat UX-i uuringut läbi viia
Monoreposi juhend esiotsa koodi jaoks
Monoreposi juhend esiotsa koodi jaoks
Flutter juhendaja: kuidas luua oma esimene Flutter App
Flutter juhendaja: kuidas luua oma esimene Flutter App
Kategooriad
Disaineri EluKasumlikkus Ja TõhususJaotatud VõistkonnadPlaneerimine Ja PrognoosimineInvestorid Ja RahastamineFinantsprotsessidladustamineTöö TulevikUx DisainBrändikujundus

© 2023 | Kõik Õigused Kaitstud

socialgekon.com