Sono uno sviluppatore Python con esperienza RDBMS piuttosto buona. Ho bisogno di elaborare una grande quantità di dati (circa 500 GB). I dati sono contenuti in circa 1200 file csv in bucket s3. Ho scritto uno script in Python e posso eseguirlo su un server. Tuttavia, è troppo lento. In base alla velocità attuale e alla quantità di dati, ci vorranno circa 50 giorni per passare attraverso tutti i file (e, naturalmente, la scadenza è BENE prima di quello).Elaborazione di una grande quantità di dati in parallelo
Nota: l'elaborazione è una specie del tipo di materiale ETL di base, niente di terribile. Potrei facilmente inserirlo in uno schema temporaneo in PostgreSQL e quindi eseguire script su di esso. Ma, ancora una volta, dai miei test iniziali, questo sarebbe il modo di rallentare.
Nota: un nuovissimo database PostgreSQL 9.1 sarà la destinazione finale.
Quindi, stavo pensando di provare a far girare una serie di istanze EC2 per provare a eseguirle in batch (in parallelo). Ma non ho mai fatto qualcosa di simile prima, quindi ho cercato idee, ecc.
Ancora una volta, sono uno sviluppatore Python, quindi sembra che Fabric + boto potrebbe essere promettente. Di tanto in tanto ho usato boto, ma mai nessuna esperienza con Fabric.
So che dalla lettura/ricerca questo è probabilmente un ottimo lavoro per Hadoop, ma non lo conosco e non posso permettermi di assumerlo, e la linea del tempo non consente una curva di apprendimento o di assunzione qualcuno. Non dovrei anche, che è un po 'un affare di un tempo. Quindi, non ho bisogno di costruire una soluzione davvero elegante. Ho solo bisogno che funzioni e sia in grado di ottenere tutti i dati entro la fine dell'anno.
Inoltre, so che questo non è un semplice tipo di stackoverflow (qualcosa come "come posso annullare un elenco in python"). Ma quello che spero è che qualcuno lo legga e "dì, faccio qualcosa di simile e uso XYZ ... è fantastico!"
Immagino che quello che sto chiedendo è che qualcuno sa di qualsiasi cosa là fuori che potrei usare per portare a termine questo compito (dato che sono uno sviluppatore Python e non conosco Hadoop o Java - e ho un Tempi ristretti che mi impediscono di apprendere una nuova tecnologia come Hadoop o di imparare una nuova lingua)
Grazie per la lettura. Non vedo l'ora di eventuali suggerimenti.
tessuto + boto appare davvero come una buona combinazione per questo compito. Può valere la pena parallelizzare l'attività su ogni istanza (a meno che non ci si aspetti di avere 1200 istanze, una per file), magari usando un 'Pool' dal modulo' multiprocessing'. Inoltre, il modo in cui analizzi il file e modifichi i risultati avrà probabilmente un impatto notevole sul tempo totale. Hai esaminato il 'numpy'? – goncalopp
Quindi nessuno cerca di ripetere i possibili suggerimenti - potresti descrivere quello che hai fatto nel tuo script esistente che è troppo lento - quindi sappiamo di non seguire questa strada :) –
@ JonClements - sembra una richiesta giusta. Bascamente, ho provato due approcci. Ho provato a mettere i dati in uno schema temporaneo e indicizzarlo (se necessario) ed eseguire query su di esso per "massaggiare" i dati e inserirli nel formato richiesto. Era troppo lento perché credo che gli indici fossero molto più grandi della cache di PostgreSQL. Nota: ho una piccola istanza di PostgreSQL in esecuzione su Heroku. (continuerà nel prossimo commento) –