44 votos

Java vs Python en Hadoop

Estoy trabajando en un proyecto utilizando Hadoop y parece incorporar Java nativamente y proporcionar soporte streaming para Python. Es que hay un impacto considerable en el rendimiento a la elección de uno sobre el otro. Soy lo suficientemente temprano en el proceso donde puedo ir de cualquier manera si hay una diferencia considerable en el rendimiento una forma u otra.

23voto

Bill K Puntos 32115

Con Python probablemente se desarrolle más rápido y con Java definitivamente va a correr más rápido.

Google lenguaje "juego de tiroteo" si quieres ver algunos de los muy preciso de la velocidad de las comparaciones entre todos los populares de idiomas, pero si recuerdo correctamente, estamos hablando de 3-5 veces más rápido.

Dicho esto, pocas cosas son procesador obligado en estos días, así que si usted se siente como usted había desarrollar mejor con Python, tener en ella!


En respuesta a los comentarios (¿cómo puede java a ser más rápido que Python):

Todos los idiomas se procesan de forma diferente. Java es acerca de la forma más rápida después de C Y C++ (que puede ser tan rápido o hasta 5x más rápido que java, pero parece promedio de alrededor de 2 veces más rápido). El resto son de 2 a 5 veces más lento. Python es uno de los más rápido después de Java. Supongo que C# es tan rápido como Java o tal vez más rápido, pero el tiroteo sólo tenía Mono (que era un poco más lento) porque no ejecutar en windows.

La mayoría de estas afirmaciones se basan en el lenguaje informático de referencia del juego (tiroteo), que tiende a ser bastante justa, porque los defensores de la/expertos en cada idioma ajustar la prueba escrita en su lengua específica para asegurarse de que el código está bien dirigida.

Por ejemplo, esta muestra todas las pruebas con Java vs c++ y usted puede ver los rangos de velocidad de aproximadamente iguales a las de java, siendo 3 veces más lento (primera columna es de entre 1 y 3), y java utiliza más memoria!

Ahora esta página muestra java vs python (desde el punto de vista de Python). De modo que las velocidades oscilan desde python ser 2x más lento que Java a 174x más lento, python generalmente beats java en código de tamaño y uso de la memoria, aunque.

Otro punto interesante aquí--pruebas que se asigna una gran cantidad de memoria, Java realidad se desempeñaron significativamente mejor que Python en el tamaño de memoria de también. Estoy bastante seguro de java generalmente pierde la memoria a causa de la sobrecarga de la máquina virtual, pero una vez que los factores, java es probablemente más eficaz que la mayoría (de nuevo, excepto la C).

Este es Python 3 por cierto, el otro python plataforma de prueba (Sólo llama Python) se adaptan mucho peor.

Si realmente quería saber cómo es más rápido, el VM es increíblemente inteligente. Compila a lenguaje de máquina DESPUÉS de ejecutar el código, de modo que sepa qué es lo más probable rutas de código y optimiza para ellos. La asignación de memoria es un arte muy útil en un lenguaje OO. Se pueden realizar algunos sorprendentes de tiempo de ejecución de las optimizaciones que no-VM idioma puede hacer. Se puede ejecutar en una muy pequeña huella de memoria cuando se ven obligados a, y es un idioma de su elección para dispositivos incrustados junto con C/C++.

He trabajado en un Analizador de Señal de Agilent (creo caro o-scope), donde casi la totalidad de la cosa (aparte de la de muestreo) fue realizado en Java. Esto incluye el dibujo de la pantalla, incluyendo el seguimiento (AWT) y la interacción con los controles.

En la actualidad estoy trabajando en un proyecto para todas las futuras cajas de cable. La Guía junto con la mayoría de otras aplicaciones escritas en Java.

¿Por qué no va a ser más rápido que Python?

13voto

John Prior Puntos 325

Usted puede escribir Hadoop mapreduce transformaciones, ya sea como "streaming" o como un "custom jar". Si utiliza streaming, usted puede escribir su código en cualquier idioma que desee, incluyendo Python o C++. El código acabo de leer de la ENTRADA estándar y la salida a STDOUT. Sin embargo, en versiones de hadoop antes de 0.21, hadoop streaming se utiliza para reproducir el texto - no de binario a sus procesos. Por lo tanto tus archivos necesarios para ser archivos de texto, a menos que usted haga un poco de funky codificación de las transformaciones de sí mismo. Pero ahora parece un parche que ha añadido que ahora permite el uso de formatos binarios con hadoop streaming.

Si utiliza un "custom jar" (es decir, la que escribió su mapreduce código en Java o Scala utilizando hadoop bibliotecas), entonces usted tendrá acceso a las funciones que permiten la entrada y salida binaria (serializar en binario) de la transmisión de los procesos (y guardar los resultados en el disco). Así que el futuro será mucho más rápido (dependiendo de cuánto de su formato binario es más pequeño que el formato de texto).

Así que si tu hadoop trabajo va a ser dependiente de e/S, entonces el "jar personalizados" enfoque será más rápido (ya que Java es más rápido que el anterior carteles han demostrado y la lectura del disco también será más rápido).

Pero usted tiene que preguntarse cuán valioso es tu tiempo. Me encuentro mucho más productivo con python, y la escritura de reducir el mapa que lee de la ENTRADA estándar y escribe en la salida estándar es realmente sencillo. Así que yo personalmente recomendaría ir python ruta - incluso si usted tiene a la figura de la codificación binaria de las cosas a sí mismo. Desde hadoop 0.21 maneja sin utf-8 matrices de bytes, y puesto que no es un archivo binario (matriz de bytes) la alternativa a utilizar para python (http://dumbotics.com/2009/02/24/hadoop-1722-and-typed-bytes/), la cual muestra el código de python sólo es aproximadamente un 25% más lento que el de la "costumbre jar" código de java, definitivamente, me gustaría ir a la pitón de la ruta.

12voto

David Crawshaw Puntos 4842

Java es que menos dinámico que Python y más esfuerzo se ha puesto en su VM, convirtiéndolo en un lenguaje más rápido. Python también está retenido por su bloqueo Global del intérprete, lo que significa que no puedes empujar roscas de un solo proceso sobre base diferente.

Si esto hace alguna diferencia significativa depende de lo que piensa hacer. Sospecho que ambos idiomas funcionará para usted.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X