2010-09-10 16 views
18

He intentado en cascada, pero no veo ninguna ventaja sobre el enfoque clásico de reducir mapas para escribir trabajos.¿Alguien encuentra Cascading for Hadoop Map Reduce útil?

Mapa Reducir trabajos me da más libertad y Cascading parece estar poniendo un montón de obstáculos.

podría hacer un buen trabajo para hacer las cosas simples simple, pero las cosas complejas .. me parece extremadamente difícil

¿Hay algo que me falta. ¿Hay una ventaja obvia de Cascading sobre el enfoque clásico?

¿En qué situación debería elegir el enfoque clásico en cascada? ¿Alguien lo usa y está feliz?

Respuesta

24

He estado usando Cascading desde hace un par de años. Me parece extremadamente útil. En definitiva, se trata de ganancias de productividad. Puedo ser mucho más eficiente en la creación y el mantenimiento de trabajos M/R en comparación con el código Java simple. Aquí hay algunas razones por las cuales:

  • Gran parte del código repetitivo utilizado para comenzar un trabajo ya está escrito para usted.
  • Compostabilidad. En general, el código es más fácil de leer y más fácil de reutilizar cuando está escrito como componentes (operaciones) que se suturan para realizar un procesamiento más complejo.
  • Me parece que las pruebas unitarias son más fáciles. Hay ejemplos en el paquete en cascada que demuestran cómo escribir pruebas simples de unidades para probar directamente el resultado de los flujos.
  • El paradigma Tap (fuente y sumidero) facilita el cambio de entrada y salida de un trabajo, por lo que puede, por ejemplo, comenzar con salida a STDOUT para desarrollo y depuración y luego cambiar a archivos de secuencia HDFS para trabajos por lotes y luego cambie a un toque HBase para actualizaciones pseudo-en tiempo real.
  • Otra gran ventaja de escribir trabajos en cascada es que realmente está escribiendo más de una fábrica que crea empleos. Esto puede ser una gran ventaja cuando necesita construir algo dinámicamente (es decirlos resultados de un trabajo controlan qué trabajos subsecuentes creas y ejecutas). O, en otro caso, necesitaba crear un trabajo para cada combinación de 6 variables binarias. Esto es 64 trabajos que son todos muy similares. Esto sería una molestia con solo hadoop map reducir clases.

Si bien hay una gran cantidad de componentes preconstruidos que puede componer juntos, si una sección particular de su lógica de procesamiento parece que sería más fácil simplemente escribir en línea recta, siempre puede crear una función en cascada para envolver eso. Esto le permite obtener los beneficios de Cascading, pero las operaciones muy personalizadas se pueden escribir como funciones straight java (implementando una interfaz en cascada).

+0

¿Hay algún otro libro para aprender en cascada aparte de "Flujos de trabajo de empresa con conexión en cascada"? Actualmente estoy leyendo este libro, pero parece que el código en ese libro es algo antiguo. Parece que muchas cosas en Cascading han cambiado desde que se escribió este libro. – Shekhar

+0

Hola Marc ¿Puedes sugerir una solución usando cascada en esta pregunta ...http: //stackoverflow.com/questions/27506306/piping-data-into-jobs-in-hadoop-mr-pig –

1

La conexión en cascada le permite utilizar nombres de campo simples y tuplas en lugar de los tipos primitivos ofrecidos por Hadoop que, "... tienden a estar en el nivel incorrecto de granularidad para crear código sofisticado y altamente composable que se puede compartir entre los diferentes desarrolladores " (Tom White, Hadoop The Definitive Guide). Cascading fue diseñado para resolver esos problemas. Tenga en cuenta que algunas aplicaciones como Cascading, Hive, Pig, etc. se desarrollaron en paralelo y, a veces, hacen lo mismo. Si no le gusta Cascading o lo encuentra confuso, ¿tal vez sería mejor usar algo más?

Estoy seguro de que ya tiene esto, pero aquí está la guía del usuario: http://www.cascading.org/1.1/userguide/pdf/userguide.pdf. Proporciona una caminata decente a través del flujo de datos en una aplicación en cascada típica.

+0

Para responder la pregunta en su título: http://sharethis.com/ utiliza la función de cascada, por lo que deben encontrarla servicial. – sholsapp

51

Teniendo en cuenta que soy el autor de conexión en cascada ...

Mi sugerencia es utilizar cerdo o colmena si tienen sentido para su problema, especialmente cerdo.

Pero si está en el negocio de los datos, y no solo hurgando en sus datos para obtener información, encontrará que el enfoque en cascada tiene mucho más sentido para la mayoría de los problemas que MapReduce sin formato.

Su primer obstáculo con MapReduce sin procesar será pensar en MapReduce. Los problemas triviales son simples en MapReduce, pero es mucho más fácil desarrollar aplicaciones complejas si puede trabajar con un modelo que se asigna más fácilmente a su dominio problemático (filtrar esto, analizar eso, ordenarlos, unir el resto, etc.).

A continuación, se dará cuenta de que una unidad normal de trabajo en Hadoop consiste en múltiples trabajos de MapReduce. Encadenar trabajos juntos es un problema que se puede resolver, pero no debe filtrarse en el código de nivel de dominio de la aplicación, debe estar oculto y ser transparente.

Además, encontrará que refactorizar y crear códigos reutilizables será mucho más difícil si tiene que mover funciones continuamente entre los mapeadores y los reductores. o desde los mapeadores hasta el reductor anterior para obtener una optimización. Lo que lleva al problema de la fragilidad.

Cascading cree en fallar lo más rápido posible. El planificador intenta resolver y satisfacer las dependencias entre todos esos nombres de campo antes de que el clúster de Hadoop incluso esté trabajando. Esto significa que el 90% o más de todos los problemas se encontrarán antes de esperar horas para que su trabajo lo encuentre durante la ejecución.

Puede aliviar esto en código MapReduce sin procesar creando objetos de dominio como Persona o Documento, pero muchas aplicaciones no necesitan todos los campos en sentido descendente. Considere si necesitaba la edad promedio de todos los hombres. No quiere pagar la penalidad de IO de pasar a toda una Persona por la red cuando todo lo que necesita es un género binario y una edad numérica.

Con la semántica a prueba de errores y la unión diferida de sumideros y fuentes, resulta muy fácil crear marcos en cascada que crean flujos en cascada (que se convierten en muchos trabajos de Hadoop MapReduce). Un proyecto en el que estoy involucrado actualmente termina con cientos de trabajos de MapReduce por ejecución, muchos creados a mitad de carrera basados ​​en los comentarios de los datos que se procesan. Busque Cascalog para ver un ejemplo de un marco basado en Clojure para simplemente crear procesos complejos. O Bixo para un conjunto de herramientas de minería web y un marco que es mucho más fácil de personalizar que Nutch.

Finalmente Hadoop nunca se usa solo, eso significa que sus datos siempre se extraen de una fuente externa y se envían a otro después del procesamiento. El secreto sucio acerca de Hadoop es que es un marco de ETL muy efectivo (por lo que es una tontería escuchar a los proveedores de ETL hablar sobre el uso de sus herramientas para enviar/extraer datos desde/hacia Hadoop). La conexión en cascada alivia este inconveniente al permitirle escribir sus operaciones, aplicaciones y pruebas unitarias independientes de los puntos finales de integración. La conexión en cascada se utiliza en producción para cargar sistemas como Membase, Memcached, Aster Data, Elastic Search, HBase, Hypertable, Cassandra, etc. (Desafortunadamente no todos los adaptadores han sido publicados por sus autores)

Si lo desea, por favor envíeme una lista de los problemas que está experimentando con la interfaz. Estoy constantemente buscando mejores formas de mejorar la API y la documentación, y la comunidad de usuarios siempre está dispuesta a ayudar.

+0

Gracias, gran respuesta Chris. Me gusta el punto sobre Hadoop como un marco de ETL en particular ... –

+0

¿Podría darnos alguna idea sobre cuándo usar Cascading puro y cuándo usar Cascalog o Scalding? ¿Hay alguna ventaja de Cascalog o Scalding sobre Casacading? – Shekhar

6

Utilicé Cascading con Bixo para escribir la canalización completa de clasificación de enlaces antispam para una gran red social.

La tubería en cascada dio como resultado 27 trabajos de MR, lo que hubiera sido muy difícil de mantener en estado puro MR. He escrito trabajos de MR anteriormente, pero usar algo como Cascading es como cambiar de Assembler a Java (insert_fav_language_here).

Una de las grandes ventajas sobre Hive o Pig en mi humilde opinión es que Cascading es un solo frasco, que se combina con su trabajo. Pig y Hive tienen más dependencias (por ejemplo, MySQL) o no son tan fáciles de integrar.

Descargo de responsabilidad: Si bien conozco a Chris Wensel personalmente, realmente creo que Cascading está pateando un **. Teniendo en cuenta su complejidad, es extremadamente impresionante que no haya encontrado un solo error al usarlo.

2

Creo que el lugar que las ventajas de Cascading comienzan a mostrar son instancias en las que tiene un montón de funciones simples que deben mantenerse separadas en el código fuente, pero que pueden recopilarse en una composición en su asignador o reductor. Ponerlas juntas hace que tu código básico de reducción de mapas sea difícil de leer, separarlos hace que el programa sea realmente lento. El optimizador de Cascading puede unirlos aunque los escriba por separado. Pig y hasta cierto punto Hive también puede hacer esto, pero para programas grandes, creo que Cascading tiene una ventaja de mantenibilidad.

En unos meses, Plume puede ser un competidor de la expresividad, pero si tiene programas reales para escribir y ejecutar en un entorno de producción, entonces Cascading es probablemente su mejor opción.

6

Enseño el curso de Hadoop Boot Camp para Scale Unlimited, y también hago un uso extensivo de Cascading en Bixo y para construir aplicaciones de minería web en Bixo Labs, así que creo que tengo una buena apreciación de ambos enfoques.

La mayor ventaja que veo en Cascading es que le permite pensar en su flujo de trabajo de procesamiento de datos en términos de operaciones en campos y (sobre todo) evitar preocuparse por cómo trasladar esta vista del mundo a la clave/modelo de valor que es intrínsecamente parte de cualquier implementación de reducción de mapa.

El mayor desafío con Cascading es que es una forma diferente de pensar sobre los flujos de trabajo de procesamiento de datos, y hay una "joroba" conceptual correspondiente que debe superar antes de que todo comience a tener sentido. Además de los mensajes de error pueden recordar a uno de la salida de la lex/yacc ("conflicto de desplazamiento/reducción") :)

- Ken

1

trabajé en cascada por un par de años y por debajo son useful things in cascading.

1. code testability 
2. easy integration with other tools 
3. easily extensibile 
4. you will focus only on business logic not on keys and values 
5. proven in production and used by even twitter. 

Recomiendo a las personas que utilicen la mayoría de las veces en cascada.

0

Cascading es un contenedor alrededor de Hadoop que proporciona Grifos y Fregaderos desde y hacia Hadoop.

Escribir Mappers and Reducers para todas sus tareas va a ser tedioso. Intenta escribir un trabajo en cascada y luego estarás listo para evitar escribir mapeadores y reductores.

También desea ver los grifos y combinaciones en cascada (así es como ingresa datos en su trabajo de procesamiento en cascada).

Con estos dos, es decir, la capacidad de evitar la escritura de Hadoop Mappers con Reductores ad-hoc y la capacidad de consumir una gran variedad de fuentes de datos, puede resolver una gran cantidad de procesamiento de datos de manera rápida y efectiva.

La conexión en cascada es más que una simple envoltura alrededor de hadoop, estoy tratando de mantener la respuesta simple. Por ejemplo, he portado una gran base de datos mysql que contiene terabytes de datos para registrar archivos usando jdbc en cascada, toque

Cuestiones relacionadas