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 출력을 포함하고 있습니다.
답해 주셔서 감사합니다. 이미 log4j를 사용하고 있지만 로그 출력 파일 (log4j.properties 파일에서 log4j.appender.file.File 속성을 지정해야 함)에 대해 어느 경로를 지정해야하는지 알지 못합니다. ResourceManager 페이지와 같은 모니터링 또는 관리 웹 페이지에 액세스 할 수 없습니다. 로그 파일은 실제로 클러스터에 어디에 위치합니까? 로그를 보려면 각 데이터 노드로 이동해야합니까? – Frank
원사와 mapreduce v1의 명령 줄에서 로그에 액세스하는 방법에 대한 대답을 업데이트했습니다. – Ashrith