scala hadoop mapreduce bigdata jvm-languages

¿Cuáles son las opciones para hadoop en scala



mapreduce bigdata (5)

He tenido éxito con Scoobi . Es fácil de usar, fuertemente tipado, oculta la mayor parte del desorden de Hadoop (al hacer cosas como serializar automáticamente tus objetos por ti) y totalmente Scala. Una de las cosas que me gusta de su API es que los diseñadores querían que las colecciones de Scoobi se sintieran como las colecciones estándar de Scala, por lo que realmente las usa de la misma manera, excepto que las operaciones se ejecutan en Hadoop en lugar de localmente. Esto realmente hace que sea muy fácil cambiar entre las colecciones de Scoobi y las colecciones de Scala mientras desarrollas y pruebas.

También utilicé Scrunch , que se basa en Crunch basado en Java. No lo he usado por un tiempo, pero ahora es parte de Apache.

Estamos comenzando un proyecto analítico basado en grandes datos y estamos considerando adoptar scala (stack de tipo seguro). Me gustaría saber los diferentes API / proyectos de scala que están disponibles para hacer hadoop, mapas de reducir programas.


Los primeros dos que probablemente investigaría son Scalding (que se basa en Cascading ) y Scoobi . No he usado ninguno, sin embargo, pero Scalding, en particular, parece que proporciona una muy buena API.


Twitter está invirtiendo mucho esfuerzo en Scalding, incluida una buena biblioteca de Matrix que podría usarse para diversas tareas de aprendizaje automático. Necesito darle una oportunidad a Scoobi también.

Para completar, si no está casado con MapReduce, eche un vistazo al proyecto Spark . Funciona mucho mejor en muchos escenarios, incluido en su puerto de Hive to Spark, apropiadamente llamado Shark . Como usuario frecuente de Hive, estoy entusiasmado con eso.


Definitivamente echa un vistazo a Scalding . Hablando como usuario y colaborador ocasional, he encontrado que es una herramienta muy útil. La API de Scalding también pretende ser muy compatible con la API de colecciones estándar de Scala. Del mismo modo que puede llamar a flatMap, map o groupBy en las colecciones normales, puede hacer lo mismo en las tuberías escaldadas, que puede imaginar como una lista distribuida de tuplas. También hay una versión mecanografiada de la API que proporciona garantías de seguridad tipo más fuertes. No he usado Scoobi, pero el API parece similar a lo que tienen.

Además, hay algunos otros beneficios:

  • El escaldado es muy utilizado en producción en Twitter y ha sido probado en batallas en conjuntos de datos a escala de Twitter.
  • Tiene varios colaboradores activos dentro y fuera de Twitter que se comprometen a hacerlo genial.
  • Es interoperable con sus trabajos en cascada existentes.
  • Además de la API Typed, tiene una API Fields que puede ser más familiar para los usuarios de R y frameworks de marcos de datos.
  • Proporciona una robusta biblioteca de matrices .

Otra opción es Stratosphere . Ofrece una API de Scala que convierte los tipos de Scala a los tipos de datos internos de Stratosphere.

La API es bastante similar a Scalding, pero Stratosphere admite nativamente flujos de datos avanzados (por lo que no es necesario encadenar trabajos de MapReduce). Tendrás un rendimiento mucho mejor con Stratosphere que con Scalding.

Stratosphere no se ejecuta en Hadoop MapReduce, sino en Hadoop YARN , por lo que puede usar su clúster YARN existente .

Este es el ejemplo del recuento de palabras en Stratosphere (con la API de Scala):

val input = TextFile(textInput) val words = input.flatMap { line => line.split(" ") } val counts = words .groupBy { word => word } .count() val output = counts.write(wordsOutput, CsvOutputFormat()) val plan = new ScalaPlan(Seq(output))