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?
Respuesta
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.
¡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
¿Se refiere a la comparación de velocidad entre la transmisión y los trabajos regulares de java MR, o Java vs Hive/Pig? –
Java MR v.s. Lenguaje de scripting MR over streaming v.s. Los gastos generales presentados por PIG serían realmente interesantes. – Eli
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
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.
- 1. Objeto de solicitud, ¿cuáles son los pros y los contras?
- 2. ¿Cuáles son los pros y los contras de la UCI?
- 3. ¿Cuáles son los pros y los contras de TreeSet
- 4. ¿Cuáles son los pros y los contras de Solr & ElasticSearch?
- 5. ¿Cuáles son los pros y los contras de usar Global.asax?
- 6. ¿Cuáles son los pros y los contras de los submódulos de git y Repo?
- 7. ¿Cuáles son los pros y los contras de un sitio 100% HTTPS?
- 8. ¿Cuáles son los pros/contras de 64 bit .NET?
- 9. ¿Cuáles son los pros y los contras de los procedimientos de llamada en VB.NET?
- 10. ¿Cuáles son los pros y los contras de la eliminación y las actualizaciones en cascada?
- 11. ¿Cuáles son los pros y los contras de usar un correo electrónico como nombre de usuario?
- 12. ¿Cuáles son los pros y los contras de adoptar HTML 5 ahora para rediseñar un sitio?
- 13. ¿Cuáles son los pros y los contras para usar un contenedor de IOC?
- 14. ¿Cuáles son los pros y los contras de usar una enumeración de banderas?
- 15. Cuándo usar actores en libgdx? ¿Cuáles son los contras y los pros?
- 16. ¿Cuáles son los pros y los contras de almacenar archivos en una base de datos?
- 17. ¿Cuáles son los pros y los contras de fs.createReadStream vs fs.readFile en node.js?
- 18. ¿Cuáles son los pros y los contras de asset_packager y Jammit?
- 19. ¿Cuáles son los pros y los contras de usar una Mac para el desarrollo web?
- 20. ¿Cuáles son los pros y los contras de las revisiones de diseño/código?
- 21. ¿Cuáles son los pros y los contras de la entrada delimitada general de Ruby? (sintaxis porcentual)
- 22. ¿Cuáles son los pros y los contras de OleDB versus SQLClient?
- 23. ¿Cuáles son los pros y los contras de las diversas implementaciones de Python?
- 24. ¿Cuáles son los pros y los contras de usar una plantilla de motor como Jade?
- 25. ¿ARC o no a ARC? ¿Cuáles son los pros y los contras?
- 26. ¿Cuáles son los pros y los contras de las bases de datos de objetos?
- 27. ¿Cuáles son los pros y los contras de los servicios web y RMI en un entorno solo de Java?
- 28. ¿Cuáles son los pros y los contras de usar Castle Active Record vs Straight NHibernate?
- 29. ¿Cuáles son los pros y los contras de HTML5 Canvas vs. SVG + Raphael.js?
- 30. ¿Cuáles son los pros y los contras de dejar que Google aloje jQuery para mí?
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
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