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ó.