Pregunta

Estoy trabajando en un proyecto utilizando Hadoop y parece que de forma nativa incorporar Java y proporcionar streaming de soporte para Python.Es que hay un impacto considerable en el rendimiento de elegir uno sobre el otro?Soy lo suficientemente temprano en el proceso donde se me puede ir de cualquier manera si hay una diferencia considerable del rendimiento de una manera o de la otra.

¿Fue útil?

Solución

Java es menos dinámico que Python y más esfuerzo se ha puesto en su máquina virtual, por lo que es un lenguaje más rápido. Python también se ve limitado por su intérprete bloqueo global, lo que significa que no puede empujar hilos de un mismo proceso en diferentes núcleo.

Si esto hace que cualquier diferencia significativa depende de lo que va a hacer. Sospecho que los dos idiomas a trabajar para usted.

Otros consejos

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

Google "benchmarksgame" 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 benchmarksgame 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 la lenguaje informático puntos de referencia juego 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, este 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 de 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 que están fuera, 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 ¿ es más rápido, el VM es increíblemente inteligente.Compila a lenguaje de máquina DESPUÉS de ejecutar el código, así que sabe lo que la mayoría de las probables 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?

Puede escribir transformaciones MapReduce Hadoop ya sea como "transmisión" o como un "frasco de costumbre". Si utiliza streaming, se puede escribir el código en cualquier idioma que desee, incluyendo Python o C ++. Su código se acaba de leer de STDIN y la salida a la salida estándar. Sin embargo, en las versiones de Hadoop antes de 0.21, streaming de hadoop utiliza para flujo único texto - no binario - a sus procesos. Por lo tanto, los archivos necesarios para ser archivos de texto, a menos que hacer algunas transformaciones de codificación cobardes mismo. Pero ahora parece un parche ha agregado que ahora permite el uso de formatos binarios Gracias a la transmisión hadoop.

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

Así que si su trabajo hadoop va a ser de E / S de la envolvente, entonces el enfoque de "tarro de encargo" será más rápido (ya que tanto Java es más rápido que los críticos anteriores han demostrado y la lectura desde el disco también será más rápido).

Pero hay que preguntarse lo valioso es su tiempo. Me encuentro mucho más productivo con Python, y la escritura mapa-reduzco que lee y escribe STDIN a STDOUT es realmente sencillo. Así que yo personalmente recomendaría ir la ruta pitón - incluso si usted tiene que averiguar las cosas codificación binaria usted mismo. Desde hadoop 0,21 maneja matrices de bytes no-UTF8, y puesto que no es una alternativa binaria (matriz de bytes) para utilizar para el pitón ( http://dumbotics.com/2009/02/24/hadoop-1722-and-typed-bytes/ ), que muestra el código de pitón único ser sobre 25% más lento que el código java "tarro de costumbre", me cabe duda de que la ruta pitón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top