Domanda

Sto lavorando su un progetto che utilizza Hadoop e sembra incorporare nativamente Java e fornire lo streaming supporto per Python. È che c'è un impatto significativo delle prestazioni di scegliere uno sopra l'altro? Sono abbastanza presto nel processo in cui posso andare in entrambi i casi, se v'è una differenza in un modo significativo le prestazioni o l'altro.

È stato utile?

Soluzione

Java è meno dinamico di Python e più sforzo è stato messo nel suo VM, che lo rende un linguaggio più veloce. Pitone è anche trattenuto dal suo Global Interpreter Lock, che significa che non può spingere thread di un unico processo sul nucleo differente.

Se questo fa alcuna differenza significativa dipende da ciò che si intende fare. Ho il sospetto che entrambe le lingue lavorerà per voi.

Altri suggerimenti

Con Python probabilmente vi si sviluppano più velocemente e con Java sarà sicuramente correre più veloce.

Google "benchmarksgame" se volete vedere qualche confronto molto accurate velocità tra tutte le lingue popolari, ma se non ricordo male si sta parlando 3-5x più veloce.

Detto questo, alcune cose sono processore legato in questi giorni, quindi se ti senti come ci si sviluppa meglio con Python, hanno a questo!


In risposta al commento (come può essere più veloce di Java Python):

Tutte le lingue vengono trattati in modo diverso. Java è di circa il più veloce dopo la C & C ++ (che può essere il più veloce o fino a 5 volte più veloce di Java, ma sembra media circa 2 volte più veloce). Il resto sono 2-5 + volte più lento. Python è uno di quelli più veloce dopo Java. Sto indovinando che C # è di circa veloce come Java o forse più veloce, ma il benchmarksgame avuto solo Mono (che era un po 'più lenta), perché non funzionano su Windows.

La maggior parte di queste affermazioni si basano sulla computer di parametri di riferimento in lingua gioco che tende ad essere abbastanza equo perché i sostenitori di / esperti in ogni lingua modificare la prova scritta nella loro lingua specifica per garantire il codice è ben mirato.

Per esempio, questo mostra tutte le prove con Java vs C ++ e si possono vedere le gamme di velocità da circa pari a java essere 3x più lento (prima colonna è compreso tra 1 e 3), e Java utilizza molta più memoria!

questa pagina mostra java vs Python (dal punto di vista di Python). Quindi le velocità vanno da pitone essere 2x più lento di Java per 174 x più lento, pitone batte generalmente java in termini di dimensioni del codice e l'utilizzo della memoria però.

Un altro punto interessante qui - test che allocate un sacco di memoria, Java effettivamente eseguita significativamente migliore rispetto Python in termini di dimensioni della memoria pure. Sono abbastanza sicuro java di solito perde la memoria a causa del sovraccarico della macchina virtuale, ma una volta che i fattori fuori, Java è probabilmente più efficiente rispetto alla maggior parte (di nuovo, tranne la C del).

Questa è Python 3 tra l'altro, l'altra piattaforma pitone testato (Appena chiamato Python) carenata molto peggio.

Se si voleva davvero conoscere come è più veloce, la VM è incredibilmente intelligente. Si compila in linguaggio macchina dopo l'esecuzione del codice, in modo che sa quali sono i percorsi di codice più probabili sono e ottimizza per loro. L'allocazione di memoria è un'arte - davvero utile in un linguaggio OO. E 'in grado di eseguire alcune ottimizzazioni incredibili run-time, che non non-VM lingua può fare. Esso può essere eseguito in una piccola orma di memoria quando è costretto a, ed è un linguaggio di scelta per i dispositivi embedded insieme a C / C ++.

Ho lavorato su un analizzatore di segnale Agilent per (si pensi costosi o-campo di applicazione) in cui quasi l'intera cosa (a parte il campionamento) è stato fatto in Java. Questo include il disegno dello schermo compresa la traccia (AWT) e l'interazione con i controlli.

Al momento sto lavorando su un progetto per tutti i decoder futuri. La guida insieme con la maggior parte delle altre applicazioni sarà scritto in Java.

Perché non dovrebbe essere più veloce di Python?

È possibile scrivere Hadoop MapReduce trasformazioni sia come "streaming" o come un "barattolo personalizzato". Se si utilizza lo streaming, è possibile scrivere il codice in qualsiasi lingua che ti piace, tra cui Python o C ++. Il tuo codice appena letto da STDIN e allo standard output. Tuttavia, sulle versioni Hadoop prima 0,21, lo streaming Hadoop utilizzato per solo il testo flusso - non binario - ai processi. Pertanto i file necessari per essere file di testo, a meno che non si fa alcune trasformazioni di codifica funky te stesso. Ma ora sembra un cerotto è stato aggiunto che ora permette l'uso di formati binari con lo streaming Hadoop.

Se si utilizza un "barattolo personalizzato" (vale a dire che hai scritto il tuo codice MapReduce in Java o Scala utilizzando le librerie Hadoop), allora si avrà accesso a funzioni che consentono di ingresso e di uscita binaria (serializzare in binario) dal processi di streaming (e salvare i risultati su disco). Così corre futuro sarà molto più veloce (a seconda di quanto il formato binario è più piccolo il formato testo).

Quindi, se il vostro lavoro Hadoop sta per essere I / O associato, allora l'approccio "personalizzato jar" sarà più veloce (dal momento che entrambi Java è più veloce come poster precedenti hanno dimostrato e la lettura dal disco sarà anche più veloce).

Ma bisogna porsi come prezioso è il vostro tempo. Mi trovo molto più produttivo con Python, e la scrittura carta-riduco che legge stdin e scrive su STDOUT è davvero semplice. Quindi io personalmente consiglierei di andare il percorso pitone - anche se si deve capire la roba codifica binaria fuori da soli. Poiché hadoop 0.21 gestisce matrici di byte non UTF8, e poiché v'è un binario alternativo (matrice di byte) da utilizzare per python ( http://dumbotics.com/2009/02/24/hadoop-1722-and-typed-bytes/ ), che mostra il codice pitone essendo solo 25% più lento del codice Java "personalizzato jar", avrei sicuramente andare via python.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top