2013-02-06 2 views
1

3 단계로 mapreduce 작업을 구현하려고하고 있으며 각 단계마다 지금까지 모든 단계의 데이터가 필요합니다. 누구 mrjob에 디스크에 매퍼 또는 reducers 결과를 저장할 수있는 방법에 대한 예제/아이디어가 있습니까?MapReduce : Mrjob 결과를 지속적으로 저장합니다.

답변

1

작업에 여러 입력을 전달할 수 있습니다. 이전 작업의 출력을 입력으로 가져 오기만하면됩니다.

결과를 디스크에 저장한다고하면 출력이 stdout으로 다시 스트리밍되는 것처럼 보입니까? 그 행동은 단지 편리하고 (그리고 꺼질 수 있습니다), MRJob 모든 것이 디스크에서 튀어 오릅니다.

2 단계 작업의 경우이 작업을 수행 할 수 있습니다 :

job1 = firstMR(['-r', mode, inputDir, '-o', outputDir, '--no-output']) 
job1.set_up_logging() 
with job1.make_runner() as runner1: 
    runner1.run() 
    firstOutput = runner1.get_output_dir() 

job2 = secondMR(['-r', mode, firstOutput, anyOtherInput, '-o', finalOutputDir, '--no-output']) 
job2.set_up_logging() 
with job2.make_runner() as runner2: 
    runner2.run() 

일도

가 참고 :

  • 하둡에서 실행되는 모든 디렉토리 아마 HDFS해야한다 : // 일부/경로/
  • 플래그가 아니며 옵션 앞에없는 인수는 입력 파일 또는 디렉토리로 간주됩니다.
  • 출력을 중지하려면 --no-output을 사용하십시오. comi 위의 첫 번째 단계에서 사용했고 중간 결과를 원하지는 않았지만 차이를 보여주기 위해 두 번째 단계에서 제외했습니다. 3 단계가 필요한 경우 처음 2 단계와 3 단계를 생략 할 수 있습니다. 또는 세 번째 단계의 결과물을 쉽게 읽을 수있는 폴더에 씁니다.

당신이 어떤 장애물에 부딪혔다는 것을 알게되면 비교적 똑바로 말해야합니다.

+0

'with run1 :'로 job1.make_runner()를 사용하면'with' 스코프를 남긴 후에'firstOutput' 디렉토리를 정리하지 않겠습니까? job2가 job1'with' 문 범위 안에 있어야하지 않습니까? 참조 : https://pythonhosted.org/mrjob/runners-runner.html#mrjob.runner.MRJobRunner.cleanup – Andy

관련 문제