Két korábbi cikkemben bemutattam a hallgatóságot Apache Spark és Dokkmunkás . Eljött az idő, amikor bemutattam egy teljesen működőképes alkalmazást, amely magában foglalja a fent említett mindkét technológiát.
A motiváció „adat formájában esett az égből”, és az IBM által szervezett hackathon váltotta ki. Sparkathon's A cél az időjárási adatok és az Analytics elemzése volt az Apache Spark for IBM Bluemix számára az időjárással kapcsolatos mobil alkalmazások létrehozásához.
Az IBM erősen befektetés a Sparkba , és nemrégiben megvette a Az Időjárás-csatorna . Ennek következtében ez az esemény tökéletesnek tűnik a nyilvánosság számára.
Panaszkodott valaha a tartózkodási helyének időjárására, volt-e valamilyen tervezett szabadideje és elköltendő pénze, de nem tudta hol menni? Ha a válasz igen, akkor nagyon szeretné Tökéletes időjárás kb.
Csak annak bemutatására, hogy az alkalmazást hogyan lehet használni, íme néhány felhasználási eset:
A szolgáltatás mögött rejlő ötlet nagyon egyszerű. Először határozza meg, hogy a tökéletes időjárás mit jelent az Ön számára az adott pillanatban. Jelenleg szűrhet hőmérséklet, szélsebesség, csapadék típusa és a csapadék valószínűsége szerint, az alábbi képernyőképen látható módon. Ezután a szolgáltatás elvégzi a többit, és a legjobban illő úticélokat mutatják be Önnek. Az eredményeket a tökéletes napok száma szerint rendezzük, azok, amelyek megfelelnek az eredeti lekérdezésnek, az egyes városok esetében megtalálhatók és az első ötre korlátozódnak. A tökéletes napokat más háttérrel is megjelölik.
konvertálja a stringet time javascriptté
Nézzük meg, hogyan használhatnánk a szolgáltatást az előző szakaszban meghatározott használati esetekre.
Ha szeretné, könnyedén megnézheti, hogyan juthat el a választott úti célhoz, mivel az alkalmazás integrálva van a Momondo utazási keresési szolgáltatással.
Alapvetően a külső utazási keresési szolgáltatás kivételével minden az IBM Bluemix platformon belül fut.
Az IBM ingyenes próbaverziót ajánlott fel a hackathon összes résztvevőjének, így nem kellett aggódnom, hogy hol futtassam az alkalmazást.
Lássuk, hogyan áramlanak az adatok az alkalmazásban, és hogyan állnak össze az architektúra diagramban bemutatott összetevők.
A Play alkalmazás egy Docker-tároló belsejében található. Egyik szolgáltatása képes felvenni a kapcsolatot az Meteorológiai Szolgálattal és letölteni a 10 napos előrejelzést a Cloudant-ba. A letöltést követő lépésben a Spark beolvassa a felhőalapú időjárási adatokat a Cloudantból, feldolgozza és visszatárolja a Cloudantba a Play alkalmazás gyors és egyszerű eléréséhez.
Amikor a felhasználók az alkalmazás főoldalára navigálnak, megjelenik a különféle vezérlőket tartalmazó űrlap a tökéletes időjárás meghatározásához. Bevitelüket elküldik a háttérprogramnak, amely a tökéletes napokat tartalmazó városokra vonatkozóan kérdezi a Cloudant. Ezután újabb lekérdezés készül az előrejelzés mind a tíz napjára az előző lekérdezésben visszaadott városokra vonatkozóan. Az elért eredményeket bemutatjuk a felhasználóknak, és a cellák az egyes városok napi időjárási viszonyait mutatják. Minden város utolsó cellája összekapcsolja az utazási szolgáltatást. Ha rákattint, a felhasználók a Momondo webhelyére kerülnek, és a járatkeresési űrlap előre kitölti az úti célt és az utazás dátumát. Ha a felhasználó korábban használta a szolgáltatást (és cookie-t tárolt a böngészőjében), akkor az utazók eredete és mennyisége is előre kitölthető. Természetesen ezen az űrlapon a mezők megváltoztathatók. Például kipróbálhat különböző utazási dátumokat a jobb viteldíj keresése érdekében.
Nagyjából így épül fel az alkalmazás. A következő szakaszok az alkatrészek néhány részletével foglalkoznak.
A projekt első szakaszát annak kitalálásával töltötték, hogy miként működik a Weather API és a többi Bluemix szolgáltatás, majd ezt követte az időjárási adatok kezdeti feltárása a Spark segítségével. Ez megértette velem az adatmodell működését és alkalmazhatóságát az alkalmazásban.
Az alkalmazás alkalmazásában a következő Weather REST API végpontok közül csak az elsőt használják:
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
A végpontot az összes érdekes város időjárás-előrejelzéséhez kérdezzük le a geokód paraméter, amely a kérdéses hely szélességi és hosszúsági fokát veszi fel.
A szolgáltatás jellege miatt a Weather API-nak küldött kérések száma korrelál a támogatott városok számával. Figyelembe vettem az Insights for Weather Service ingyenes szintjét, amely napi 500 hívást jelentett, és úgy döntöttem, hogy a bemutató céljából biztonságos, ötven turisztikai típusú városba megyek Európában. Ez lehetővé tette, hogy naponta több hívást is indítsak minden városban, és kezeljem a sikertelen kéréseket anélkül, hogy kockáztatnám az API használatának jogát. El kellene kezdenem fizetni, hogy elegendő kérésem legyen a világ legtöbb városára.
A projekt végső célja az lenne, hogy a világ összes városának (~ 50 000) Spark-ropogós időjárási adatait megszorozzuk tíznapos előrejelzési adatokkal, és naponta többször elvégezzük, hogy az előrejelzések a lehető legpontosabbak legyenek.
Az összes Spark kód a Jupyter jegyzetfüzet. Eddig nincs más lehetőség a Spark munkák végrehajtására. A nyers időjárási adatokat a Cloudant DB olvassa, feldolgozza és visszaírja.
Röviden: nagyon kellemesnek találtam a Cloudant NoSQL DB-vel való munkát. Könnyen használható, és jó böngészőalapú felhasználói felülettel rendelkezik. Nincs ilyen illesztőprogram, de egyszerű REST API-val rendelkezik, és egyszerű volt a HTTP-n keresztüli interakció.
Azonban a Bluemix Spark tartalmaz egy Cloudant Data Sources API-t, amelyet fel lehet használni a Cloudant olvasására és írására alacsony szintű hívások nélkül. Érdemes megjegyezni, hogy nem lehet új adatbázist létrehozni a Cloudantban a Sparkból, ezért azt előzetesen létre kell hozni, például a webes felhasználói felület segítségével.
A webes alkalmazás Scala nyelven íródott. Nagyon egyszerű. A vezérlő egyoldalas alkalmazást szolgál ki az AngularJS és a Bootstrap szolgáltatással, a szolgáltatás pedig kölcsönhatásba lép a Weather API-val és a Cloudant-tal.
hogyan lehet megváltoztatni egy osztályváltozót a pythonban
Egy érdekes kihívás, amellyel szembesültem, közvetlenül kapcsolódik az IBM Container Service-hez. Az volt a szándékom, hogy az alkalmazást a 80-as porton futtassam, így felhasználóbarát. A Bluemix-ben azonban nem találtam semmilyen módot a Docker port továbbításának használatára, és a külső 80-as port leképezésére a Play alkalmazás Docker 9000 belső portjához. A megoldásom a következő volt: gyökér a tároló belsejében (nem ajánlott gyakorlat) és a Play alkalmazásának szerkesztéséhez.conf:
# Production port play.server.http.port = '80'
A Docker nagyon hasznos volt, különösen a Bluemix-be történő telepítés idején. Nem kellett semmiféle ismeretem a Cloud Foundry Apps-ről, nem kellett aggódnom a Scala build-ek miatt vagy bármi más miatt. Csak lökhettem a Docker képemet, és láttam, ahogy fut.
A Docker kép létrehozásához Typesafe-t használtam Docker bővítmény , így nem is kellett egy megfelelő Dockerfile.
Csak néhány parancsra van szükség ahhoz, hogy az alkalmazás rövid kezdeti konfiguráció után a felhőben fusson:
# 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
Érdemes megjegyezni, hogy a Bluemix Container Service futtatásuk előtt elvégzi a képek biztonsági résének felmérését. Annak ellenére, hogy az alkalmazásomnak nem igazán volt értelme, mégis javítanom kellett /etc/login.defs
a szülő képének, így futtatható. Itt van a Dockerfile ha érdekel.
Mivel a Spark még mindig nagyon friss kiegészítője az IBM Bluemix-nek, bizonyos korlátai vannak. Jelenleg a kód csak egy notebook részeként hajtható végre, így nincs mód a futások ütemezésére. Ez meglehetősen nagy felfedezés volt a hackathonra szánt idő végén. Mit jelent ez Tökéletes időjárás az, hogy a bemutatott időjárási napok lassan elavulnak, ha a Spark notebookot nem futtatják újra manuálisan . Remélem, hogy az IBM azonnal megoldja ezt a hiányosságot.
Az Insights for Weather API dokumentációjában egy kis pontatlanságra is bukkantam, amely felszínre került, miután észrevettem néhány problémát a megjelenített eredményekkel kapcsolatban. A csapadék típusa , az egyetlen elvárt érték az volt eső és hó , de találtam egy harmadik értéket is csapadék . Az időjárási viszonyokból úgy tűnik, hogy az esőt havazással jelzi, így az alkalmazás egyszerűsége érdekében hónak tekintik.
gondolom Tökéletes időjárás nagyon jó ötlet, és büszke vagyok arra, hogy nagyon gyorsan meg tudtam valósítani, összekeverve a különféle technológiákat. Mindazonáltal ez egy hack, sok laza vége van, de ami a legfontosabb, hogy működik!
Elég sokat tanultam e rövid projekt során. Új voltam az IBM Bluemix-ben, így ez önmagában is kaland volt.
Soha nem hallottam még a Cloudant DB-ről, de a MongoDB némi tapasztalatával az átmenet meglehetősen könnyű volt.
Azt is megtudtam, hogy nem szabad egy frontenden dolgozni. Szívemben háttérfejlesztő vagyok, a tehetség, hogy a dolgok szépnek tűnjenek , így a Bootstrap-tal és a CSS-sel végzett munka keresés-másolás-beillesztés-módosítás gyakorlat volt. Nagyon köszönöm a feleségemnek, hogy segített a tervezésben, a látványban, a bemutatóban és az általános tanácsokban.
Szeretnék még további időjárási szabályokat hozzáadni, és a közeljövőben kiterjeszteni a világ legnagyobb részére, vagy legalábbis egész Európára. Ha több város / időjárási nap felel meg a kritériumoknak, akkor a legtökéletesebb napok bemutatása is nagyobb kihívást jelent, így lehetőség van a Spark MLlib és a Spark Streaming használatára a felhasználók munkameneteiből származó adatokhoz.
Remélem, hogy az IBM hamarosan hozzáadja a Spark-feladatok ütemezésének lehetőségét, így a szolgáltatás teljesen automatizálhatóvá válhat.
Megtekintheti saját maga számára az alkalmazást számítógépén, okostelefonján vagy táblagépén, ha navigál a következőre: myperfectweather.eu .
Ha csúcsot szeretne elérni a kódnál, akkor az a Github .
A My Perfect Weather az IBM Sparkathon versengő projektjeként jött létre, közel 600 résztvevővel. Elnyerte a fődíjat és a rajongói kedvencet. Nézze meg a projekt oldal ha szeretne többet megtudni.