Inleiding tot Netflix Genie

1. Overzicht

In deze tutorial gaan we de Genie-engine verkennen, waarvoor Netflix heeft ontwikkeld jobs op een abstracte manier aan clusters voorleggen.

Basiskennis over big data-verwerking, bijvoorbeeld met Hadoop en Spark, wordt aanbevolen voor deze tutorial.

2. Waarom Genie?

Laten we ons voorstellen dat we veel gebruikers hebben die dat nodig hebben verzend verschillende taken naar een cloud die een groot aantal Hadoop-clusters van verschillende grootte bevat. Terwijl sommige clusters worden gemaakt om gegevens op specifieke tijden te verwerken, zijn andere gericht op het afsluiten van services om bronnen vrij te maken. Gebruikers zouden dus het probleem tegenkomen om de juiste cluster voor hun taak te vinden.

Ervan uitgaande dat veel gebruikers niet eens clusters willen maken of niet op de hoogte zijn van de configuratie, kan dit een reëel probleem zijn. Hoe zit het met het bieden van een manier voor gebruikers om eenvoudig hun vacatures in te dienen en de resultaten terug te krijgen zonder dat ze zich bezig hoeven te houden met het opzetten van de infrastructuur?

3. Wat is Genie?

Netflix heeft Genie gebouwd als een gedistribueerde engine om de bovengenoemde problemen precies op te lossen. Een motor die verenigd biedt RESTful API's voor het indienen van takenautonoom. Genie scheidt starttaken van de configuratie waardoor clusters flexibel kunnen worden geschaald.

Genie schaalt clusters echter niet zelf - het vervult gewoon gebruikerstaken door hun taken te starten op een cluster dat past bij hun taakbehoeften.

Plannen is ook niet iets waarvoor Genie is gebouwd. Het belangrijkste doel is taakbeheer op één functieniveau.

Voor workflowplanning moeten andere tools zoals Apache Oozie worden gebruikt. Netflix stelt zelfs duidelijk dat:

Genie is geen workflowplanner, zoals Oozie. De uitvoeringseenheid van Genie is een enkele Hadoop-, Hive- of Pig-taak. Genie plant of voert geen workflows uit - we gebruiken zelfs een enterprise scheduler (UC4) bij Netflix om onze ETL uit te voeren.

Desalniettemin biedt Genie API's voor het beheer van bronnen zoals clusters, applicaties en opdrachten. Na het registreren van de bronnen, kunnen gebruikers deze ontdekken en beginnen met het indienen van hun opdrachten.

Ten slotte is het vermeldenswaard dat Genie een open-sourceproject is dat min of meer is afgestemd op de specifieke behoeften van Netflix. Het speelt een belangrijke rol in de snel veranderende cloudomgeving van Netflix en kan worden geïntegreerd met de technologiestack van Netflix.

4. Genie in actie

Laten we Genie nu in actie zien om een ​​beter begrip te krijgen van hoe we het kunnen gebruiken om banen in te dienen. Als introductie werken we ons een weg door de Genie-demo die beschikbaar is op GitHub.

4.1. Vereisten

Dit voorbeeld vereist:

  • de nieuwste Docker- en Docker Compose-versies (of Docker Desktop, die beide bevat)
  • de volgende vrije poorten: 8080, 8088, 19888, 19070, 19075, 8089, 19889, 19071 en 19076
  • een relatief krachtige machine met minimaal 8GB RAM waarvan 4GB moet worden toegewezen aan docker
  • minimaal 4 GB schijfruimte

4.2. Cluster instellen

Allereerst moeten we voor zorgen het opzetten van onze clusters met Docker Compose door te downloaden docker-compose.yml naar een map naar keuze. Hiervoor maken we een nieuwe map met de naam demoDir. Het compose-bestand definieert vijf services die we een voor een gaan verkennen.

Laten we eerst eens kijken naar de Genie-server die wordt uitgevoerd in een container met de naam genie_demo_app_3.3.9 dat poort 8080 toewijst aan Genie UI:

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

De tweede service is genie_demo_apache_3.3.9 die wordt gebruikt voor het downloaden van bestanden die nodig zijn voor de demo:

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

De Genie-client komt hierna, die voorbeeldscripts bevat voor het indienen van taken met Genie. De containernaam is genie_demo_client_3.3.9:

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

Ons productie (SLA) Hadoop-cluster is de volgende. Deze dienst zal onze verzonden vacatures ontvangen. De clusterbronbeheerder wordt toegewezen aan poort 8088, terwijl de geschiedenisserver 19888 krijgt.

We zullen hier een kleine aanpassing maken en wijs de benoemde en gegevensknooppunten toe aan respectievelijk poort 19070 en 19075:

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

Laten we tot slot de test Hadoop-container onderzoeken die het testcluster vertegenwoordigt. Net als aan het productiecluster, zijn de poorten 8089 (resourcemanager), 19889 (geschiedenisserver), 19071 (genoemd knooppunt) en 19076 (gegevensknooppunt) toegewezen:

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

Laten we start de bovengenoemde containers door uit te voeren docker-compose van demoDir. Dit duurt langer als het voor de eerste keer wordt uitgevoerd, omdat het de demo-images moet downloaden:

cd demoDir docker-compose up -d

We kunnen controleren of het cluster klaar en klaar is door te controleren:

  • Genie-gebruikersinterface: // localhost: 8080
  • SLA cluster resource manager UI: // localhost: 8088
  • TEST cluster resource manager gebruikersinterface: // localhost: 8089

4.3. Eerste demo

Nu, nadat de demo-containers zijn uitgevoerd, kunnen we inloggen op de clientcontainer met een docker exec opdracht:

docker exec -it genie_demo_client_3.3.9 / bin / bash

Nu voeren we in de clientcontainer een init-script uit naar bereiden de clusters voor om onze banen te aanvaarden:

./init_demo.py

Als de demo met succes wordt uitgevoerd, toont de Genie-gebruikersinterface gegevens in de clusters, opdrachten en toepassingstabbladen.

4.4. Taak indienen

Laten we als een ander voorbeeld een Spark-taak indienen om de eerste 10 decimale cijfers van π te berekenen. We kunnen de taak naar test of SLA sturen door de bijbehorende letterlijke tekst als argument door te geven aan het script:

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

Vanaf het tabblad Vacatures in de gebruikersinterface van Genie kunnen we op het mappictogram in elke functiebeschrijving klikken om naar het output map. Van daaruit kunnen we bij een succesvolle afwerking de berekende waarde vinden onder stdout.

De gebruikersinterface van Hadoop-resourcebeheer geeft ook clustertaken weer.

Ten slotte verlaten we de clientcontainer, stoppen en verwijderen we alle demo-containers door het volgende uit te voeren:

docker-compose neer

De afbeeldingen zijn nog steeds beschikbaar op schijf en we kunnen de demo-containers op elk moment opnieuw starten.

5. Conclusie

In deze tutorial hebben we Genie geïntroduceerd, een tool voor taakbeheer die is ontwikkeld door Netflix.

Vervolgens hebben we een demo doorgenomen, die ons een praktisch voorbeeld gaf van hoe we Genie in real-life scenario's kunnen gebruiken.

Zoals altijd staat het codevoorbeeld op GitHub.