2014-12-30 4 views
3

사용자 로그의 로그 수준, 즉 CDH 5.2.1의 /var/log/hadoop-yarn/userlogs/application_<id>/container_<id> 아래에 나타나는 파일을 변경하려고했습니다. 그러나 무엇을 시도해도 INFO 수준의 로그 만 표시됩니다. 디버깅을 위해 TRACE 레벨 로그를 사용 가능하게하고 싶습니다.Hadoop 2에서 사용자 로그의 로그 수준을 변경하는 방법은 무엇입니까?

것들 지금까지 시도 :

  • /etc/hadoop/conf/log4j.properties의 수준을 추적하기 위해 모든 로거를 설정.
  • mapreduce.map.log.levelmapreduce.reduce.log.levelmapred-site.xml으로 설정하십시오.
  • 제출하기 전에 작업 구성에 mapreduce.map.log.levelmapreduce.reduce.log.level을 설정하십시오.
  • 내 작업 jar 파일에 log4j.properties을 포함시켜 루트 Log4j 로거를 TRACE로 설정합니다. 그들은 아무것도 휴식하지 않았다,하지만 그들은 userlogs 디렉토리에 로그 출력에 영향을주지 않았다 - 이러한 작업의 YARN_ROOT_LOGGER=TRACE,console

없음을 지정하는 yarn-env.sh 수정

  • . yarn-env.sh 을 수정하면이 발생하여 ResourceManager 및 NodeManager 로그가 추적 레벨이됩니다. 불행히도 이러한 것들은 내 목적에 유용하지 않습니다.

    관련성이있는 /var/log/hadoop-yarn/userlogs/application_<id>/container_<id>/stderr에 다음과 같은 오류가 표시됩니다.

    SLF4J: Class path contains multiple SLF4J bindings. 
    SLF4J: Found binding in [jar:file:/usr/lib/zookeeper/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
    SLF4J: Found binding in [jar:file:/tmp/hadoop-yarn/nm-local-dir/usercache/tomcat/appcache/application_1419961570089_0001/filecache/10/job.jar/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
    log4j:WARN No appenders could be found for logger (org.apache.hadoop.ipc.Server). 
    log4j:WARN Please initialize the log4j system properly. 
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
    

    나는의 log4j는 "어떤 구성이"메시지가 루트 로거 지정 작업 jar 파일의 루트에 log4j.properties 파일이 주어진, 일어나지 않을 것입니다 이유를 이해하지 않습니다

    log4j.rootLogger=TRACE, stdout 
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %m%n 
    

    내 코드는 의도적으로 SLF4J를 로깅에 사용하지 않으며, 순수하게 Log4j를 사용합니다.

  • 답변

    5

    실제 답변은 yarn.app.mapreduce.am.log.level을 필요한 수준으로 설정하는 것이었지만 중요한 것은 제출 시간에 Hadoop 작업 구성에서 설정해야한다는 것입니다. 클러스터에서 전역으로 설정할 수 없습니다. 클러스터 글로벌은 항상 하드 코딩되어 있으므로 기본값은 INFO입니다.

    YARN이 명령 줄의 로그 수준 값을 무시하므로 container-log4j.properties 만 사용하면 작동하지 않습니다. addLog4jSystemPropertiesorg.apache.hadoop.mapreduce.v2.util.MRApps이고 교차 참조가 org.apache.hadoop.mapreduce.MRJobConfig 인 것을보십시오.

    container-log4j.properties 실제로이 속성이 설정 한 수준을 재정의 할 수는 없습니다.

    0

    /etc/hadoop/conf/container-log4j.properties를 편집하거나 생성하려고 시도해야합니다.

    간단한 ps aux으로 볼 수 있습니다. 명령 행에 -Dlog4j.configuration=container-log4j.properties이 포함되어 있습니다.

    +0

    이것은 컨테이너 로그 디렉토리에서 "syslog"파일을 제거 했으므로 약간의 효과가있는 것 같습니다. 그러나 그 모든 일이 일어났습니다. [예제 속성 파일] (https://apache.googlesource.com/hadoop-common/+/2942a5bfbafd67655b0859d339a4e95a0b6d5044/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager)을 사용했습니다. /src/main/resources/container-log4j.properties). 나는 이것이 실제로 무엇을하려고하는지에 대한 단서를 가지고있다. – amoe

    +0

    'syslog'파일의 로그 수준 만 변경하려는 경우이 매개 변수에 올바른 값을 지정해야할지 모르겠습니다. – amoe

    1

    CDH5.8에서 작업 제출 시간에 응용 프로그램 로그 수준을 덮어 쓰고 있습니다. 맵퍼와 리듀서의 로그 수준을 수정하려면 다음과 같은 명령을 사용하여 명시 적으로 지정해야했습니다.

    hadoop jar my-mapreduce-job.항아리 -libjars $ {LIBJARS} -Dyarn.app.mapreduce.am.log.level = DEBUG, 콘솔-Dmapreduce.map.log.level = DEBUG, 콘솔-Dmapreduce.reduce.log.level = DEBUG , 콘솔

    로그는 Yarn ResourceManager 웹 UI를 사용하여 탐색 할 수있는 응용 프로그램의 syslog에 기록됩니다.