하둡 척와(Hadoop Chukwa) 초보 가이드 – 기본

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

 척와 초보자를 위한 가이드로, 총 3개로 구성했습니다.

  1. 기본
  2. 설치하기
  3. 에이전트 영향도 분석

개요

하둡 척와(Chukwa)는 분산된 서버에서 로그 데이터를 수집하여 저장하며, 저장한 데이터를 분석하기 위해서 만들어졌다. 또한 하둡 클러스터의 로그, 서버의 상태 정보 등을 관리할 수 있는 기능도 포함되어 있다.

장점

  • 로그를 생성하는 응용 프로그램의 로그 저장 모듈을 수정하지 않고도 로그를 수집할 수 있다.
  • 수집된 로그 파일을 하둡 파일 시스템(HDFS)에 저장한다. 따라서 하둡 파일 시스템의 장점을 그대로 가진다.
  • 실시간 분석도 가능하다.

단점

  •  하둡 파일 시스템이 먼저 설치되어 있어야 한다. 하지만 하둡은 단순히 압축만 풀어서 설치할 수 있으므로 큰 문제는 아니다.

척와 시스템 구성

척와 시스템은 아래와 같이 구성된다.

chukwa_system_diagram

  • 척와 에이전트(agent)
    로그를 수집할 대상 서버(Monitored Source Node)에 설치한다. 에이전트는 해당 서버의 로그 파일이나 서버 정보를 컬렉터로 전송한다.
  • 척와 컬렉터(collector)
    여러 대의 에이전트로부터 로그 정보를 수신해서 하둡 파일 시스템에 저장한다.
  • 데이터 프로세싱(data processing)
    컬렉터가 수신한 데이터에 대해 아카이빙(archiving), 디먹스(demux) 등의 작업을 수행해서 처리한다.
  • HICC(Hadoop Infrastructure Care Center)
    하둡 클러스터의 로그 파일과 시스템 정보를 수집해서 분석한 후, 웹 UI를 통해 보여준다. 일반적인 로그 수집을 위한 용도가 아니라 하둡 클러스터 자체를 관리하는 기능이므로, 여기에서는 다루지 않겠다.

에이전트

척와 에이전트 자체에서 데이터를 직접 수집하지는 않고, 어댑터(adaptor)를 통해서 수집한다. 어댑터는 에이전트 프로세스 안에서 실행되며, 데이터를 실제로 수집하는 역할을 한다. 에이전트에 어댑터를 등록하는 방법에는 두 가지가 있다.

  • 에이전트가 시작할 때 읽어들이는 환경 설정 정보(conf/initial_adaptors)에 어댑터를 추가
  • 실행 중인 에이전트에 직접 어댑터를 추가

에이전트는 실행될 때 환경 설정 파일(conf/collectors)을 읽어들인 후, 이 중에서 하나의 컬렉터를 랜덤하게 선택해서 데이터를 전송한다. 선택한 컬렉터 서버에 장애가 생긴면, 설정 파일에 등록된 다른 컬렉터 서버에 데이터를 전송한다.

  • 에이전트 쪽 로그 유실 방지
    모든 컬렉터 서버에 장애가 있다면, 마지막으로 전송된 파일의 오프셋 정보(checkpoint)를 로컬 파일 시스템에 기록해 둔다. 이후에 컬렉터에 정상적으로 데이터를 전송할 수 있을 때가 되면, 해당 오프셋 이후의 데이터를 전송한다. 이러한 방식을 통해 로그 유실을 방지한다.

컬렉터

에이전트로부터 전송된 데이터를 주기적으로 하둡 파일 시스템에 저장한다. 이때 한 컬렉터는 여러 대의 에이전트 서버로부터 데이터를 전송받지만, 이를 하나의 파일에 저장한다. 이처럼 컬렉트가 저장하는 파일을 싱크(sink) 파일이라고 부르며, 하둡 파일 시스템의 SequenceFile 포맷으로 저장한다.

  • 컬렉터 쪽 로그 유실 방지
    하둡 파일 시스템은 파일을 저장할 때 특정 크기(64MB) 이상이 되지 않으면 close() 명령을 이용해서 파일을 닫지 않는 한 파일 내용이 보이지 않는다. 따라서 파일을 저장하는 클라이언트(이 경우 컬렉터)가 비정상 종료된 경우, 해당 데이터가 유실될 수 있다. 척와에서는 데이터가 유실되는 일을 방지하기 위해, 주기적으로 새로운 파일을 생성하고 에이전트에서 전송받은 데이터를 새로운 파일에 저장한 후 close()한다.

컬렉터는 로그 파일을 하둡 파일 시스템에 저장한다. 하지만 사용자 정의 Writer를 지정할 수도 있다. 예를 들어 척와에서 제공하는 PipelineStageWriter를 사용하면, 하나의 로그에 대해 여러 개의 Writer를 사용할 수 있다. 이를 통해 로그를 저장하는 동시에, 실시간으로 분석할 수도 있다. 실제로 척와에서는 디폴트로 PipelineSgateWriter를 사용한다.


// chukwa-collector-conf.xml 중에서

....

<property>

    <name>chukwaCollector.writerClass</name>

    <value>org.apache.hadoop.chukwa.datacollection.writer.PipelineStageWriter</value>

</property>

<property>

    <name>chukwaCollector.pipeline</name

    <value>org.apache.hadoop.chukwa.datacollection.writer.SocketTeeWriter,

org.apache.hadoop.chukwa.datacollection.writer.SeqFileWriter</value>

</property>

...

데이터 프로세싱

척와에서 로그 데이터를 처리하는 작업에는 아카이빙(archiving)과 디먹스(demux), 2가지 작업이 있다.

  • 아카이빙(archiving)
    아카이빙은 컬렉터가 저장한 로그 파일을 이용해서 시간 순서와 동일한 그룹으로 묶는 작업을 수행한다. 아카이빙에서는 데이터의 중복을 제거하고 정렬작업을 수행한 후, 하둡의 SequenceFile 포맷으로 저장한다.
  • 디먹스(demux)
    디먹스는 로그 레코드를 파싱해서 키-값 쌍으로 구성되는 ChukwaRecord를 만든 후, 하둡 파일 시스템에 다시 파일로 저장한다.

뿐만 아니라 맵리듀스(MapReduce)를 직접 만들어서, 아키이빙과 디먹스 작업이 완료된 데이터에 대해 맞춤형 분석 작업을 할 수도 있다. 척와 내부적으로도 PostProcessing이라는 작업을 수행한다. 디먹스가 완료된 데이터 중에서 하둡 클러스터의 시스템 메트릭 정보 등을 HICC에서 사용하는 데이터로 변환한 후, MySQL에 저장하는 과정이 PostProcessing 작업이다. PosteProcessing 코드를 참조하면, 로그 파일을 요구에 맞게 분삭하는 시스템을 구축할 수 있을 것으로 보인다.

척와 데이터 모델

척와 어댑터는 데이터를 청크(chunk) 단위로 전송한다. 청크란 일련의 바이트로 구성되며, 메타데이터가 일부 포함된다. 이러한 메타데이터는 다음과 같다. 이 중에서 Cluster와 Datatype은 사용자가 직접 설정해야 한다.

  • Source
    청크가 생성되는 호스트명
    자동으로 설정된다
  • Cluster
    호스트가 연결된 클러스터
    conf/chukwa-env.sh에 사용자가 설정한다.
  • Datatype
    출력 포맷
    어댑터를 구동할 때 사용자가 지정한다.
  • Sequence ID
    스트림에서 청크의 오프셋
    자동으로 설정되며, 초기 오프셋은 어댑터가 실행될데 설정된다.
  • Name
    데이터 소스 이름
    자동으로 설정되며, 어댑터가 선택한다.

장애가 발생했을 때 로그를 재전송하는 경우, 로그 데이터의 중복을 방지하기 위해서 이러한 메타데이터가 추가된다. 또한 로그의 데이터 타입별로 서로 다른 분석작업이 필요한 경우, 데이터 타입 정보를 이용할 수도 있다.

척와 스토리지 구조

척와에서 사용하는 하둡 파일 시스템의 구조

일반적으로 척와의 파일 시스템은 아래와 같이 구성된다.


/chukwa/

    archivesProcessing/

    dataSinkArchives/

    demuxProcessing/

    finalArchives/

    logs/

    postProcess/

    repos/

    rolling/

    temp/

척와 데이터 프로세싱 단계

척와 에이전트에서 전송한 데이터는 아래의 단계를 따라 처리된다.

  1. 청크 사이즈가 64MB가 될때까지, 또는 지정된 시간 간격이 지날 때까지는 청크를 logs/*.chukwa 파일에 저장한다.
  2. 컬렉터는 청크를 닫고, 청크를 *.done으로 이름을 변경한다.
  3. DemuxManager가 *.done 파일이 있는지 매 20초마다 검사한 후, 있으면 처리한다.
    – *.done 파일이 있으면, 해당 파일을 디먹스 프로세싱을 하기 위한 위치(demuxProcessing/mrInput)로 옮긴다.
    – demuxProcessing/mrInput에 있는 데이터에 대해 디먹스 MapReduce 잡이 실행하고, 그 결과를 출력 위치(demuxProcessing/mrOutput)에 저장한다.
    – 디먹스가 3번 시도하고, 성공하면 처리 완료된 파일을 아카이빙(dataSinkArchives/[yyyyMMdd]/*/*.done) 한다.
    – 디먹스가 실패하면 해당 파일을 에러 폴더(dataSinkArchives/InError/[yyyyMMdd]/*/*.done)로 옮긴다.
  4. HICC를 위한 데이터 프로세싱 작업이 주기적으로 실행된다 (자세한 내용은 생략한다).
  5. ChukwaArchiveManager가 30분마다 한번 정도로 실행되어, 맵리듀스를 사용해 아카이빙 처리를 한다. 아카이빙 처리가 되면서 dataSinkArchives에 있던 데이터를 삭제한다.
    dataSinkArchives/[yyyyMMdd]/*/*.done
    => archivesProcessing/mrInput
    => archivesProcessing/mrOutput
    => finalArchives/[yyyyMMdd]/*/chukwaArchive-part-*

이제 척와에 대한 개략적인 설명은 이 정도로 해 두고, 실제로 척와를 설치해 보자. 척와 설치와 관련해서는 “하둡 척와(Hadoop Chukwa) 초보 가이드 – 설치하기”에서 살펴보겠다.

참고자료

  • 클라우드 컴퓨팅 구현 기술 / 깅형준, 조준호, 안성화, 김병준 저 / 에이콘 출판사
  • 하둡 완벽 가이드 / 톰 화이트 지음 / 오라일리 출판사
  • Chukwa Documentation 4.0

크몽 재능

댓글 남기기