2012-03-01 25 views
7

Đối với một công việc phát trực tuyến Hadoop python, làm cách nào để chuyển một tham số tới, ví dụ, tập lệnh giảm tốc để nó hoạt động khác nhau dựa trên tham số được truyền vào?Làm cách nào để chuyển một tham số cho công việc phát trực tuyến Hadoop trăn?

Tôi hiểu rằng việc làm trực tuyến được gọi là định dạng của:

hadoop jar hadoop-streaming.jar -input -output -mapper mapper.py -reducer reducer.py ...

Tôi muốn để ảnh hưởng đến reducer.py.

Trả lời

14

Đối số cho các tùy chọn dòng lệnh -reducer thể được bất kỳ lệnh, vì vậy bạn có thể thử:

$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 

giả myReducer.py được làm thực thi. Disclaimer: Tôi đã không thử nó, nhưng tôi đã thông qua các chuỗi phức tạp tương tự để -mapper-reducer trước.

Điều đó nói rằng, bạn đã thử các tùy chọn

-cmdenv name=value 

, và chỉ đã giảm Python của bạn nhận được giá trị của nó từ môi trường? Nó chỉ là một cách khác để làm mọi thứ.

1

Nếu bạn đang sử dụng python, bạn có thể muốn xem dumbo cung cấp một trình bao bọc đẹp mắt xung quanh luồng hadoop. Trong dumbo bạn vượt qua các thông số với -param như trong:

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

Và sau đó đọc nó trong giảm

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

Bạn có thể đọc thêm trong dumbo tutorial

2

Trong mã Python của bạn,

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

Trong lệnh Hapdoop của bạn bao gồm:

hadoop jar \ 
(...) 
-cmdenv PARAM_OPT=value\ 
(...) 
Các vấn đề liên quan