pikpy

Een Python-tool om varkensrapporten te beheren
Download nu

pikpy Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • MIT/X Consortium Lic...
  • Prijs:
  • FREE
  • Naam uitgever:
  • Marshall Weir

pikpy Tags


pikpy Beschrijving

Een python-tool om varkensrapporten te beheren PIGPY is een Python-bibliotheek om varkensrapporten te beheren. Varken biedt een geweldige reeks hulpmiddelen om complexe relationele processen bovenop Hadoop te creëren, maar het heeft een paar ontbrekende stukken: 1) Loopingconstructen voor eenvoudig het maken van meerdere vergelijkbare rapporten 2) Caching van intermediaire berekeningen 3) Gegevensbeheer en opruimcode 4) Eenvoudig testen op rapport correctheid PYPIG is een poging om deze gaten in te vullen door een Python-module te bieden die weet hoe te praten met een Hadoop-cluster en complexe rapportstructuren kan maken en beheren. H1. Beginnen H2. Installatie Momenteel is er geen echte installatieprocedure. Kies de huidige kofferbak en speel er vanaf daar mee. De enige vereiste waarvan ik me bewust ben, is dat het uitvoerbare bestand van Java op uw pad moet zijn en moet 1,6 of nieuwer zijn. Het Grom.py-bestand op het hoogste niveau moet een redelijk voorbeeld zijn van waar u deze module kunt gebruiken, naast deze tutorial. PIGPY is getest op OS X en Debian Linux. H2. Rapporten indienen Op basis van het basisniveau is PYPIG een hulpmiddel om varkensopdrachten aan Hadoop in te dienen en de gegevens op een cluster te duwen en te trekken. Stel dat we een varkensrapport hebben genoemd rapport.pig in de huidige map. van Bacon.Hadoop Import Hadoopclasspaths = LOCAL_HOME = OS.PATH.JOIN (OS.PATH.DIRNAME (__ Bestand__), "External", "Hadoop-0.18.3") NAME_NODE = "Bestand: ///" Hadoop = Hadoop (Local_Home, Name_Node, ClassPaths) Hadoop.Run_PIG_JOB ("Report.Pig") Hadoop.copytolocal ("/ rapporten / output.csv", "output.csv") Deze code voert het rapport uit over welk cluster wordt opgegeven door naam_node en trekt vervolgens aan de uitgang (aannemen van het uitgangspad /Reports/output.csv) naar het lokale bestandssysteem. Het NAME_NODE-argument kan alle HDFS-URL zijn (bijv. HDFS: // Hadoop_Cluster_IP: 54310). Testcode kan eenvoudig worden geschreven om te wijzen op gegevens over het lokale bestandssysteem of een testcluster om het verifiëren van de juiste resultaten gemakkelijker te maken. H2. Complexe rapporten maken Naast het alleen indienen van rapporten, biedt PYPIG hulpmiddelen om zeer complexe rapporten te maken met behulp van Python en Pig Latin in plaats van alleen varkens Latijn. Hiermee kunt u de Python-constructen van het hogere niveau gebruiken om varkenscode te genereren in plaats van grote rapporten met de hand te handhaven. Hieronder is een voorbeeld van een zeer eenvoudig rapport dat statistieken biedt over auto's per kleur. van Bacon.Hadoop Import Hadoopfrom Bacon.Reports Import Report, Plan, Planrunnerhadoop = (Hadoop Initialisatiecode) Data = Rapport ("Car_Color_Data", "Load 'Car_Colors.tsV' AS (Merk, Model, Prijs, Kleur);") Color_Reports = [] voor prijs in : Color_Reports.appdry (rapport ("% s_cars"% Prijs, ouders = {"color_data": gegevens} Code = ""% (deze) s = Filter% (color_data) s op prijs <"" "+ Str (prijs) +" "";% (dit) s = foreach (groep% (deze) s door kleur) {genereren groep.color, AVG (% ( Deze) S.PRICE);} "" ")) Plan = Plan (" / TMP / rapporten ", Color_Reports) Printplan.pigfilePlan_Runner = Planrunner (Plan, Hadoop) Plan_runner.Run_Reports () Plan_Runner.Save_Reports (" ~ / rapporten ") Plan_runner.Cleanup () Dit drukt het volgende pigfile af en voert u deze uit en sla de resultaten op in de lokale machine: Laad 'car_colors.tsv' als (merk, model, prijs, kleur); 5000_cars = filter car_color_data per prijs <5000; 5000_cars = Foreach (Groep 5000_Cars per kleur) {Generate Group.Color, AVG (5000_Cars.Prijs); } Stel 5000_cars op in '/TMP/Reports/1244375262.84/5000_Cars' met behulp van PigStorage (','); 10000_cars = Filter Car_Color_Data per prijs <10000; 10000_Cars = Foreach (Group 10000_Cars per kleur) {Generate Group.Color, AVG (10000_Cars.Prijs); } Store 10000_cars in '/TMP/Reports/1244375262.84/10000_CARS' met behulp van PigStorage (','); 15000_cars = Filter Car_Color_Data per prijs <15000; 15000_Cars = Foreach (Group 15000_Cars per kleur) {Generate Group.Color, AVG (15000_Cars.Prijs); } Store 15000_cars in '/TMP/Reports/1244375262.84/15000_CARS' met behulp van PigStorage (','); 20000_cars = Filter Car_Color_Data per prijs <20000; 20000_Cars = Foreach (Group 20000_Cars per kleur) {Genereer Groep.Color, AVG (20000_Cars.Prijs); } Store 20000_Cars in '/TMP/Reports/1244375262.84/20000_CARS' met behulp van PigStorage ('', '); 150000_cars = Filter Car_Color_Data per prijs <150000; 150000_Cars = Foreach (Groep 150000_Cars per kleur) {Genereer Groep.Color, AVG (150000_Cars.Prijs); } Store 150000_cars in '/TMP/Reports/1244375262.84/150000_CARS' met behulp van PigStorage ('', '); Terwijl dit voorbeeld triviaal is om te doen in rauw varken Latijn (en kan veel beter worden geschreven met een slimme groep ... by), zelfs hier is het veel gemakkelijker om de resultaten voor elk rapport in de Python Wrapper te wijzigen dan in het resulterende varken Latijns. Bovendien, als ik lui was en niet hernoemd tot elke alias, in plaats daarvan elke rapport circuleer, zal de module helpt elke alias car_price, car_price_1, car_price_2, etc. hier, het zou geen verschil maken, omdat we meteen elke gegevens schrijven tas naar het bestandssysteem en het niet verwerken. Deze hernieuwde eigenschap is waarom ik% (deze) s in de rapportsjabloon in de lus gebruik. Wanneer het rapportobject naar het varkensbestand is geschreven, worden het zelf en de ouders ingevuld door woordenboekreeksinterpolatie. % (deze) s is een speciale sleutel die wordt gebruikt om de werkelijke naam van het huidige rapport in te trekken. Er is geen vereiste om een van deze functionaliteit te gebruiken, het rapport kan gewoon de resultaatcode zijn en vermijden met behulp van de lus of ouders, maar dit maakt het veel moeilijker om rapporten in de toekomst te wijzigen. De paden op het Hadoop-bestandssysteem zijn vrij verschrikkelijk om rechtstreeks toegang te krijgen, daarom kan de planrunner omgaan met het opslaan van ze in de lokale map. De mapnaam is slechts de tijdstempel om te proberen te voorkomen dat varken klagen als de map al bestaat. De Save_Reports-methode trekt dingen naar een door de gebruiker gespecificeerde map van welk vreselijk pad wordt gebruikt in Hadoop, en de opruimingsmethode op de planrunner zal alle sporen van de varkensjob uit de HDF's verwijderen. H2. Caching-intermediaire resultaten De volgende code genereert 3 rapporten om op te slaan, allemaal op basis van dezelfde initiële resultaten. Voor het doel van dit voorbeeld, neem aan dat de aangepaste UDF uren duurt om de bestanden te verwerken en elk eindverslag duurt enkele minuten. van PIGPY.HADEOP import Hadoopfrom PIGPY.Reports Importrapport, plan, planrunnerhadoop = (Hadoop Initialisatiecode) Slow_Report = Rapport ("Demographic_aggregate", Code = "" "% (deze) s = load 'us_census.tsv' AS (LEEFTIJD, loon, familie_size, staat);% (dit) s = (vreselijk filtering / groepering op maat UDF) als (leeftijd, loon, familie_size, staat, tellen); "" ") State_Reports = [] voor staat in : State_Reports.Alled (rapport (staat, ouders = {"Demo": slow_report}, code = "%% (deze) s = filter %% (demo) s door Staat == '% S '; "% State)) Plan = Plan (" / TMP / Rapporten ", State_Reports) Printplan.pigfilePlan_runner = Planrunner (Plan, Hadoop) Plan_runner.run_Reports () Plan_runner.Save_Reports (" ~ / rapporten ") Plan_Runner.Cleanup () Deze code genereert en voert het volgende varkensrapport uit: Demographic_aggregate = load 'us_census.tsv' als (leeftijd, loon, familie_size, staat); demografisch_aggregate = (vreselijk filtering / groepering op maat UDF) als (leeftijd, loon, familie_size, staat, telling); Michigan = filter demografisch_aggregate door staat == 'Michigan'; Bewaren Michigan in '/TMP/Reports/1244588320.16/michigan' met behulp van PigStorage ('', '); Ohio = filter demografisch_aggregate door State ==' Ohio '; Bewaar Ohio in' /TMP/Reports/1244588320.16/OHIO ' Met behulp van PigStorage ('', '); Nevada = filter demografisch_aggregate door State ==' Nevada '; Winkel Nevada in' /TMP/Reports/1244588320.16/nevada 'met behulp van PigStorage (' ','); Met de huidige versie van varken (0.2.0 op het moment van deze tutorial), zal deze varkensjob de demografische_aggregate hervatten voor elk van de 3 dochterverslagen. Hopelijk zal dit worden gecorrigeerd in een toekomstige vrijgave van varken, maar tot die tijd kan PIGPY CACHING van deze resultaten voor u forceren. Als u een logging-handler voor PIGPY.Reports opzet, moet u de volgende waarschuwing zien: Waarschuwing: PIGPY.Reports: Report Demographic_aggregate moet in de cache worden opgeslagen, maar heeft geen cache_columns Dit betekent dat PIGPY een rapport heeft gevonden dat het in de cache moet worden opgeslagen, maar kan geen geschikte hints vinden om het op te slaan en te laden. Als we de demografische_aggregate hieraan wijzen: Slow_Report = Rapport ("Demographic_aggregate", Code = "" "% (deze) s = load 'us_census.tsv' AS (leeftijd, loon, familie_size, staat);% (dit) s = (vreselijke filtering / groepering op maat UDF) Zoals (leeftijd, loon, familie_size, staat, tellen); "" ", cache_columns =" leeftijd, loon, familie_size, staat, tellen ") PIGPY zal deze twee regels aan het varkensrapport toevoegen nadat het demografisch_aggregate zijn vreselijke berekening heeft uitgevoerd: Winkel demografisch_aggregate in '/TMP/Reports/1244589140.23/demographic_aggregate' met behulp van PigStorage ('', '); Demographic_aggregate = load' /TMP/Reports/1244589140.23/demographic_aggregate 'met behulp van PigStorage (' ',') als (leeftijd, loon, familie_size, staat , Graaf); Varken zal deze code zien en de resultaten opslaan voor demografisch_aggregate in bestand. Wanneer toekomstige aliassen demografisch_aggregate gebruiken, zullen ze een back-up maken via het rapport en de laadleiding vinden en de vorige resultaten laden in plaats van de berekeningen opnieuw te gebruiken. Als u uitgebreid gebruikt, is het erg belangrijk om ervoor te zorgen dat de opruimmethode wordt genoemd, of uw HDF's zullen zeer snel vullen. Bovendien is PIGPY niet erg slim over de caching, dus het zal caching forceren telkens wanneer u cache_columns levert en er is meer dan één subsidiair rapport. Dit kan veroorzaken dat extra kaart-vermindert taken op uw cluster worden uitgevoerd. Bij Zattoo zijn CACHING-intermediaire waarden verbeterde prestaties tot 10x, afhankelijk van het aantal subsidiaire rapporten. Vereisten: · Python


pikpy Gerelateerde software