Pigwy.

Uno strumento Python per gestire i report dei maiali
Scarica ora

Pigwy. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • MIT/X Consortium Lic...
  • Prezzo:
  • FREE
  • Nome editore:
  • Marshall Weir

Pigwy. Tag


Pigwy. Descrizione

Uno strumento Python per gestire i rapporti di maiale Pigwy è una libreria Python per gestire i rapporti dei maiali. Il maiale fornisce un incredibile set di strumenti per creare processi relazionali complessi sulla cima di hadoop, ma ha alcuni pezzi mancanti: 1) Costruisci looping per creare facilmente più rapporti simili 2) Caching dei calcoli intermedi 3) Gestione dei dati e codice di pulizia 4) Facilità di test per la correttezza del report Pypig è un tentativo di compilare questi fori fornendo un modulo Python che sa come parlare con un cluster di Hadoop e può creare e gestire strutture di report complesse. H1. Iniziare H2. Installazione Attualmente non esiste una procedura di installazione reale. Checkout del bagagliaio corrente e gioca con sé da lì. L'unico requisito di cui sono consapevole è che l'eseguibile Java deve essere sul tuo percorso e deve essere 1,6 o più recente. Il file Grunt.py al livello superiore dovrebbe essere un esempio ragionevole di dove iniziare a utilizzare questo modulo, oltre a questo tutorial. Il Pigwy è stato testato su OS X e Debian Linux. H2. Invio di report. A livello base, Pypig è uno strumento per inviare i lavori di suino a Hadoop e premere e tirare i dati su un cluster. Supponiamo di avere un rapporto suini chiamato report.pig nella directory corrente. da bacon.hadoop import hadoopclasspaths = local_home = os.path.join (os.path.dirname (__ file__), "esterno", "hadoop-0.18.3") NAME_NODE = "File: ///" hadoop = hadoop (local_home, name_node, classpaths) hadoop.run_pig_job ("report.pig") hadoop.copytolocal ("/ report / output.csv", "output.csv") Questo codice esegue il report su qualsiasi cluster specificato da NAME_NODE, quindi tira l'uscita (supponendo che il percorso di uscita sia /Reports/output.csv) al filesystem locale. L'argomento NAME_NODE può essere qualsiasi URL HDFS (ad esempio HDFS: // hadoop_cluster_ip: 54310). Il codice di prova può essere facilmente scritto per puntare ai dati sul filesystem locale o un cluster di prova per rendere più semplice la verifica dei risultati corretti. H2. Creando relazioni complesse Oltre a presentare rapporti, il Pypig fornisce strumenti per creare report molto complessi usando Python e maiale latino piuttosto che solo maiale latino. Ciò consente di utilizzare i costrutti Python di livello superiore per generare codice di suini invece di mantenere a mano di grandi report a mano. Di seguito è riportato un esempio di un rapporto molto semplice che fornisce statistiche sulle auto per colore. da bacon.hadoop import hadoopfrom bacon.Reports report di importazione, piano, PlanrunnerHadoop = (codice di inizializzazione di hadoop) dati = report ("car_color_data", "caricare 'car_colors.tsv' come (marca, modello, prezzo, colore);") color_reports = [] per il prezzo in : color_reports.append (rapporto (% s_cars "% prezzo, genitori = {" color_data ": dati} codice =" ""% (questo) s = Filtro% (color_data) s per prezzo <"" "+ str (prezzo) +" "";% (questo) s = foreach (gruppo% (questo) s per colore) {Generate Group.Color, AVG (% ( questo) s.price);} "" ")) Plan = Plan (" / TMP / report ", Color_reports) Print Plan.pigFileplan_Runner = Planrunner (Plan, Hadoop) Plan_Runner.Run_reports () Plan_Runner.Save_reports (" ~ / Segnala ") PLAN_RUNNER.CLEANUP () Ciò stampa il seguente pigfile e quindi eseguirlo e salva i risultati sulla macchina locale: Caricare 'car_colors.tv' come (make, modello, prezzo, colore); 5000_cars = filtro car_color_data per prezzo <5000; 5000_cars = foreach (gruppo 5000_cars per colore) {Generate Group.Color, AVG (5000_cars.price); } Negozio 5000_cars in '/tmp/reportss/1244375262.84/5000_CARS' usando Pigstorage (','); 10000_cars = filtro car_color_data per prezzo <10000; 10000_cars = foreach (gruppo 10000_cars per colore) {Generate Group.Color, AVG (10000_cars.price); } Conservare 10000_cars in '/tmp/reportss / 1244375262.84/10000_Cars' usando Pigstorage (','); 15000_cars = filtro car_color_data per prezzo <15000; 15000_cars = foreach (gruppo 15000_cars per colore) {Generate Group.Color, AVG (15000_cars.price); } Negozio 15000_cars in '/tmp/reportss/1244375262.84/15000_CARS' usando Pigstorage (','); 20000_cars = filtro car_color_data per prezzo <20000; 20000_cars = Foreach (Group 20000_Cars per colore) {Generate Group.Color, AVG (20000_cars.price); } Negozio 20000_cars in '/tmp/reportss/1244375262.84/20000_CARS' usando Pigstorage (','); 150000_cars = filtro car_color_data per prezzo <150000; 150000_cars = foreach (Group 150000_Cars per colore) {Generate Group.Color, AVG (150000_cars.price); } Negozio 150000_cars in '/tmp/reports/1244375262.84/150000_Cars' usando Pigstorage (','); Mentre questo esempio è banale da fare in maiale crudo latino (e può essere scritto molto meglio con un gruppo intelligente ... per), anche qui è molto più facile modificare i risultati per ciascun rapporto nell'involucro di Python rispetto al maiale risultante Latino. Inoltre, se fossi stato pigro e non rinominato ogni alias, chiedendo invece a ciascun rapporto car_price, il modulo rinominterà contribuendo a rinominare ogni alias car_price, car_price_1, car_price_2, ecc. Qui non farebbe alcuna differenza, come stiamo scrivendo immediatamente ogni dato Borsa al filesystem e non facendo ulteriore elaborazione. Questa proprietà di ridenominazione è il motivo per cui uso% (questo) s nel modello di report nel ciclo. Quando l'oggetto del report è scritto nel file di maiale, sé e i genitori sono compilati da interpolazione della stringa di dizionario. % (questo) s è una chiave speciale utilizzata per tirare il nome effettivo del report corrente. Non vi è alcun requisito di utilizzare una qualsiasi di queste funzionalità, il rapporto potrebbe essere solo il codice dei risultati ed evitare di utilizzare il loop o i genitori, ma questo rende molto più difficile modificare i rapporti in futuro. I percorsi sul filesystem Hadoop sono piuttosto orribili da accedere direttamente, motivo per cui il Planrunner può gestire il salvataggio nella directory locale. Il nome della cartella è solo il timestamp per cercare di evitare di avere un maiale si lamentarsi se la cartella esiste già. Il metodo Save_Reports tirerà le cose per una directory specificata dall'utente da qualsiasi percorso orribile viene utilizzato in Hadoop e il metodo di pulizia sul Planrunner rimuoverà tutte le tracce del lavoro di maiale dagli HDFS. H2. Risultati intermedi nella cache Il seguente codice genera 3 report per salvare, tutti in base agli stessi risultati iniziali. Ai fini di questo esempio, assumere che l'UDF personalizzato richieda ore per elaborare i file e ogni rapporto finale richiede alcuni minuti. da Pigy.Hadoop Import HADOOPFrom PIRPY.Reports Report Import, Plan, PlanrunnerHadoop = (codice di inizializzazione di Hadoop) Slow_report = Report ("Demographic_Aggregate", codice = "" "% (questo) s = caricare 'us_census.tsv' come (età, salario, family_size, stato);% (questo) s = (orribile filtraggio / raggruppamento UDF personalizzato) come (età, salario, family_size, stato, conteggio); "" ") state_reports = [] per lo stato in : state_reports.append (Report (stato, genitori = {"demo": slow_report}, codice = "%% (questo) s = filtro %% (demo) s per stato == '% S '; "% stato)) Plan = Plan (" / TMP / report ", State_reports) Print Plan.pigFileplan_Runner = Planrunner (Plan, Hadoop) Plan_Runner.Run_Reports () PLAN_RUNNER.SAVE_REPORTS (" ~ / Reports ") PLAN_RUNNER.CLEANUP () Questo codice genererà ed eseguirà il seguente rapporto suino: demography_AGGREGATE = caricare 'us_census.tsv' come (età, salario, family_size, stato); demography_AGGREGARE = (orribile filtraggio / raggruppamento UDF personalizzato) come (età, salario, family_size, stato, conteggio); michigan = filtro demografico_AGGREGATO per stato == 'Michigan'; negozio Michigan in '/tmp/reportss/1244588320.16/michigan' usando Pigstorage (','); ohio = filtro demografico_AGGREGATO da stato == 'Ohio'; negozio Ohio in '/tmp/reports/1244588320.16/ohio' Usando Pigstorage (','); nevada = filtro demografica_aggregate da stato == 'nevada'; negozio nevada in '/tmp/reports/1244588320.16/nevada' usando Pigstorage (','); Con la versione corrente del maiale (0.2.0 al momento di questo tutorial), questo processo di maiale eseguirà nuovamente il demografico_aggregato per ciascuno dei 3 rapporti controllati. Speriamo che questo sarà corretto in un futuro rilascio di maiale, ma fino ad allora, il Pigwy può forzare la cache di questi risultati per te. Se si imposta un gestore di registrazione per PIRPY.Reports, è necessario visualizzare il seguente avviso: ATTENZIONE: PINGY.Reports: Segnala Demographic_AGGREGATE dovrebbe essere memorizzato nella cache, ma non ha cache_Columns Ciò significa che il Pigwy ha trovato un rapporto che pensa dovrebbe essere memorizzato nella cache, ma non riesce a trovare suggerimenti appropriati per salvarlo e caricarlo. Se modifichiamo il demografico_aggregato a questo: slow_report = report ("demography_AGGREGATETE", codice = "" "% (questo) s = caricare 'us_census.tsv' come (età, salario, famiglia_size, stato);% (questo) s = (orribile filtraggio / raggruppamento personalizzato UDF) Come (età, salario, family_size, stato, conteggio); "" ", cache_columns =" Età, salario, famiglia_size, stato, conteggio ") Pigwy aggiungerà queste due righe al rapporto suino dopo che il demography_aggregate ha eseguito il suo calcolo orribile: Negozio demografica_aggregate in '/tmp/reportss/1244589140.23/1244589140.23/1244589140.23/Demographic_AGGREGATE' usando Pigstorage (','); demography_AGGREGARE = caricamento '/tmp/reports/1244589140.23/Demographic_AGGREGARE' usando Pigstorage (',') As (Età, salario, Family_Size, Stato , contare); Il maiale vedrà questo codice e salverà i risultati per demografica_aggregate al file. Quando i futuri alias usano demografici_aggregate, iperereranno il backup attraverso il report e troveranno la linea di caricamento e caricherà i risultati precedenti piuttosto che eseguire nuovamente i calcoli. Se si utilizza in cachi estensivamente, è molto importante assicurarsi che il metodo di pulizia venga chiamato, o i tuoi HDF si riempiranno molto rapidamente. Inoltre, il Pigwy non è molto intelligente sulla cache, quindi forzerà la cache ogni volta che fornisci cache_columns e vi è più di un rapporto sussidiario. Ciò potrebbe causare ulteriori lavori di mappa per ottenere esecuzione sul tuo cluster. A Zattoo, i valori intermedi nella cache sono stati migliorati prestazioni fino a 10 volte a seconda del numero di report sussidiari. Requisiti: · Python.


Pigwy. Software correlato

SDO.

converte gli oggetti Oracle Sdo_geometry in WKT e Geojson. ...

225

Scarica