2009-07-27 12 views
13

¿Es posible escribir trabajos de asignación/reducción para Amazon Elastic MapReduce (http://aws.amazon.com/elasticmapreduce/) usando lenguajes .NET? En particular, me gustaría usar C#.¿Es posible escribir trabajos de asignación/reducción para Amazon Elastic MapReduce utilizando .NET?

La investigación preliminar sugiere que no. El texto de marketing de la URL anterior sugiere que tiene una "opción de Java, Ruby, Perl, Python, PHP, R o C++", sin mencionar los lenguajes .NET. Este hilo de Amazon (http://developer.amazonwebservices.com/connect/thread.jspa?messageID=136051 - "Soporte para C/F # mapa/reductores") dice explícitamente que "actualmente Amazon Elastic MapReduce no es compatible con la plataforma Mono ni con lenguajes como C# o F #."

Lo anterior sugiere que no se puede hacer. Me pregunto si hay soluciones alternativas, sin embargo. Por ejemplo, ¿puedo modificar la imagen de la máquina Elastic MapReduce para mi cuenta, e instalar Mono ahí?

Una alternativa, sugerida por Amazon preguntas frecuentes "utilizando otro software requerido por su Jar" (http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?CHAP_AdvancedTopics.html) y "Cómo utilizar archivos adicionales y Bibliotecas en el asignador o reductor" (http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?addl_files.html), es hacer que el primer paso de la Mapa/Reducir trabajo sea para instalar Mono en la instancia local. Eso suena un poco ineficiente, pero tal vez podría funcionar?

Quizás una alternativa más sensata sería tratar de renunciar a la comodidad de Elastic MapReduce, y configurar manualmente mi propio clúster de Hadoop en EC2. Entonces supongo que podría instalar Mono sin dificultad.

Respuesta

0

Debería poder utilizar el VB.NET library desde cualquier idioma .NET, incluido C#.

+1

También hay una versión de C# también (http://developer.amazonwebservices.com/connect/entry.jspa? externalID = 2307). Sin embargo, ninguno de estos me parece que le permiten escribir mapeadores/reductores de .NET; en cambio, su propósito (compartido) parece proporcionar una alternativa API para usar manualmente el panel de control Elastic MapReduce basado en la web de Amazon, cuyo objetivo principal es iniciar/detener/configurar sus trabajos de MapReduce. No creo que eso te ayude a implementar un asignador o reductor en VB/C#, aunque quizás me esté perdiendo algo. – Chris

5

Probablemente haya una solución posible al usar Hadoop streaming y compilar su código C# con un compilador Ahead Of Time en código nativo (verificar: http://www.mono-project.com/AOT). El binario podría ejecutarse desde S3 como un programa de C++ podría, supongo.

La respuesta de Reed Copsey es incorrecta. La biblioteca VB.NET es para crear trabajos, comenzando por & deteniéndolos, pero no se trata del código que realmente se está ejecutando en los trabajos de Hadoop.

2

Elastic MapReduce ahora tiene una función de "bootstrap acciones", que Amazon explica actualmente de la siguiente manera:

Una acción de arranque es un mecanismo que le permite ejecutar un script en casos Elastic MapReduce antes de Hadoop de partida . Los scripts de acción de Bootstrap se almacenan en Amazon S3 y se pasan a Amazon Elastic MapReduce al crear un nuevo flujo de trabajo. Los scripts de acción Bootstrap se descargan de Amazon S3 y se ejecutan en cada instancia antes de que se ejecute el flujo de trabajo.

Los scripts de acción Bootstrap se pueden escribir en cualquier idioma ya instalado en el flujo de trabajo instancia, incluidos Ruby, Python, Perl y bash.

(Ver http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?introduction.html)

Uno sugirió el uso de esto es que instalar software en sus máquinas de racimo. Podría utilizar esto para instalar un entorno de tiempo de ejecución de .NET (probablemente Mono en lugar de Microsoft, porque porque imagino que todas las máquinas Elastic MapReduce están ejecutando Linux) en sus máquinas de clúster. (No estoy seguro de lo difícil que sería la instalación desatendida. ¿Alguna idea?) Una vez hecho esto, puede llamar a sus mapeadores/reductores de .NET usando la transmisión Hadoop, que Elastic MapReduce parece soportar.

Cuestiones relacionadas