2013-08-29 8 views
18

So che ci sono domande simili a questa, come ad esempio:Chiarimento di casi d'uso per Hadoop contro RabbitMQ + sedano

ma mi sto chiedendo questo perché sto cercando una distinzione più particolare supportata da un paio di esempi di casi d'uso, per favore.

così, sono un utente pitone che vuole fare programmi che sia/sia:

  1. sono troppo grandi per
  2. troppo lungo

fare su una singola macchina e elaborarli su più macchine. Ho familiarità con il pacchetto multiprocessing (macchina singola) in python, e scrivo codice di stile mapreduce in questo momento. So che la mia funzione, per esempio, è facilmente parallelizzabile.

Nel chiedere le mie solite intelligenti CS consigli-givers, ho formulato la mia domanda come:

"Voglio fare un compito, dividerlo in una serie di attività secondarie che vengono eseguiti contemporaneamente su un mucchio di macchine, quindi quei risultati devono essere aggregati e trattati secondo alcune altre funzioni, che possono essere ridotte, o possono essere istruzioni per aggiungere in serie ad un database, ad esempio. "

Secondo questa ripartizione del mio caso d'uso, penso che potrei ugualmente usare Hadoop o un insieme di lavoratori di Celery + broker RabbitMQ. Tuttavia, quando chiedo ai saggi consiglieri-donatori, mi rispondono come se fossi totalmente pazzo a guardare a Hadoop e Celery come soluzioni comparabili. Ho letto un bel po 'di Hadoop e anche di Celery --- Penso di avere una buona conoscenza di quello che entrambi --- quello che non capisco è:

  1. Perché sono considerato così separato, così diverso?
  2. Dato che sembrano ricevere tecnologie totalmente diverse --- in che modo? Quali sono i casi d'uso che distinguono l'uno dall'altro o sono migliori per uno rispetto all'altro?
  3. Quali problemi potrebbero essere risolti con entrambi e quali aree sarebbe particolarmente folle usare l'una o l'altra per?
  4. Ci sono modi migliori e più semplici per ottenere Pool.map() multiprocessore come funzionalità per più macchine? Immaginiamo che il mio problema non sia limitato dallo storage, ma dalla CPU e dalla RAM necessarie per il calcolo, quindi non c'è un problema nel disporre di troppo poco spazio per contenere i risultati restituiti dai lavoratori. (cioè, sto facendo qualcosa come la simulazione dove ho bisogno di generare un sacco di cose sulle macchine più piccole seminate da un valore da un database, ma queste sono ridotte prima che ritornino alla macchina/database di origine.)

Capisco che Hadoop sia lo standard per i big data, ma anche Celery sembra ben supportato; Apprezzo che non sia java (l'API di streaming che python deve usare per hadoop mi sembrava a disagio), quindi sarei propenso a usare l'opzione Celery.

risposta

20
  1. Sono gli stessi in quanto entrambi possono risolvere il problema che si descrive (mappa-riduzione).Sono diversi in quanto Hadoop è interamente costruito per risolvere solo quel caso e Celey/RabbitMQ è stato creato per facilitare l'esecuzione di Task su diversi nodi usando il message passing. Il sedano supporta anche diversi usi.

  2. Hadoop sta risolvendo il problema della riduzione della mappa disponendo di un file system grande e speciale da cui il mapper acquisisce i dati, lo invia a un gruppo di nodi della mappa e lo riduce a tale file system. Questo ha il vantaggio che è molto veloce nel farlo. Gli svantaggi sono che funziona solo su input di dati testuali, Python non è realmente supportato e che se non puoi fare (leggermente) usi diversi. Celery è un task executor basato su messaggio. In esso definisci le attività e raggruppale in un flusso di lavoro (che può essere un flusso di lavoro map-reduce). I suoi vantaggi sono che è basato su Python, che puoi unire le attività insieme in un flusso di lavoro personalizzato. Gli svantaggi sono la dipendenza dal singolo back-end broker/risultati e dai tempi di configurazione.

  3. Quindi, se si dispone di un paio di file di registro di Gb e non si cura di scrivere in Java e di avere alcuni server da utilizzare che sono utilizzati esclusivamente per eseguire Hadoop, è necessario utilizzarlo. Se si desidera flessibilità nell'esecuzione di attività workflow, utilizzare Celery. O .....

  4. Sì! C'è un nuovo progetto da una delle aziende che ha contribuito a creare il protocollo di messaggistica AMQP che viene utilizzato da RabbitMQ (e altri). Si chiama ZeroMQ e porta il messaggio/l'esecuzione distribuita al livello successivo passando stranamente di livello in astrazione rispetto a Celery. Definisce i socket che è possibile collegare in vari modi per creare collegamenti di messaggistica tra i nodi. Tutto quello che vuoi fare con questi messaggi dipende da te scrivere. Anche se questo potrebbe sembrare "a cosa serve un involucro sottile attorno a una presa", in realtà è al giusto livello di astrazione. In questo momento nella nostra azienda stiamo calcolando tutti i nostri messaggi di sedano e ricostruendoli con ZeroMQ. Abbiamo scoperto che Celery è troppo supponente su come devono essere eseguite le attività e che il setup/config in generale è un problema. Anche quel broker nel mezzo che deve gestire tutto il traffico stava diventando un collo di bottiglia.

Riprendi:

  • contare le occorrenze di "il" in un libro con il meno la programmazione il più possibile e un sacco di tempo di installazione/config: Hadoop
  • creare attività atomiche e essere in grado di farli lavorare insieme con poca programmazione e molto tempo di configurazione/configurazione: Celery
  • Avere il controllo completo su cosa fare con i messaggi e su come programmarli con quasi nessun tempo di setup/config: ZeroMQ
  • Avere dolore senza tempo di configurazione/config: Prese
+0

Sto indagando su questo, e credo che tu abbia ragione, e questo è stato di grande aiuto. ZeroMQ è abbastanza sorprendente finora. Questo è un posto strano tra il calcolo distribuito e il corretto indirizzamento dei messaggi, la programmazione di rete. Sto ancora cercando di risolverlo. – Mittenchops

+0

Amo ZeroMQ. Grazie! – Mittenchops

+1

@Mittenchops Sono contento di averti conquistato. Ci vuole un po 'di tempo per superare l'ostacolo iniziale, ma ne vale la pena. – RickyA