Migpy

Ein Python-Tool zur Verwaltung von Schweinberichten
Jetzt downloaden

Migpy Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • MIT/X Consortium Lic...
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Marshall Weir

Migpy Stichworte


Migpy Beschreibung

Ein Python-Tool zur Verwaltung von Schweinberichten Migpy ist eine Python-Bibliothek, um Schweineberichte zu verwalten. Schwein bietet ein erstaunliches Werkzeugsatz, um komplexe relationale Prozesse auf Hadoop zu erstellen, aber es hat ein paar fehlende Teile: 1) Looping-Konstrukte zum einfachen Erstellen mehrerer ähnlicher Berichte 2) Zwischenspeicherung von Zwischenberechnungen 3) Datenverwaltung und Bereinigungscode 4) Einfache Prüfung für die Richtigkeit der Bericht PYPIG ist ein Versuch, diese Löcher mit einem Python-Modul auszufüllen, das weiß, wie er mit einem Hadoop-Cluster spricht und komplexe Berichtsstrukturen erstellen und verwalten kann. H1. Einstieg H2. Installation Derzeit gibt es kein echtes Installationsverfahren. Kasse den aktuellen Kofferraum und spielen damit von dort. Die einzige Anforderung, die ich bewusst bin, ist, dass die ausführbare Java-Datei auf Ihrem Pfad sein muss und 1.6 oder neuer sein muss. Die grunz.py-Datei auf der obersten Ebene sollte ein vernünftiges Beispiel dafür sein, dass Sie zusätzlich zu diesem Tutorial mit diesem Modul mit diesem Modul beginnen. Migpy wurde auf OS X und Debian Linux getestet. H2. Berichte einreichen. Auf seiner grundlegenden Ebene ist Pypig ein Werkzeug, um Schweinejobs an Hadoop einzureichen und Daten auf einen Cluster zu drücken und zu ziehen. Angenommen, wir haben einen Schweinbericht namens report.pig im aktuellen Verzeichnis. von bacon.hadoop Importieren von HadoopclassPaths = local_home = os.path.join (os.path.dirname (__ file__), "extern", "Hadoop-0.18.3") name_node = "Datei: ///" Hadoop = Hadoop (local_home, name_node, classpaths) hadoop.run_pig_job ("report.pig") hadoop.copytolocal ("/ admts / output.csv", "output.csv") Dieser Code leitet den Bericht über einen beliebigen Cluster, den der Cluster von Name_Node angegeben ist, und zieht dann den Ausgang (angenommen, dass der Ausgabepfad angreift, ist /reports/output.csv) an das lokale Dateisystem. Das Argument Name_Node kann eine beliebige HDFS-URL sein (z. B. HDFS: // hadoop_cluster_ip: 54310). Der Testcode kann leicht geschrieben werden, um auf Daten auf dem lokalen Dateisystem oder einem Testcluster zu zeigen, um die Überprüfung der korrekten Ergebnisse einfacher zu gestalten. H2. Komplexe Berichte erstellen. Jenseits derjenige, um Berichte einzureichen, bietet PYPIG Tools, um sehr komplexe Berichte mit Python und Schwein lateinisch zu erstellen, anstatt nur Schwein lateinisch zu sein. Auf diese Weise können Sie die Python-Konstrukte mit höherer Ebene verwenden, um Schweinecode zu generieren, anstatt große Berichte von Hand aufrechtzuerhalten. Nachfolgend finden Sie ein Beispiel für einen sehr einfachen Bericht, der Statistiken für Autos nach Farbe bereitstellt. von bacon.hadoop import matoopfrom bacon.reports Importbericht, plan, planrunnerhadoop = (Hadoop-Initialisierungscode) Daten = Bericht ("car_color_data", "laden 'car_colors.tsv' als (Make, Modell, Preis, Farbe);") Color_Reports = [] für den Preis in : color_reports.append (Bericht ("% s_cars"% Preis, Eltern = {"color_data": data} Code = ""% (diese) s = Filter% (color_data) s nach Preis <"" "" + str (Preis) + "" "% (diese) s = feach (Gruppe% (diese) s von color) {Generate Group.Color, AVG (% (% ( dies) s.preis);} "" ")) plan = plan (" / tmp / berichte ", color_reports) drucken plan.pigfileplan_runner = planrunner (plan, hadoop) plan_runner.run_reports () plan_runner.save_reports (" ~ / berichtet ") plan_runner.cleanup () Dadurch wird das folgende Pigfile drucken und dann ausführen und die Ergebnisse an das lokale Computer speichern: Laden von 'car_colors.tsv' als (Make, Modell, Preis, Farbe); 5000_cars = Filter car_color_data nach Preis <5000; 5000_CARS = FOREACH (Gruppen 5000_cars nach Farbe) {Generate Group.Color, AVG (5000_CARS.PRICE); } Speichern 5000_cars in '/tmp/reports/1244375262.84/124375262.84/5000_cars' mit Pigstorage (','); 10000_cars = Filter car_color_data nach Preis <10000; 10000_CARS = FOREACH (Gruppe 10000_CARS nach Farbe) {Generieren von group.color, avg (10000_cars.price); } Store 10000_cars in '/tmp/reports/1244375262.84/10000_cars' mit Pigstorage (','); 15000_cars = Filter car_color_data nach Preis <15000; 15000_cars = foreach (Group 15000_cars nach Farbe) {Generieren von group.color, avg (15000_cars.price); } Store 15000_cars in '/tmp/reports/1244375262.84/15000_cars' mit Pigstorage (','); 20000_cars = filtern car_color_data nach Preis <20000; 20000_CARS = FOREACH (Gruppe 20000_CARS nach Farbe) {Generate Group.Color, AVG (20000_CARS.PRICE); } Speichern 20000_cars in '/tmp/reports/1244375262.84/20000_cars' mit Pigstorage (','); 150000_cars = filtern car_color_data nach Preis <150000; 150000_CARS = FOREACH (Group 150000_CARS nach Farbe) {Generieren von Group.Color, AVG (150000_CARS.PRICE); } Store 150000_CARS in '/tmp/reports/124375262.84/150000_cars' mit Pigstorage (','); Während dieses Beispiel trivial ist, um in Rohes Schwein lateinisch zu tun (und kann mit einer cleveren Gruppe viel besser geschrieben werden, auch hier ist es viel einfacher, die Ergebnisse für jeden Bericht in der Python-Wrapper zu verändern, als im resultierenden Schwein Latein. Wenn ich faul gewesen wäre und nicht jeden Alias umbenannt worden wäre, wird das Modul stattdessen jeden Bericht CAR_PRICE anrufen, wobei das Modul jeden Alias CAR_PRICE, CAR_PRICE_1, CAR_PRICE_2 usw. umbenennen wird. Hier würde es keinen Unterschied machen, da wir sofort jede Daten schreiben Beutel zum Dateisystem und nicht Weiterverarbeitung. Dieses Umbenennen von Eigenschaften ist, warum ich% (dadurch) in der Berichtsvorlage in der Schleife verwende. Wenn das Berichtsobjekt in die Schweineratei geschrieben wird, sind sich selbst und den Eltern von der Wörterbuch-String-Interpolation ausgefüllt. % (diese) ist ein spezielles Schlüssel, der zum Ziehen des aktuellen Namens des aktuellen Berichts verwendet wird. Es ist nicht erforderlich, eine dieser Funktionalität zu verwenden, der Bericht könnte nur der Ergebniscode sein und die Verwendung der Schleife oder der Eltern vermeiden, dies macht es jedoch viel schwieriger, Berichte in der Zukunft zu verändern. Die Pfade des Hadoop-Dateisystems sind ziemlich schrecklich, um direkt zuzugreifen, weshalb der PlanRunner mit dem Speichern in das lokale Verzeichnis umgehen kann. Der Ordnername ist nur der Zeitstempel, um zu versuchen, das Schwein zu vermeiden, das sich beschweren, wenn der Ordner bereits vorhanden ist. Die Methode Save_Reports zieht die Dinge in ein vom Benutzer angegebenes Verzeichnis von einem schrecklichen Pfad, der in Hadoop verwendet wird, und die Bereinigungsmethode auf dem PlanRunner entfernen alle Spuren des Schweinehalters von der HDFS. H2. Zwischen den Zwischenergebnissen zwischengespeichern Der folgende Code generiert 3 Berichte zum Speichern, alle basierend auf denselben Anfangsergebnissen. Nehmen Sie zum Zwecke dieses Beispiels an, dass die benutzerdefinierte UDF Stunden Zeit dauert, um die Dateien zu verarbeiten, und jeder Abschlussbericht dauert einige Minuten. von pigy.hadoop import matoopfrom pigy.reports Importbericht, plan, planrunnerhadoop = (Hadoop-Initialisierungscode) slow_report = bericht ("demografisch_aggregate", Code = ""% (diese) s = laden 'us_census.tsv' als (Alter, lohn, familie_size, staatlich);% (diese) S = (schreckliche Filterung / Gruppierung benutzerdefinierter UDF) als (Alter, Lohn, familien_size, staatlich, zählen); "" ") staat_reports = [] für den Staat in : staat_reports.append (Bericht (Staat, Eltern = {"Demo": Slow_Report}, Code = "%% (diese) s = Filter %% (Demo) s von staat == '% S '; "% STATE)) plan = plan (" / tmp / berichte ", staat_reports) drucken plan.pigfileplan_runner = planrunner (plan, hadoop) plan_runner.run_reports () plan_runner.save_reports (" ~ / berichtet ") plan_runner.cleanup () Dieser Code erzeugt und führt den folgenden Schweinbericht aus: Demografie_aggregate = laden 'us_census.tsv' als (Alter, Lohn, familie_size, staatlich); demografisch_aggregate = (schreckliche Filterung / Gruppierung benutzerdefinierter UDF) als (Alter, Lohn, familie_size, staatlich, zählen); Michigan = filtern demografisch_aggregat von staat == 'Michigan'; Store Michigan in '/tmp/reports/1244588320.16/michigan' mit Pigstorage (','); ohio = filtern demografisch_aggregate von staat == 'ohio'; Laden Ohio in '/tmp/reports/1244588320.16/Ohio' Verwenden von Pigstorage (','); nevada = filtern demografisch_aggregate von staat == 'nevada'; speichern Nevada in '/tmp/reports/1244588320.16/nevada' mit Pigstorage (','); Mit der aktuellen Version von PIG (0.2.0 zum Zeitpunkt dieses Tutorials) leitet dieser Schweinauftrag das Demographic_Aggregate für jede der drei Tochtergesellschaftsberichte erneut aus. Hoffentlich wird dies in einer zukünftigen Veröffentlichung von Schwein korrigiert, aber bis dahin kann Migthy die Zwischenspeicherung dieser Ergebnisse für Sie erzwingen. Wenn Sie einen Protokollierungshandler für Pigy.Reports einrichten, sollten Sie die folgende Warnung sehen: WARNUNG: Migy.Reports: Der motorgische Bericht sollte zwischengespeichert werden, aber keine Cache_Columns Dies bedeutet, dass Migpy einen Bericht gefunden hat, den es denkt, dass er zwischengespeichert werden sollte, aber nicht geeignete Tipps finden, um sie zu speichern und zu laden. Wenn wir das Demographic_Aggregate dazu ändern: Slow_Report = Report ("Democial_Aggregate", Code = "" "% (diese) s = laden 'us_census.tsv' als (Alter, Lohn, Family_size, Status);% (diese) S = (schreckliche Filterung / Gruppierung benutzerdefinierter UDF) Als (Alter, Lohn, Family_size, staat, count); "" ", Cache_Columns =" Alter, Lohn, Family_size, Staat, Zählung ") Migpy fügt diese beiden Linien dem Schweinerbericht hinzu, nachdem der demografische_aggregate seine schreckliche Berechnung beträgt: Speichern Demografie_Aggregate in '/tmp/reports/1244589140.23/demographic_aggregate' mit Pigstorage (','); demografische_aggregate = Ladung '/tmp/reports/1244589140.23/demographic_aggregate' mit Pigstorage (',') als (Alter, Lohn, familie_size, staat , zählen); Schwein wird diesen Code sehen und die Ergebnisse für Demografie_Aggregate in Datei speichern. Wenn zukünftige Aliase demografische_aggregate verwenden, werden sie sich durch den Bericht wieder auflaufen und die Lastlinie finden und die vorherigen Ergebnisse laden, anstatt die Berechnungen erneut auszuführen. Wenn Sie das Caching ausführlich einsetzen, ist es sehr wichtig, sicherzustellen, dass die Bereinigungsmethode aufgerufen wird, oder Ihre HDFS füllen sich sehr schnell auf. Darüber hinaus ist Migy nicht sehr intelligent um das Zwischenspeicherung, sodass es jedes Mal, wenn Sie Cache_Columns liefern, nicht sehr klug, und es gibt mehr als einen Tochterbericht. Dies kann zu zusätzlichen Map-Reduess-Jobs führen, um auf Ihrem Cluster auszuführen. Bei Zattoo wurde die Zwischenspeicherung von Zwischenprodukten bis zu 10 x je nach Anzahl der Tochtergesellschaften verbessert. Anforderungen: · Python


Migpy Zugehörige Software