오프라인 편집 뷰어 가이드

오프라인 편집 뷰어 가이드 (Offline Edits Viewer Guide)

HDFS의 EditLog 파일을 파싱하는 Offline Edits Viewer(oev) 도구 사용법을 설명하는 문서예요. 이진(binary) 형식과 XML 형식 사이의 변환, 통계 출력, 손상된 편집 로그 복구 방법까지 다룹니다.

출처: 문서

본문

개요 (Overview)

Offline Edits Viewer는 EditLog 파일을 파싱하는 도구입니다. 현재 제공되는 프로세서들은 주로 서로 다른 형식 간 변환에 유용하며, 사람이 읽을 수 있고 네이티브 이진 형식보다 편집하기 쉬운 XML 형식도 포함합니다.

이 도구는 edits 형식 -18(대략 Hadoop 0.19) 이후를 파싱할 수 있어요. 파일에 대해서만 동작하며, Hadoop 클러스터가 실행 중일 필요는 없습니다.

지원되는 입력 형식:

  1. binary — Hadoop이 내부적으로 사용하는 네이티브 이진 형식
  2. xml — xml 프로세서가 만드는 XML 형식. 파일 이름이 .xml(대소문자 무시) 확장자를 가지면 사용됩니다.

참고: XML/Binary 형식 입력 파일은 같은 종류의 프로세서로 처리할 수 없어요(예: XML 파일을 xml 프로세서로 처리 불가).

Offline Edits Viewer는 여러 출력 프로세서를 제공합니다(별도로 명시하지 않는 한 출력은 원래 edits 파일로 되돌릴 수 있습니다).

  1. binary — Hadoop이 내부적으로 사용하는 네이티브 이진 형식
  2. xml — XML 형식
  3. stats — 통계를 출력. 이 출력은 Edits 파일로 되돌릴 수 없습니다.

사용법 (Usage)

XML 프로세서

XML 프로세서는 edits 로그 정보를 담은 XML 파일을 만들 수 있어요. -i와 -o 명령줄 옵션으로 입력·출력 파일을 지정합니다.

bash$ bin/hdfs oev -p xml -i edits -o edits.xml

XML 프로세서는 Offline Edits Viewer의 기본 프로세서이므로, 다음과 같이 쓸 수도 있습니다.

bash$ bin/hdfs oev -i edits -o edits.xml

그러면 다음과 같은 출력이 만들어집니다.

<?xml version="1.0" encoding="UTF-8"?>
<EDITS>
  <EDITS_VERSION>-64</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>1</TXID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_UPDATE_MASTER_KEY</OPCODE>
    <DATA>
      <TXID>2</TXID>
      <DELEGATION_KEY>
        <KEY_ID>1</KEY_ID>
        <EXPIRY_DATE>1487921580728</EXPIRY_DATE>
        <KEY>2e127ca41c7de215</KEY>
      </DELEGATION_KEY>
    </DATA>
  </RECORD>
  <RECORD>
...remaining output omitted...

바이너리 프로세서 (Binary Processor)

바이너리 프로세서는 XML 프로세서의 반대입니다. -i와 -o로 입력 XML 파일과 출력 파일을 지정해요.

bash$ bin/hdfs oev -p binary -i edits.xml -o edits

이렇게 하면 XML 파일로부터 edits 로그 파일을 재구성합니다.

통계 프로세서 (Stats Processor)

Stats 프로세서는 edits 로그 파일에 담긴 op 코드들의 개수를 집계하는 데 사용합니다. -p 옵션으로 지정할 수 있어요.

bash$ bin/hdfs oev -p stats -i edits -o edits.stats

이 프로세서의 출력은 다음과 같은 형태입니다.

VERSION                             : -64
OP_ADD                         (  0): 8
OP_RENAME_OLD                  (  1): 1
OP_DELETE                      (  2): 1
OP_MKDIR                       (  3): 1
OP_SET_REPLICATION             (  4): 1
OP_DATANODE_ADD                (  5): 0
OP_DATANODE_REMOVE             (  6): 0
OP_SET_PERMISSIONS             (  7): 1
OP_SET_OWNER                   (  8): 1
OP_CLOSE                       (  9): 9
OP_SET_GENSTAMP_V1             ( 10): 0
...some output omitted...
OP_APPEND                      ( 47): 1
OP_SET_QUOTA_BY_STORAGETYPE    ( 48): 1
OP_ADD_ERASURE_CODING_POLICY   ( 49): 0
OP_ENABLE_ERASURE_CODING_POLICY  ( 50): 1
OP_DISABLE_ERASURE_CODING_POLICY ( 51): 0
OP_REMOVE_ERASURE_CODING_POLICY  ( 52): 0
OP_INVALID                     ( -1): 0

출력은 콜론으로 구분된 두 열 테이블(OpCode와 OpCodeCount) 형식입니다. 각 OpCode는 NameNode의 특정 작업에 대응합니다.

옵션 (Options)

플래그 설명
[-i ; --inputFile] 입력 파일 처리할 입력 edits 로그 파일을 지정. Xml(대소문자 무시) 확장자는 XML 형식, 아니면 바이너리 형식으로 가정. 필수.
[-o ; --outputFile] 출력 파일 출력 파일 이름 지정. 지정한 출력 프로세서가 파일을 생성하는 경우에만. 이미 존재하는 파일은 조용히 덮어씀. 필수.
[-p ; --processor] 프로세서 image 파일에 적용할 프로세서 지정. 현재 유효한 값은 binary, xml(기본), stats.
[-v ; --verbose] 입력·출력 파일 이름을 출력하고 프로세서 출력을 지정 파일뿐 아니라 콘솔로도 보냄. 매우 큰 파일에서는 처리 시간이 한 자릿수 이상 늘어날 수 있음.
[-f ; --fix-txids] 입력의 트랜잭션 ID를 다시 매겨서 중복이나 잘못된 트랜잭션 ID가 없게 함.
[-r ; --recover] 바이너리 edits 로그를 읽을 때 복구 모드 사용. edits 로그의 손상된 부분을 건너뛸 수 있게 해 줌.
[-h ; --help] 도구 사용법과 도움말을 표시하고 종료.

사례 연구: Hadoop 클러스터 복구 (Case study)

Hadoop 클러스터에 문제가 생겨 edits 파일이 손상된 경우, 올바른 부분만이라도 일부를 구할 수 있습니다. 바이너리 edits를 XML로 변환하고, 수동으로 편집한 뒤 다시 바이너리로 변환하면 되요. 가장 흔한 문제는 edits 파일에 마지막 레코드(opCode가 -1인 레코드)가 없는 것입니다. 도구가 이를 인식하고 XML 형식이 올바르게 닫혀야 합니다.

XML 파일에 마지막 레코드가 없으면, 마지막 올바른 레코드 뒤에 하나를 추가할 수 있어요. opCode가 -1인 레코드 이후의 내용은 무시됩니다.

마지막 레코드(opCode -1) 예시:

<RECORD>
  <OPCODE>-1</OPCODE>
  <DATA>
  </DATA>
</RECORD>

더 알아보기 (Learn more)