Introduksjon til Netflix Genie

1. Oversikt

I denne opplæringen skal vi utforske Genie-motoren, som Netflix utviklet for sende jobber til klynger på en abstrakt måte.

Grunnleggende kunnskap om stor databehandling, for eksempel med Hadoop og Spark, anbefales for denne opplæringen.

2. Hvorfor Genie?

La oss forestille oss at vi har mange brukere som trenger det sende forskjellige oppgaver til en sky som inneholder et stort antall Hadoop-klynger i forskjellige størrelser. Mens noen klynger er opprettet for å behandle data til bestemte tidspunkter, er andre sentrert rundt å stenge tjenester for å frigjøre ressurser. Brukere vil dermed støte på problemet med å finne den rette klyngen for jobben sin.

Forutsatt at mange brukere ikke en gang vil lage klynger eller vite om konfigurasjonen, kan dette være et reelt problem. Hva med å gi brukerne en måte å bare sende inn jobbene sine og få resultatene tilbake uten å måtte forholde seg til infrastrukturoppsett?

3. Hva er Genie?

Netflix bygde Genie som en distribuert motor for nøyaktig å løse de nevnte problemene. En motor som gir enhetlig RESTful APIer for å sende jobberautonomt. Genie skiller lanseringsjobber fra konfigurasjonen som gjør det mulig å skalere klynger fleksibelt.

Imidlertid skalerer ikke Genie seg selv - det oppfyller ganske enkelt brukeroppgaver ved å starte jobbene sine i en klynge som samsvarer med jobbbehovet.

Planlegging er ikke noe Genie ble bygget for heller. Hovedformålet er jobbledelse på ett stillingsnivå.

For planlegging av arbeidsflyt, bør andre verktøy som Apache Oozie brukes. Faktisk sier Netflix klart at:

Genie er ikke en arbeidsflytplanlegger, for eksempel Oozie. Genies utførelsesenhet er en enkelt Hadoop-, Hive- eller Pig-jobb. Genie planlegger eller kjører ikke arbeidsflyter - faktisk bruker vi en enterprise scheduler (UC4) på ​​Netflix for å kjøre vår ETL.

Ikke desto mindre tilbyr Genie APIer for å administrere ressurser som klynger, applikasjoner og kommandoer. Etter å ha registrert ressursene, kan brukerne oppdage disse og begynne å sende inn jobbene sine.

Til slutt er det verdt å merke seg at Genie er et prosjekt med åpen kildekode som er skreddersydd mer eller mindre for de spesifikke behovene til Netflix. Det spiller en viktig rolle i Netflix raskt skiftende skymiljø og integreres med Netflixs teknologibunke.

4. Genie in Action

La oss nå se Genie i aksjon for å få en bedre forståelse av hvordan vi kan bruke den til å sende inn jobber. Som en introduksjon vil vi jobbe oss gjennom Genie-demoen som er tilgjengelig på GitHub.

4.1. Forutsetninger

Dette eksemplet krever:

  • de nyeste Docker- og Docker Compose-versjonene (eller Docker Desktop, som inkluderer begge deler)
  • følgende gratis porter: 8080, 8088, 19888, 19070, 19075, 8089, 19889, 19071 og 19076
  • en relativt kraftig maskin med minst 8 GB RAM, hvorav 4 GB skal tilordnes docker
  • minst 4 GB diskplass

4.2. Klyngeoppsett

Først og fremst må vi ta vare på sette opp klyngene våre ved hjelp av Docker Compose ved å laste ned docker-compose.yml til en mappe du ønsker. For dette, la oss lage en ny katalog som heter demoDir. Komponere-filen definerer fem tjenester som vi skal utforske en etter en.

La oss først se på Genie-serveren som kjører i en container som heter genie_demo_app_3.3.9 som kartlegger port 8080 til Genie UI:

genie: image: netflixoss / genie-app: 3.3.9 porter: - "8080: 8080" henger av: - genie-hadoop-prod - genie-hadoop-test - genie-apache tty: true container_name: genie_demo_app_3.3.9

Den andre tjenesten er genie_demo_apache_3.3.9 som brukes til å laste ned filer som kreves av demoen:

genie-apache: image: netflixoss / genie-demo-apache: 3.3.9 tty: true container_name: genie_demo_apache_3.3.9

Genie-klienten kommer neste, som inneholder eksempler på skript for å sende jobber med Genie. Dens containernavn er genie_demo_client_3.3.9:

genie-client: image: netflixoss / genie-demo-client: 3.3.9 depends_on: - genie tty: true container_name: genie_demo_client_3.3.9

Vår produksjon (SLA) Hadoop-klynge er neste. Denne tjenesten vil motta våre innsendte jobber. Klyngressurssjefen kartlegges til port 8088 mens historikkserveren får 19888.

Vi gjør en liten justering her og kartlegge de navngitte og datanodene til henholdsvis port 19070 og 19075:

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

Til slutt, la oss utforske test Hadoop-beholderen som representerer testklyngen. På samme måte som produksjonsklyngen tildeles portene 8089 (ressursbehandling), 19889 (historikkserver), 19071 (navngitt node) og 19076 (datanode):

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

La oss start de ovennevnte beholderne ved å kjøre docker-compose fra demoDir. Dette vil ta lengre tid å utføre når du kjører for første gang, da det må laste ned demobildene:

cd demoDir docker-komponere opp -d

Vi kan bekrefte at klyngen er klar og klar ved å sjekke:

  • Genie UI: // lokal vert: 8080
  • SLA cluster resource manager UI: // lokal vert: 8088
  • TEST cluster resource manager UI: // lokal vert: 8089

4.3. Opprinnelig demo

Nå, etter at demo-containerne er i gang, kan vi logge på klientcontaineren ved hjelp av en docker exec kommando:

docker exec -it genie_demo_client_3.3.9 / bin / bash

Nå inne i klientbeholderen utfører vi et init-skript til forbered klyngene til å akseptere jobbene våre:

./init_demo.py

Hvis demoen kjører, vil Genie UI vise data i klyngene, kommandoene og applikasjonsfanen.

4.4. Jobbsending

Som et annet eksempel, la oss sende inn en Spark-jobb for å beregne de ti første desimaltegnene på π. Vi kan sende jobben til enten test eller SLA ved å sende tilsvarende bokstavelig som et argument til skriptet:

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

Fra Jobber-fanen i Genie UI kan vi klikke på mappeikonet i hver jobbbeskrivelse for å navigere til det produksjon mappe. Derfra, på en vellykket avslutning, kan vi finne den beregnede verdien under stdout.

Hadoop ressursansvarlig brukergrensesnitt viser også klyngejobber.

Til slutt avslutter vi klientcontaineren, stopper og fjerner alle demo-containere ved å kjøre:

docker-komponer ned

Bildene vil fortsatt være tilgjengelige på disken, og vi kan når som helst starte demo-containerne igjen.

5. Konklusjon

I denne veiledningen har vi introdusert Genie, et jobbadministrasjonsverktøy utviklet av Netflix.

Vi kjørte gjennom en demo, som ga oss et praktisk eksempel på hvordan vi kan bruke Genie i virkelige scenarier.

Som alltid er kodeeksemplet på GitHub.


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