Bevezetés a Netflix Genie-be
1. Áttekintés
Ebben az oktatóanyagban felfedezzük a Genie motort, amelyet a Netflix fejlesztett ki munkahelyek absztrakt módon történő benyújtása a klaszterekhez.
Ehhez az oktatóanyaghoz alapvető ismeretek ajánlottak a nagy adatfeldolgozásról, például a Hadoop és a Spark használatával.
2. Miért Genie?
Képzeljük el, hogy sok felhasználónk van, akinek szüksége van rá küldjön be különféle feladatokat egy felhőbe, amely nagyszámú, különböző méretű Hadoop-fürtöt tartalmaz. Míg egyes klaszterek az adatok meghatározott időpontokban történő feldolgozására jönnek létre, mások az erőforrások felszabadítása érdekében a szolgáltatások leállítására összpontosítanak. A felhasználóknak tehát problémájuk támadna, ha megtalálják a munkájukhoz megfelelő fürtöt.
Feltéve, hogy sok felhasználó nem is akar klasztereket létrehozni, vagy nem tud a konfigurációról, ez valódi probléma lehet. Mit szólnál ahhoz, hogy a felhasználóknak egyszerűen elküldhessék munkájukat és visszaszerezzék az eredményeket anélkül, hogy az infrastruktúra beállításával kellene foglalkozniuk?
3. Mi az a Genie?
A Netflix a Genie-t elosztott motorként építette fel a fent említett problémák pontos megoldására. Motor, amely egységes RESTful API-k a feladatok beküldéséhezautonóm módon. Genie elválasztja az indító feladatokat a konfigurációtól, amely rugalmasan lehetővé teszi a fürtök méretezését.
A Genie azonban nem méretezi ki a klasztereket - egyszerűen csak úgy teljesíti a felhasználói feladatokat, hogy munkáját egy olyan munkaterületen kezdik, amely megfelel a munkájuknak
Az ütemezést sem a Genie építette fel. A fő cél a munkakör kezelése egyetlen munkaszinten.
A munkafolyamat ütemezéséhez más eszközöket, például az Apache Oozie-t kell használni. Valójában a Netflix egyértelműen kijelenti, hogy:
A Genie nem egy munkafolyamat-ütemező, például Oozie. Genie végrehajtási egysége egyetlen Hadoop, Hive vagy Pig disznóság. A Genie nem ütemezi és nem futtatja a munkafolyamatokat - valójában vállalati ütemezőt (UC4) használunk a Netflixnél az ETL futtatásához.
Ennek ellenére a Genie API-kat kínál az erőforrások, például a fürtök, alkalmazások és parancsok kezelésére. Az erőforrások regisztrálása után a felhasználók felfedezhetik ezeket, és elkezdhetik beküldeni a munkájukat.
Végül érdemes megjegyezni, hogy a Genie egy nyílt forráskódú projekt, amely nagyjából a Netflix sajátos igényeihez igazodik. Fontos szerepet játszik a Netflix gyorsan változó felhőkörnyezetében, és integrálódik a Netflix technológiai veremjébe.
4. Genie in Action
Most nézzük meg Genie működését, hogy jobban megértsük, hogyan használhatjuk fel a munkák benyújtására. Bevezetésként végig fogjuk járni a GitHubon elérhető Genie bemutatót.
4.1. Előfeltételek
Ez a példa megköveteli:
- a legújabb Docker és Docker Compose verziók (vagy a Docker Desktop, amely mindkettőt tartalmazza)
- a következő szabad portok: 8080, 8088, 19888, 19070, 19075, 8089, 19889, 19071 és 19076
- egy viszonylag nagy teljesítményű gép, legalább 8 GB RAM-mal, amelyből 4 GB-ot a dokkolóhoz kell rendelni
- legalább 4 GB lemezterület
4.2. Fürt beállítása
Először is gondoskodnunk kell fürtjeink beállítása a Docker Compose használatával letöltéssel dokkoló-összeállít.yml egy általunk választott mappába. Ehhez hozzunk létre egy új könyvtárat, amelynek neve demoDir. Az írási fájl öt szolgáltatást határoz meg, amelyeket egyenként fogunk felfedezni.
Először vessünk egy pillantást a Genie szerverre, amely egy nevű tárolóban fog futni genie_demo_app_3.3.9 amely a 8080-as portot hozzárendeli a Genie felhasználói felülethez:
genie: image: netflixoss / genie-app: 3.3.9 portok: - "8080: 8080" attól függ: - genie-hadoop-prod - genie-hadoop-test - genie-apache tty: true container_name: genie_demo_app_3.3.9
A második szolgáltatás az genie_demo_apache_3.3.9 amely a demo által megkövetelt fájlok letöltésére szolgál:
genie-apache: kép: netflixoss / genie-demo-apache: 3.3.9 tty: true container_name: genie_demo_apache_3.3.9
Következik a Genie kliens, amely példaszkripteket tartalmaz a munkák Genie használatával történő beküldéséhez. A tároló neve: genie_demo_client_3.3.9:
genie-client: image: netflixoss / genie-demo-client: 3.3.9 attól függ: - genie tty: true container_name: genie_demo_client_3.3.9
A következő a gyártási (SLA) Hadoop klaszterünk. Ez a szolgáltatás megkapja a beküldött állásainkat. A fürt erőforrás-kezelő a 8088-as portra térképez, míg az előzménykiszolgáló 19888-at kap.
Itt egy kis kiigazítást hajtunk végre és hozzárendeli a megnevezett és az adatcsomópontokat az 19070, illetve az 19075 portra:
genie-hadoop-prod: image: sekvenciq / hadoop-docker: 2.7.1 parancs: / bin / bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && / etc / bootstrap. sh -bash "portok: -" 19888: 19888 "-" 19070: 50070 "-" 19075: 50075 "-" 8088: 8088 "tty: true container_name: genie_demo_hadoop_prod_3.3.9
Végül vizsgáljuk meg a tesztcsoportot képviselő Hadoop teszttartályt. A termelési fürthöz hasonlóan a 8089 (erőforrás-kezelő), az 19889 (az előzménykiszolgáló), az 19071 (az elnevezésű csomópont) és az 19076 (adatcsomópont) portok vannak hozzárendelve:
genie-hadoop-test: image: sequenciq / hadoop-docker: 2.7.1 parancs: / bin / bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && / etc / bootstrap. sh -bash "portok: -" 19889: 19888 "-" 19071: 50070 "-" 19076: 50075 "-" 8089: 8088 "tty: true container_name: genie_demo_hadoop_test_3.3.9
Nézzük indítsa el a fent említett tartályokat futással dokkoló-ír tól től demoDir. Ennek végrehajtása hosszabb ideig tart az első futtatáskor, mivel le kell töltenie a bemutató képeket:
cd demoDir docker-compose up -d
Ellenőrizhetjük, hogy a fürt készen áll-e és ellenőrizheti:
- Genie felhasználói felület: // localhost: 8080
- SLA-fürt erőforrás-kezelő felhasználói felület: // localhost: 8088
- TEST fürt erőforrás-kezelő felhasználói felület: // localhost: 8089
4.3. Init Demo
Most, miután a bemutató tárolók futnak, az a használatával bejelentkezhetünk az ügyféltárolóba dokkoló exec parancs:
docker exec -it genie_demo_client_3.3.9 / bin / bash
Most az ügyféltárolón belül végrehajtunk egy init szkriptet felkészíti a klasztereket munkánk elfogadására:
./init_demo.py
Ha a bemutató sikeresen fut, a Genie felhasználói felület megjeleníti az adatokat a fürtökben, a parancsokban és az alkalmazás lapokon.
4.4. Munka benyújtása
Másik példaként nyújtsunk be egy Spark-feladatot a π első 10 tizedesjegyének kiszámításához. Feladhatjuk a munkát tesztelésre vagy SLA-ra úgy, hogy argumentumként átadjuk a megfelelő literált a szkriptnek:
./run_spark_submit_job.py sla 2.0.1 ./run_spark_submit_job.py teszt 2.0.1
A Genie felhasználói felület Munkák lapján az egyes munkaköri leírásokban a mappa ikonra kattintva navigálhatunk Kimenet mappába. Innen a sikeres befejezés után megtalálhatjuk a számított értéket stdout.
A Hadoop erőforrás-kezelő felhasználói felület fürtfeladatokat is megjelenít.
Végül kilépünk az ügyféltárolóból, leállítjuk és eltávolítjuk az összes demotárolót a futtatással:
dokkoló-komponálj le
A képek továbbra is elérhetők lesznek lemezen, és bármikor újraindíthatjuk a bemutató tárolókat.
5. Következtetés
Ebben az oktatóanyagban bemutattuk a Genie, a Netflix által kifejlesztett munkakezelő eszközt.
Ezután átfutottunk egy bemutatót, amely gyakorlati példát adott arra, hogy miként használhatjuk a Genit valós élethelyzetekben.
Mint mindig, a kódpélda a GitHubon található.