2013-08-27 2 views
0

Hadoop에서 여러 작업을 하나의 작업으로 연결하려고합니다 (API 버전 1.2.1을 사용하고 있습니다). 주제에 관한 기사를 보았습니다. here을 참조하십시오.하나의 작업에서 여러 작업을 연결하는 Hadoop

내 주 수업은 다음과 같습니다 : http://pastebin.com/C21PKM1j (약간의 정리 작업을 수행하고 다시 읽을 수 있도록 재 배열했습니다) 나는 Cloudera 데모 VM을 사용하고 있습니다. 체인 연결을 사용하기 전에 간단한 작업이 효과적이었습니다. 이 버전은 오류 및 로그 파일의 중요한 정보없이 10-20 초 내에 완료됩니다. 저는 실제로 어떤 일자리도 시작되지 않았다고 확신합니다.하지만 그 이유를 알 수는 없습니다.

편집 : 출력 디렉토리가 전혀 생성되지 않습니다.

편집 : here에서 디버깅을 위해 코드에 jobRunner 및 handleRun 스 니펫을 포함 시켰습니다. 그것은 두 번 반복 실행됩니다 ("계속 실행"두 번 나타남). 정상적으로 종료됩니다.

편집 : 나는 몇 시간 동안 상사처럼 google-ing입니다. "작동하는"예제가 많이있는 것처럼 보이며, hadoop 버전과 올바른 API 호출로 문제가 발생합니다 (많은 클래스가 hadoop-core.jar에서 같은 이름으로 나타남).

+0

코드를 게시 할 수 있습니다. – Rags

+0

코드가 우편에 있습니다.은 (는) 붙여 넣기 링크를 참조하십시오. – gyorgyabraham

+0

당신이 작업을 시작하는 방법이 정확한지 나는 잘 모르겠다. 그냥 hadoop 레퍼런스를 확인하고 다음 줄을 시작하라. 'JobClient.runJob (conf2); 실패의 원인이되는 스레드 구조가 아니라는 것을 확신 할 수 있습니까? – DDW

답변

0

This 답변이 도움이 될 수 있습니다. 사용중인 API에 따라지도를 계속 변경하고 setMapperClass 및 setReducerClass를 사용하여 클래스를 줄이고 작업을 제출해야합니다. 당신이 다음 중 하나에 대한 입력으로 이전 작업의 출력을 제공 할 또한 경우 동적으로 출력 경로를 제공하는 문자열 변수를 사용합니다.

String input=args[0]; 
    String out=args[1]; 
    String output = out+"job1"; 
    public static String OUTPUT_FILE_NAME = "/part-00000"; 

(당신이 스크립트 갈 수있는이 부분을 원하지 않는 경우) 다음은 구 API 용입니다

/*code for changing mapper and reducer classes*/   
    FileInputFormat.setInputPaths(conf, new Path(input)); 
    FileOutputFormat.setOutputPath(conf, new Path(output)); 
    JobClient.runJob(conf); 
    input= output+OUTPUT_FILE_NAME; 
    output = out + "job2"; 
    ...... 
    ...... 
관련 문제