Pregunta

La versión actual de Hadoop-Streaming requiere una clase de Java para el combinador, pero leí en algún lugar donde podemos usar un hacke como lo siguiente:

hadoop jar ./contrib/streaming/hadoop-0.20.2-streaming.jar  -input /testinput -output /testoutput -mapper "python /code/triples-mapper.py | sort | python /code/triples-reducer.py" -reducer /code/triples-reducer.py 

Sin embargo, esto no parece funcionar.¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Sospecho que su problema se encuentra en algún lugar de la siguiente fuente:

http://svn.apache.org/viewvc/hadoop/common/tags/release-0.20.2/src/contrib/streaming/src/java/org/ Apache / Hadoop / Streaming / Pipemapred.Java? Ver= Markup

Método de la línea 69 splitArgs() que está tokenizando el comando que pasó:

python /code/triples-mapper.py | sort | python /code/triples-reducer.py

en un comando para ejecutar: /code/triples-mapper.py (línea 131/132), y luego un conjunto de argumentos para pasar. Todas las fichas se pasan a ProcessBuilder (línea 164)

Java API para ProcessBuilder

Entonces, los sistemas operativos no están siendo interpretados por los tubos, más transmitidos como argumentos a su MAPPER (deberían poder confirmarlo dumping los args que pasan dentro de su código de asignación)

Esto es todo por 0.20.2, por lo que puede haber sido "arreglado" para satisfacer sus propósitos en la versión posterior de Hadoop.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top