2012-03-05 11 views
6

He estado usando Pig o Java para Map Reduce exclusivamente para ejecutar trabajos en un clúster de Hadoop hasta el momento. Recientemente probé usando Python Map Reduce a través de la transmisión Hadoop y también fue genial. Todo esto tiene sentido para mí, pero estoy un poco confuso cuando quisiera usar una implementación v.s. otro. Reducir el mapa de Java, he estado usando básicamente de manera exclusiva cuando necesito velocidad, pero ¿cuándo querría usar algo como la transmisión de Python en lugar de simplemente escribir lo mismo en menos líneas más comprensibles en PIG/Hive? En resumen, ¿cuáles son los pros y los contras de cada uno?¿Cuáles son los pros y los contras de ejecutar un trabajo en Hadoop usando varios idiomas?

+0

Si rechaza y vota para cerrar, ¿por qué no agrega un comentario y menciona por qué, para que yo no haga lo que cree que hice mal en el futuro? – Eli

+0

http://lucene.472066.n3.nabble.com/Comparison-of-Apache-Pig-Vs-Hadoop-Streaming-M-R-td3792556.html es un hilo relevante para esta discusión. – Eli

Respuesta

3

Relataré separado a Java vs Python y luego por separado relacionarse con MR vs Colmena/cerdo - ya que me veo como dos cuestiones diferentes
Hadoop está construido alrededor de Java y muchos de sus capacidades disponibles a través de la API de Java, y Hadoop en su mayoría se puede extender utilizando clases de Java.

Hadoop do tiene la capacidad de trabajar con trabajos de MR creados en otros idiomas: se llama transmisión. Este modelo solo nos permite definir mapper y reducer con algunas restricciones que no están presentes en java. Al mismo tiempo, los formatos de entrada/salida y otros complementos deben escribirse como clases Java
Así definiría la toma de decisiones de la siguiente manera: a) Use Java, a menos que tenga una base de código grave que necesite resituar en su trabajo MR . b) Considere usar python cuando necesite crear algunos trabajos ad hoc simples.

En cuanto a Cerdo/Colmena, también es sistemas java céntricos de mayor nivel. Hive se puede usar sin ninguna programación, pero puede ser extendido usando java. Cerdo requiere Java desde el principio. Creo que estos sistemas son casi siempre preferibles a los trabajos de MR en los casos en que pueden ser aplicados. Usualmente estos son casos cuando el procesamiento es SQL.

Consideraciones de rendimiento entre streaming vs Java nativo.
La transmisión alimenta la entrada al asignador a través de su flujo de entrada. Es la comunicación entre procesos que es inherentemente menos eficiente que los datos en proceso que pasan entre el lector de registros y el asignador en el caso de Java.
Puedo hacer una de las siguientes conclusiones desde arriba: a) En el caso de un procesamiento ligero (como buscar subcadenas, contar ...) esta sobrecarga puede ser significativa y la solución de Java será más eficiente.
b) En el caso de algunos procesos pesados, que pueden implementarse potencialmente en algún lenguaje que no sea Java de forma más eficiente: la solución basada en la transmisión puede tener cierta ventaja.

Consideraciones de rendimiento de Pig/Hive.
Pig/Hive implementa primitivas del procesamiento de SQL. En otras palabras, implementan elementos del plan de ejecución en el mundo RDBMS. Estas implementaciones son buenas y están bien ajustadas. Al mismo tiempo Hive (algo que sé mejor) es intérprete. No genera código: interpreta el plan de ejecución en trabajos de MR preconstruidos. Significa que si tiene condiciones complejas y escribirá código especialmente para ellas, tiene todas las posibilidades de hacerlo mucho mejor que Hive, representando la ventaja de rendimiento del compilador frente al interperador.

+0

¡Gracias! ¡Esto es genial! ¿Alguna posibilidad de que puedas escribir un poco más sobre las comparaciones de velocidad también? No pude encontrar mucho de eso para transmitir. ¡Creo que más información sobre eso haría que esta sea la respuesta perfecta! – Eli

+0

¿Se refiere a la comparación de velocidad entre la transmisión y los trabajos regulares de java MR, o Java vs Hive/Pig? –

+0

Java MR v.s. Lenguaje de scripting MR over streaming v.s. Los gastos generales presentados por PIG serían realmente interesantes. – Eli

2

En cuanto a Java vs. Pig: en la mayoría de los casos usaría pig (junto con UDF de Java) para tener flexibilidad y dejar que otra persona (cerdo) averigüe cuál es la mejor manera de dividir el trabajo en mapas y reduce , combinadores, etc.

Uso Java cuando deseo controlar absolutamente todos y cada uno de los aspectos del trabajo.

En cuanto al uso de python (u otras langs), es algo que usaría si los desarrolladores se sintieran más cómodos con estos otros lenguajes.Tenga en cuenta que también puede mix pig and streaming

1

Hay Scala, donde puede escribir códigos mucho más sencillos para sus trabajos. Por ejemplo, consulte: https://github.com/NICTA/scoobi

Probablemente pueda tener algún incentivo para usar C++ para tareas que requieren más memoria o CPU. Usted puede leer lo que escribió acerca de su Hypertable C++ Decisión: http://code.google.com/p/hypertable/wiki/WhyWeChoseCppOverJava

Java también es problemática en el lado serialización, ya que crea un objeto para cualquier objeto que se lee de un flujo de entrada. Debe tener cuidado de no utilizar la serialización de Java, simplemente porque tiene la implementación de Java.

Cuestiones relacionadas