2015-01-23 3 views
3

MapReduce 작업에 로그인하기위한 최선의 방법을 찾으려고합니다. 나는 다른 Java 응용 프로그램에서와 같이 log4j appender와 함께 slf4j를 사용하고 있지만 MapReduce 작업은 제한된 액세스 권한을 가진 공유 클러스터이므로 로그 파일 위치를 어디에 설정해야하는지 모르는 클러스터에서 분산 된 방식으로 실행되기 때문에 특권.MapReduce 작업에 로그인하기위한 표준 사례

MapReduce 작업에 로그인하기위한 표준적인 방법은 없으므로 작업 완료 후 클러스터 전체에서 로그를 쉽게 볼 수 있습니다.

답변

5

hadoop이 사용하는 기본 로깅 프레임 워크 인 log4j를 사용할 수 있습니다. 그래서, 당신의 맵리 듀스 응용 프로그램에서 당신이 뭔가를 할 수 있습니다 :

import org.apache.log4j.Logger; 
// other imports omitted 

public class SampleMapper extends Mapper<LongWritable, Text, Text, Text> { 
    private Logger logger = Logger.getLogger(SampleMapper.class); 

    @Override 
    protected void setup(Context context) { 
     logger.info("Initializing NoSQL Connection.") 
     try { 
      // logic for connecting to NoSQL - ommitted 
     } catch (Exception ex) { 
      logger.error(ex.getMessage()); 
     } 
    } 

    @Override 
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 
     // mapper code ommitted 
    } 
}   

이 샘플 코드는 사용자의 log4j 로거는 상속 매퍼 로거에 이벤트를 기록합니다. 모든 로그 이벤트는 해당 작업 로그에 기록됩니다. JobTracker (MRv1)/ResourceManager (MRv2) 웹 페이지에서 작업 로그를 방문 할 수 있습니다.

당신이 다음 명령을 사용하여 명령 줄에서 응용 프로그램 로그에 액세스 할 수실을 사용하는 경우

yarn logs -applicationId <application_id> 

당신이 맵리 듀스 (V1)를 사용하는 경우 동안을, 액세스의 단일 지점에서가 없다 명령 행; 따라서 각 TaskTracker에 로그인하고 구성된 경로를보아야합니다. /var/log/hadoop/userlogs/attempt_<job_id>/syslog${hadoop.log.dir}/userlogs에 지정되어 있고 log4j 출력을 포함하고 있습니다.

+0

답해 주셔서 감사합니다. 이미 log4j를 사용하고 있지만 로그 출력 파일 (log4j.properties 파일에서 log4j.appender.file.File 속성을 지정해야 함)에 대해 어느 경로를 지정해야하는지 알지 못합니다. ResourceManager 페이지와 같은 모니터링 또는 관리 웹 페이지에 액세스 할 수 없습니다. 로그 파일은 실제로 클러스터에 어디에 위치합니까? 로그를 보려면 각 데이터 노드로 이동해야합니까? – Frank

+0

원사와 mapreduce v1의 명령 줄에서 로그에 액세스하는 방법에 대한 대답을 업데이트했습니다. – Ashrith

0

@Ashrith의 답변에 추가하려면 JobTracker GUI를 통해 개별 작업 추적기 로그를 볼 수 있습니다. 실행중인 작업 시도는 JT Gui가 볼 수 있으며 stderr, stdout 및 시스템 로그 중 하나를 클릭 할 수 있습니다. 시스템 로그는 log4j 출력을 찾는 곳입니다.

관련 문제