복붙노트

[HADOOP] MRJob에서 각지도 단계의 입력을 구체적으로 결정하는 방법은 무엇입니까?

HADOOP

MRJob에서 각지도 단계의 입력을 구체적으로 결정하는 방법은 무엇입니까?

여러 단계로 구성된지도 축소 작업을하고 있습니다. 모든 단계에서 mrjob을 사용하면 이전 단계 출력을받습니다. 문제는 내가 그것을 원하지 않는다는 것입니다.

내가 원하는 것은 몇 가지 정보를 추출하여 모든 입력에 대해 두 번째 단계에서 사용하는 것입니다. mrjob을 사용하여이 작업을 수행 할 수 있습니까?

참고 : 나는 emr을 사용하고 싶지 않기 때문에이 질문은별로 도움이되지 않습니다.

업데이트 : 하나의 작업에서이 작업을 수행 할 수 없다면 두 가지 작업으로 수행해야합니다. 이 경우,이 두 작업을 랩핑하고 중간 아웃 퍼스 등을 관리 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.너는 Runners를 사용할 수있다.

    너는 Runners를 사용할 수있다.

    별도로 작업을 정의하고 다른 파이썬 스크립트를 사용하여 작업을 호출해야합니다.

    from NumLines import NumLines
    from WordsPerLine import WordsPerLine
    import sys
    
    intermediate = None
    
    def firstJob(input_file):
        global intermediate
        mr_job = NumLines(args=[input_file])
        with mr_job.make_runner() as runner:
            runner.run()
            intermediate = runner.get_output_dir()
    
    def secondJob(input_file):
        mr_job = WordsPerLine(args=[intermediate,input_file])
        with mr_job.make_runner() as runner:
            runner.run()
    
    if __name__ == '__main__':
        firstJob(sys.argv[1]) 
        secondJob(sys.argv[1])
    

    다음에 의해 호출 될 수 있습니다.

    python main_script.py input.txt
    
  2. from https://stackoverflow.com/questions/26082234/how-to-specifically-determine-input-for-each-map-step-in-mrjob by cc-by-sa and MIT license