Uvod u Netflix Genie

1. Pregled

U ovom uputstvu istražit ćemo Genieov motor za koji je Netflix razvio podnošenje poslova klasterima na apstraktan način.

Za ovo se uputstvo preporučuje osnovno znanje o obradi velikih podataka, na primjer s Hadoop i Spark.

2. Zašto Genie?

Zamislimo da imamo mnogo korisnika koji to trebaju predati razne zadatke u oblak koji sadrži velik broj klastera Hadoop različitih veličina. Iako su neki klasteri stvoreni za obradu podataka u određeno vrijeme, drugi su usredotočeni na isključivanje usluga radi oslobađanja resursa. Korisnici bi tako naišli na problem pronalaska pravog klastera za svoj posao.

Pod pretpostavkom da mnogi korisnici uopće ne žele stvoriti klastere ili znati za konfiguraciju, ovo bi mogao biti stvarni problem. Što kažete na to da korisnicima pružite način da jednostavno prijave svoje poslove i vrate rezultate bez potrebe da se bave postavljanjem infrastrukture?

3. Što je duh?

Netflix je Genie izgradio kao distribuirani motor za točno rješavanje gore spomenutih problema. Motor koji pruža objedinjeno RESTful API-ji za slanje poslovaautonomno. Genie razdvaja zadatke pokretanja od konfiguracije koja omogućava fleksibilno skaliranje klastera.

Međutim, Genie sam ne skalira klastere - on jednostavno ispunjava korisničke zadatke započinjanjem njihovih poslova na klasteru koji odgovara njihovim potrebama za poslom.

Zakazivanje nije nešto za što je Genie stvoren. Glavna svrha je upravljanje poslom na jednoj razini posla.

Za zakazivanje tijeka rada trebaju se koristiti drugi alati poput Apache Oozie. Zapravo, Netflix jasno kaže da:

Genie nije planer tijeka posla, kao što je Oozie. Geniejeva izvršna jedinica je jedan posao u Hadoopu, Košnici ili Svinji. Genie ne planira i ne pokreće tijekove rada - zapravo koristimo poslovni raspored (UC4) na Netflixu za pokretanje našeg ETL-a.

Ipak, Genie nudi API-je za upravljanje resursima poput klastera, aplikacija i naredbi. Nakon registracije resursa, korisnici ih mogu otkriti i početi slati svoje poslove.

Na kraju, vrijedi napomenuti da je Genie projekt otvorenog koda prilagođen manje-više specifičnim potrebama Netflixa. Igra važnu ulogu u Netflixovom okruženju koje se brzo mijenja u oblaku i integrira se s Netflixovim tehnološkim paketom.

4. Duh u akciji

Sada, pogledajmo Geniea na djelu kako bismo stekli bolje razumijevanje kako ga možemo koristiti za podnošenje poslova. Kao uvod, proći ćemo kroz demo Genie dostupan na GitHubu.

4.1. Preduvjeti

Ovaj primjer zahtijeva:

  • najnovije verzije Dockera i Dockera Compose (ili Docker Desktop, koji uključuje obje)
  • sljedeće besplatne luke: 8080, 8088, 19888, 19070, 19075, 8089, 19889, 19071 i 19076
  • relativno moćan stroj s najmanje 8 GB RAM-a od kojih bi 4 GB trebalo dodijeliti priključnoj stanici
  • najmanje 4 GB prostora na disku

4.2. Postavljanje klastera

Prije svega, moramo se pobrinuti postavljanje naših klastera pomoću Docker Compose preuzimanjem docker-compose.yml u mapu po našem izboru. Za to, kreirajmo novi direktorij s imenom demoDir. Datoteka za sastavljanje definira pet usluga koje ćemo istraživati ​​jednu po jednu.

Prvo, pogledajmo Genie poslužitelj koji će se izvoditi u spremniku s imenom genie_demo_app_3.3.9 koji preslikava priključak 8080 u Genie UI:

genie: slika: netflixoss / genie-app: 3.3.9 portovi: - "8080: 8080" zavisi_on: - genie-hadoop-prod - genie-hadoop-test - genie-apache tty: true_name_kontejnera: genie_demo_app_3.3.9

Druga usluga je genie_demo_apache_3.3.9 koji se koristi za preuzimanje datoteka koje zahtijeva demo:

genie-apache: slika: netflixoss / genie-demo-apache: 3.3.9 tty: istinsko ime_kontejnera: genie_demo_apache_3.3.9

Slijedi Genie klijent koji sadrži primjere skripti za slanje poslova pomoću Genie. Ime spremnika je genie_demo_client_3.3.9:

genie-client: slika: netflixoss / genie-demo-client: 3.3.9 ovisi_on: - genie tty: true_name spremnika: genie_demo_client_3.3.9

Naš proizvodni (SLA) Hadoop klaster je sljedeći. Ova će služba primiti poslane poslove. Upravitelj resursa klastera preslikava se na port 8088, dok poslužitelj povijesti dobiva 19888.

Ovdje ćemo napraviti malu prilagodbu i mapirati imenovani i podatkovni čvor na priključke 19070 i 19075:

genie-hadoop-prod: image: sequenceiq / hadoop-docker: 2.7.1 naredba: / bin / bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && / etc / bootstrap. sh -bash "portovi: -" 19888: 19888 "-" 19070: 50070 "-" 19075: 50075 "-" 8088: 8088 "tty: true_name_kontejnera: genie_demo_hadoop_prod_3.3.9

Na kraju, istražimo testni Hadoop spremnik koji predstavlja test klaster. Slično proizvodnom klasteru, dodijeljeni su priključci 8089 (upravitelj resursa), 19889 (poslužitelj povijesti), 19071 (imenovani čvor) i 19076 (podatkovni čvor):

genie-hadoop-test: image: sequenceiq / hadoop-docker: 2.7.1 naredba: / bin / bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && / etc / bootstrap. sh -bash "portovi: -" 19889: 19888 "-" 19071: 50070 "-" 19076: 50075 "-" 8089: 8088 "tty: true_name_kontejnera: genie_demo_hadoop_test_3.3.9

Idemo pokrenite gore spomenute spremnike trčanjem docker-compose iz demoDir. Izvršenje će trebati više vremena jer se prvi put izvodi, jer mora preuzeti demo slike:

cd demoDir docker-compose up -d

Možemo provjeriti je li klaster spreman provjerom:

  • Genie UI: // localhost: 8080
  • Korisničko sučelje SLA klastera resursa: // localhost: 8088
  • Korisničko sučelje upravitelja resursa klastera TEST: // localhost: 8089

4.3. Init Demo

Sada, nakon izvođenja demo spremnika, možemo se prijaviti u klijentski spremnik pomoću a docker izvrš naredba:

docker exec -it genie_demo_client_3.3.9 / bin / bash

Sada unutar klijentskog spremnika izvršavamo init skriptu za pripremiti klastere za prihvaćanje naših poslova:

./init_demo.py

Ako se demonstracija uspješno izvodi, korisničko sučelje Genie prikazat će podatke u klasterima, naredbama i karticama aplikacija.

4.4. Slanje posla

Kao još jedan primjer, podnesemo posao Spark za izračunavanje prvih 10 decimalnih znamenki od π. Posao možemo predati na test ili SLA predavanjem odgovarajućeg doslovnog teksta kao argumenta skripti:

./run_spark_submit_job.py sla 2.0.1 ./run_spark_submit_job.py test 2.0.1

Na kartici Poslovi u korisničkom sučelju Genie možemo kliknuti ikonu mape u svakom opisu posla da bismo došli do njegovog izlaz mapu. Od tamo, nakon uspješnog završetka, izračunatu vrijednost možemo pronaći pod stdout.

Korisničko sučelje upravitelja resursa Hadoop prikazuje i poslove klastera.

Na kraju izlazimo iz klijentskog spremnika, zaustavljamo i uklanjamo sve demo spremnike pokretanjem:

docker-komponirati dolje

Slike će i dalje biti dostupne na disku, a demo spremnike možemo ponovno pokrenuti u bilo kojem trenutku.

5. Zaključak

U ovom uputstvu predstavili smo Genie, alat za upravljanje poslom koji je razvio Netflix.

Zatim smo prošli kroz demonstraciju koja nam je dala praktični primjer kako Genie možemo koristiti u stvarnim scenarijima.

Kao i uvijek, primjer koda nalazi se na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found