2012-03-01 13 views
7

Para una tarea de transmisión de Python Hadoop, ¿cómo paso un parámetro a, por ejemplo, la secuencia de comandos del reductor para que se comporte de manera diferente según el parámetro que se pasa?¿Cómo paso un parámetro a una tarea de transmisión de Python Hadoop?

entiendo que los trabajos de streaming se denominan en el formato de:

tarro de Hadoop Hadoop-streaming.jar -input -output -mapper mapper.py -reducer reducer.py ...

quiero afectar a reducer.py

Respuesta

14

El argumento de la opción de línea de comandos -reducer puede ser cualquier comando, para que pueda probar:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ 
    -input inputDirs \ 
    -output outputDir \ 
    -mapper myMapper.py \ 
    -reducer 'myReducer.py 1 2 3' \ 
    -file myMapper.py \ 
    -file myReducer.py 

asumiendo myReducer.py se hace ejecutable. Descargo de responsabilidad: No lo he probado, pero he pasado cadenas complejas similares a -mapper y -reducer antes.

Dicho esto, ¿ha intentado la opción

-cmdenv name=value 

, y acaba su reductor de Python obtener su valor desde el medio ambiente? Es solo otra forma de hacer las cosas.

1

Si está usando python, puede chequear dumbo, que proporciona una buena envoltura alrededor de la transmisión de hadoop. En dumbo pasar parámetros con -param como en:

dumbo start yourpython.py -hadoop <hadoop-path> -input <input> -output <output> -param <parameter>=<value> 

y luego leer en el reductor

def reducer: 
def __init__(self): 
    self.parmeter = int(self.params["<parameter>"]) 
def __call__(self, key, values): 
    do something interesting ... 

Puede leer más en el dumbo tutorial

2

En su código Python,

import os 
(...) 
os.environ["PARAM_OPT"] 

En su comando Hapdoop include:

hadoop jar \ 
(...) 
-cmdenv PARAM_OPT=value\ 
(...) 
Cuestiones relacionadas