2017-09-07 5 views
1

hadoop에서 시간 제한 문제가 발생했습니다. 작업이 종료됩니다. close() 메소드에는 무거운 정리 작업이 있으므로 정리 작업을 수행 할 때 close 메소드의 진행 상황을 업데이트해야합니다.close() 메소드의 작업 상태/진행 상황을보고합니다.

클린업 작업량에 따라 확장 할 수 없으므로 시간 초과를 늘리는 것은 좋은 방법이 아닙니다.

내가보고있는 레거시 작업은 이전 API를 사용하고 있으며, 진행 상황을 업데이트하는 데 사용할 수있는 리포터 객체가 reduce() 메소드에 있습니다. 그러나 close() 메소드에는 해당 Reporter가 없습니다. 그래서 거기에 어떤 해결 방법이 있습니까?

답변

0

Mapper.Context을 사용해보세요.

하둡은 흥미로운 방법 인 Public void Progress()이 포함 된 Prograssable 인터페이스를 제공합니다. Context 클래스는이 인터페이스를 구현하므로 매퍼 또는 감속기는 다음을 호출 할 수 있습니다.

context.progress() 

표시가 살아 있고 계속 처리됩니다. "mapred-site.xml 파일"에

<property> 
    <name>mapreduce.task.timeout</name> 
    <value>2000000</value> 
</property> 

: 당신이 좋은 옵션이 아니다 확신 때문에 최후의 수단으로


는 해당 구성 속성을 증가시킬 수있다.

또는 코드에서이 작업을 수행 : 귀하의 경우에,

Configuration conf = new Configuration(); 
long milliSeconds = 2000 * 60 * 60; 
conf.setLong("mapreduce.task.timeout", milliSeconds); 

높은이 속성의 값, 더 나은. 기본값은 600000입니다.

+0

이전 API에서 비슷한 클래스를 Reporter라고합니다. 그러나 감속기에서는 close() 메서드로 전달되지 않습니다. 기자는 평생 동안 감속기를위한 싱글 톤입니까? 그렇다면 개체 수준 필드에 할당하고 나중에 진행률보고에 사용할 수 있습니까? – StarPinkER