2016-10-05 9 views
0

최근에 Hadoop MapReduce2 히스토리 서버에 대한 GC 로깅을 지원하기 위해 여러 클러스터에서 정확한 로깅을 사용하기로 결정했습니다. 히스토리 서버 관련 메모리 및 가비지 수집 문제를 조사합니다. 너무 많은 디스크 공간을 사용하는 이유 로그 파일 덮어 쓰기 및 디스크 공간 사용 방지를 방지하면서 Hadoop MapReduce2 히스토리 서버에 GC 로깅을 활성화하는 방법

  • 로그에 대한 MR2 역사 서버 다시 시작, 점점 디스크로 이어지는 경우 로그 파일의

    • 덮어 쓰기를 :이 일을하는 동안, 우리는 우리가 발생할 수 알고이 문제를 방지하려면 filled

    Java GC 로깅이 프로세스에서 시작될 때 동일한 이름을 가진 파일의 내용을 대체하는 것처럼 보입니다. 즉, 조심하지 않으면 GC 로깅이 손실 될 수 있습니다. 아마도 필요할 가능성이 클 경우입니다.

    클러스터를 충분히 오래 실행하면 관리하지 않는 한 로그 파일이 디스크를 가득 채 웁니다. GC 로깅이 현재는 방대한 양이 아니더라도 로깅 속도가 갑자기 상승하는 비정상적인 상황의 위험을 관리하고자합니다.

  • 답변

    0

    MapReduce2 히스토리 서버를 시작할 때 일부 JVM 매개 변수를 설정해야합니다. 즉, mapred-env.sh를 일부 변경해야합니다. HADOOP_OPTS에 매개 변수를 설정할 수는 있지만 히스토리 서버에만 영향을 미치므로 HADOOP_JOB_HISTORYSERVER_OPTS으로 설정하는 것이 좋습니다.

    이제 JVM 매개 변수에 대해 설명합니다.

    파일에 GC 로깅을 사용하려면 -verbose:gc -Xloggc:<log-file-location>을 추가해야합니다.

    서버를 다시 시작할 때마다 덮어 쓰기를 방지하려면 로그 파일 이름을 특별히 고려해야합니다. 모든 호출에 대해 고유 한 이름이 있어야 타임 스탬프를 추가하는 것이 가장 좋은 옵션 인 것처럼 보입니다. 타임 스탬프를 추가하기 위해`date + '% Y % m % d % H % M' '과 같은 것을 포함 할 수 있습니다. 이 예에서는 YYYYMMDDHHMM 형식입니다. 일부 Java 버전에서는 로그 파일 위치에 "% t"를 넣을 수 있으며 YYYY-MM-DD_HH-MM-SS 형식의 서버 시작 시간 소인으로 바뀝니다.

    이제 디스크 공간 사용을 관리하십시오. 내가 가지고있는 것보다 더 간단한 방법이 있다면 나는 행복 할 것이다.

    먼저 Java의 내장 GC 로그 파일 순환을 이용하십시오. -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M은 JVM에서 최대 10 개의 GC 로그 파일 (각 크기는 약 10MB 이하)을 사용하여이 순환 게재를 사용하는 예입니다. 10 x 10MB는 최대 100MB입니다.

    최대 10 개의 파일로 GC 로그 파일을 순환 시키면 Xloggc에 지정한 파일 이름에 '.0', '.1', ... '.9'이 추가됩니다. .0이 먼저 나오고 .9에 도달하면 .0을 대체하고 라운드 로빈 방식으로 계속 진행합니다. Java의 일부 버전에서는 .current가 현재 쓰여지고있는 로그 파일의 이름 끝에 더 추가됩니다.

    우리가 분명히 덮어 쓰기하지 않아야하는 고유 한 파일 이름 지정으로 인해 내역 서버 호출 당 100MB 을 가질 수 있으므로 서버의 GC 로그에서 사용되는 디스크 공간을 관리하는 토탈 솔루션이 아닙니다. 각 서버 호출시 최대 10 개의 GC 로그 파일 세트로 끝날 것입니다. 이는 시간이 지남에 따라 늘어날 수 있습니다. 가장 좋은 해결책은 (* nix 아래) logrotate 유틸리티 (또는 다른 유틸리티)를 사용하여 마지막 N 일 동안 수정되지 않은 GC 로그를 정기적으로 정리하는 것입니다.

    수학을 수행하고 충분한 디스크 공간이 있는지 확인하십시오.

    사람들은 GC 로그에서 세부 정보와 컨텍스트를 기본값보다 자주 원하기 때문에 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps을 추가하는 것이 좋습니다.

    함께이 퍼팅, 당신은 mapred-ENV이 뭔가를 추가 할 수 있습니다 : 당신은 아직 당신이 교체 또는에 추가해야합니다 HADOOP_JOB_HISTORYSERVER_OPTS에 대한 참조를 찾을 수 있습니다

    ## enable GC logging for MR2 History Server: 
    
    TIMESTAMP=`date +'%Y%m%d%H%M'` 
    # GC log location/name prior to .n addition by log rotation 
    JOB_HISTORYSERVER_GC_LOG_NAME="{{mapred_log_dir_prefix}}/$USER/mapred-jobhistory-gc.log-$TIMESTAMP" 
    
    JOB_HISTORYSERVER_GC_LOG_ENABLE_OPTS="-verbose:gc -Xloggc:$JOB_HISTORYSERVER_GC_LOG_NAME" 
    JOB_HISTORYSERVER_GC_LOG_ROTATION_OPTS="-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M" 
    JOB_HISTORYSERVER_GC_LOG_FORMAT_OPTS="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps" 
    
    JOB_HISTORYSERVER_GC_LOG_OPTS="$JOB_HISTORYSERVER_GC_LOG_ENABLE_OPTS $JOB_HISTORYSERVER_GC_LOG_ROTATION_OPTS $JOB_HISTORYSERVER_GC_LOG_FORMAT_OPTS" 
    export HADOOP_JOB_HISTORYSERVER_OPTS="$HADOOP_JOB_HISTORYSERVER_OPTS $JOB_HISTORYSERVER_GC_LOG_OPTS" 
    

    .

    위의 경우 {{mapred_log_dir_prefix}}/$USER을 GC 로그를 원하는 위치 (원하는 경우 MapReduce 내역 서버 로그와 동일한 위치로 이동하려는 경우)로 변경할 수 있습니다. 로그 파일 이름을 변경할 수도 있습니다.

    Apache Ambari로 Hadoop 클러스터를 관리하는 경우 이러한 변경 사항은 MapReduce2 서비스> 구성> 고급> 고급 mapred-env> mapred-env 템플릿에 있습니다. Ambari를 사용하면 {{mapred_log_dir_prefix}}이 자동으로 필드 위에 몇 줄 정의 된 Mapreduce Log Dir Prefix로 바뀝니다.

    GC 로깅은 서버가 서버를 다시 시작하면 발생하기 시작하므로 잠시 중단해야 사용할 수 있습니다.