Rumen
Rumen
_Apache Hadoop_용 데이터 추출·분석 도구인 Rumen을 설명하는 문서예요. JobHistory 로그를 채굴해 의미 있는 데이터를 추출하고 파싱 쉬운 축약 형식(digest)으로 저장합니다. Gridmix와 SLS를 구동하는 trace를 만드는 데 사용됩니다.
출처: 문서
본문
개요 (Overview)
_Rumen_은 _Apache Hadoop_을 위해 만들어진 데이터 추출·분석 도구입니다. _Rumen_은 JobHistory 로그를 채굴해 의미 있는 데이터를 추출하고 파싱·축약하기 쉬운 형식인 _digest_로 저장해요. MapReduce 로그의 원시 trace 데이터는 시뮬레이션, 에뮬레이션, 벤치마킹에 종종 부족합니다. 이런 도구들은 소스 데이터에서 발생하지 않은 조건을 측정하려 하기 때문입니다. 예를 들어 원시 trace 데이터에서 작업이 로컬로 실행됐는데 스케줄러 시뮬레이션이 그 작업을 원격 랙에서 실행하도록 선택한다면, 시뮬레이터는 입력이 제공할 수 없는 런타임을 요구합니다. 이런 공백을 메우기 위해 Rumen은 digest에 대한 통계 분석을 수행해 trace가 제공하지 않는 변수를 추정합니다. Rumen trace는 Gridmix(Hadoop MapReduce 클러스터 벤치마크)와 SLS(리소스 매니저 스케줄러 시뮬레이터)를 모두 구동합니다.
동기 (Motivation)
- JobHistory 로그에서 의미 있는 데이터를 추출하는 것은 _MapReduce_에서 동작하도록 만들어진 모든 도구의 공통 작업입니다. MapReduce 프레임워크에 매우 강하게 결합된 사용자 정의 도구를 작성하는 것은 지루해요. 따라서 프레임워크 레벨의 로그 파싱·분석 작업을 수행하는 내장 도구가 필요합니다. 그러한 도구는 작업 기록에 의존하는 외부 시스템을 작업 기록 형식의 변경으로부터 격리해 줄 수 있어요.
- 작업 런타임, 작업 실패 등 _MapReduce Job_의 다양한 속성에 대한 통계 분석을 수행하는 것은 벤치마킹·시뮬레이션 도구가 필요로 하는 또 다른 공통 작업입니다. _Rumen_은 Map/Reduce 작업 런타임에 대한 Cumulative Distribution Functions (CDF)를 생성합니다. 런타임 CDF는 불완전하거나 누락되거나 합성된 작업의 런타임을 외삽하는 데 사용할 수 있어요. 마찬가지로 각 시도(attempt)의 총 성공 작업 수에 대해서도 CDF가 계산됩니다.
구성 요소 (Components)
_Rumen_은 2개의 구성 요소로 이뤄집니다.
- Trace Builder: JobHistory 로그를 파싱 쉬운 형식으로 변환합니다. 현재
TraceBuilder는 JSON 형식으로 trace를 출력합니다. - Folder: 입력 trace를 스케일링하는 유틸리티. _TraceBuilder_에서 얻은 trace는 입력 폴더·파일의 작업들을 단순히 요약합니다. 주어진 trace의 모든 작업이 끝나는 시간 범위를 trace 런타임이라고 할 수 있어요. _Folder_는 trace의 런타임을 스케일링하는 데 사용됩니다. trace 런타임을 줄이는 것은 일부 작업을 입력 trace에서 떨어뜨리고 나머지 작업의 런타임을 축소하는 것을 포함할 수 있어요. trace 런타임을 늘리는 것은 결과 trace에 더미 작업을 추가하고 개별 작업의 런타임을 확대하는 것을 포함할 수 있습니다.
Rumen 사용법 (How to use Rumen)
JobHistory 로그를 원하는 job-trace로 변환하는 것은 2단계로 이뤄집니다.
- 중간 형식으로 정보를 추출합니다.
- 중간 trace에서 얻은 job-trace를 원하는 속성을 갖도록 조정합니다.
JobHistory 로그에서 정보 추출은 일회성 연산입니다. 이른바 _Gold Trace_는
output-duration,concentration같은 속성의 원하는 값을 가진 trace를 생성하는 데 재사용될 수 있습니다.
_Rumen_은 2개의 기본 명령을 제공합니다.
TraceBuilderFolder
먼저 _Gold Trace_를 생성해야 합니다. 그래서 첫 단계는 job-history 폴더에서 TraceBuilder를 실행하는 것입니다. TraceBuilder의 출력은 job-trace 파일(선택적으로 cluster-topology 파일)입니다. 출력을 스케일링하고 싶다면 Folder 유틸리티로 현재 trace를 원하는 길이로 접을 수 있습니다. 이 절의 나머지는 이 유틸리티들을 자세히 설명합니다.
Trace Builder
명령 (Command)
hadoop rumentrace [options] <jobtrace-output> <topology-output> <inputs>
이 명령은 _Rumen_의 TraceBuilder 유틸리티를 호출합니다.
TraceBuilder는 JobHistory 파일들을 일련의 JSON 객체로 변환해 <jobtrace-output> 파일에 씁니다. 또한 클러스터 레이아웃(토폴로지)을 추출해 <topology-output> 파일에 씁니다. <inputs>는 공백으로 구분된 JobHistory 파일·폴더 목록입니다.
TraceBuilder의 입력·출력은 완전히 정규화된 FileSystem 경로일 것으로 기대합니다.localFileSystem 파일은<file://>를, HDFS의 파일은<hdfs://>를 사용하세요. 입력 파일·폴더가 FileSystem 경로이므로 글로브할 수 있습니다. 정규식으로 여러 파일 경로를 지정할 때 유용해요.- 기본적으로 TraceBuilder는 입력 폴더를 재귀적으로 스캔해 job history 파일을 찾지 않습니다. 입력 폴더 아래에 직접 놓인 파일만 trace 생성을 위해 고려됩니다. 입력 디렉터리를 재귀적으로 스캔해 그 아래 모든 파일을 추가하려면 '-recursive' 옵션을 사용합니다.
클러스터 토폴로지는 다음과 같이 사용됩니다.
- 실제 실행에서 보인 거리/지연시간이 올바르게 모델링되도록 split을 재구성하고 확인합니다.
- split 세부 정보가 누락된 작업이나 합성으로 생성된 작업에 대한 split 정보를 외삽합니다.
옵션 (Options)
| 파라미터 | 설명 | 참고 |
|---|---|---|
-demuxer |
jobhistory 파일을 읽는 데 사용. 기본은 DefaultInputDemuxer. |
Demuxer는 입력 파일이 jobhistory 파일(들)에 어떻게 매핑되는지 결정. Job history 로그와 작업 구성 파일은 보통 작은 파일이라 SequenceFile이나 TFile 같은 컨테이너 파일 형식에 임베드하면 더 효과적으로 저장할 수 있음. 이런 사용 사례를 지원하기 위해 소스 파일에서 개별 job history 로그와 작업 구성 파일을 추출할 수 있는 맞춤 Demuxer 클래스를 지정할 수 있음. |
-recursive |
job history 로그를 위해 입력 경로를 재귀적으로 순회. | 이 옵션으로 TraceBuilder에 입력 경로를 재귀적으로 스캔해 그 아래 모든 파일을 처리하라고 알려야 함. 기본적으로는 입력 폴더 아래 직접 있는 history 로그만 trace 생성에 고려됨. |
예시 (Example)
hadoop rumentrace \
file:///tmp/job-trace.json \
file:///tmp/job-topology.json \
hdfs:///tmp/hadoop-yarn/staging/history/done_intermediate/testuser
이것은 HDFS FileSystem에 저장된 /tmp/hadoop-yarn/staging/history/done_intermediate/testuser의 모든 작업을 분석하고, local FileSystem에 저장된 /tmp/job-trace.json에 jobtrace를, /tmp/job-topology.json에 토폴로지 정보를 출력합니다.
Folder
명령 (Command)
hadoop rumenfolder [options] [input] [output]
이 명령은 _Rumen_의 Folder 유틸리티를 호출합니다. 폴딩은 기본적으로 결과 trace의 출력 지속시간이 고정되고, 최종 출력 지속시간을 존중하도록 작업 타임라인이 조정되는 것을 의미합니다.
Folder의 입력·출력은 완전히 정규화된 FileSystem 경로일 것으로 기대합니다.localFileSystem 파일은file://, HDFS의 파일은hdfs://를 사용하세요.
옵션 (Options)
| 파라미터 | 설명 | 참고 |
|---|---|---|
-input-cycle |
폴딩 연산의 기본 시간 단위 정의. input-cycle의 기본값은 없음. Input cycle이 반드시 제공돼야 함. |
'-input-cycle 10m'은 전체 trace 실행이 이제 10분 간격으로 슬라이스된다는 뜻. 기본 연산은 10m 청크로 수행됨. Rumen은 m(분), h(시간), d(일) 같은 다양한 시간 단위를 이해함. |
-output-duration |
이 파라미터는 trace의 최종 런타임을 정의. 기본값 1시간. | '-output-duration 30m'은 결과 trace가 최대 30분 런타임을 갖는다는 뜻. 입력 trace 파일의 모든 작업이 이 창에 맞게 접히고 스케일링됨. |
-concentration |
결과 trace의 농도 설정. 기본값 1. | 결과 trace의 총 런타임이 입력 trace의 총 런타임보다 작으면, 결과 trace는 입력 trace보다 적은 수의 작업을 담게 됨. 이는 출력이 희석됐다는 뜻. 작업 밀도를 높이려면 concentration을 더 높게 설정. |
-debug |
Folder를 디버그 모드로 실행. 기본값 false. | 디버그 모드에서 Folder는 디버깅용 추가 문장을 출력. 또한 스크래치 디렉터리에 생성된 중간 파일도 정리되지 않음. |
-seed |
Random Number Generator의 초기 시드. 기본적으로 Random Number Generator가 시드를 생성하고 시드 값이 향후 사용을 위해 사용자에게 보고됨. | 초기 시드를 전달하면 Random Number Generator가 같은 순서로 난수를 생성, 즉 같은 시드를 쓰면 난수 시퀀스가 동일. Folder는 작업을 내보낼지 여부를 결정하는 데 Random Number Generator를 사용. |
-temp-directory |
Folder의 임시 디렉터리. 기본적으로 출력 폴더의 부모 디렉터리가 스크래치 공간으로 사용됨. | Folder가 사용하는 스크래치 공간. Folder가 debug 모드로 실행되지 않으면 모든 임시 파일이 마지막에 정리됨. |
-skew-buffer-length |
_Folder_가 치우친(skewed) 작업을 견딜 수 있게 함. 기본 버퍼 길이는 0. | '-skew-buffer-length 100'은 작업이 100 크기의 창 안에서 순서가 어긋나 나타나면 folder가 순서대로 내보낸다는 뜻. 이 창 밖에서 작업이 순서 어긋남이 나타나면 -allow-missorting이 설정되지 않은 경우 Folder가 중단됨. _Folder_는 향후 사용을 위해 입력 trace에서 본 최대 skew 크기를 보고. |
-allow-missorting |
_Folder_가 순서가 어긋난 작업을 견딜 수 있게 함. 기본적으로 missorting은 허용되지 않음. | missorting이 허용되면 _Folder_는 -skew-buffer-length로 지정한 크기의 skew 버퍼로 deskew할 수 없는 순서 어긋난 작업을 무시. missorting이 허용되지 않으면 skew 버퍼가 skew를 견디지 못할 때 Folder가 중단됨. |
예시 (Examples)
총 런타임 10시간 입력 trace를 총 런타임 1시간 출력 trace로 폴딩
hadoop rumenfolder \
-output-duration 1h \
-input-cycle 20m \
file:///tmp/job-trace.json \
file:///tmp/job-trace-1hr.json
접힌 작업이 순서가 어긋나면 명령은 중단됩니다.
총 런타임 10시간 입력 trace를 1시간 출력 trace로 폴딩하고 일부 skewness 허용
hadoop rumenfolder \
-output-duration 1h \
-input-cycle 20m \
-allow-missorting \
-skew-buffer-length 100 \
file:///tmp/job-trace.json \
file:///tmp/job-trace-1hr.json
접힌 작업이 순서가 어긋나면 최대 100개 작업이 de-skew됩니다. 101번째 작업이 out-of-order 이면 명령은 중단됩니다.
총 런타임 10시간 입력 trace를 1시간 출력 trace로 디버그 모드로 폴딩
hadoop rumenfolder \
-output-duration 1h \
-input-cycle 20m \
-debug -temp-directory file:///tmp/debug \
file:///tmp/job-trace.json \
file:///tmp/job-trace-1hr.json
이것은 10시간 job-trace 파일 file:///tmp/job-trace.json을 1시간 안에 끝내도록 접고 file:///tmp/debug를 임시 디렉터리로 사용합니다. 임시 디렉터리의 중간 파일은 정리되지 않습니다.
총 런타임 10시간 입력 trace를 사용자 정의 concentration으로 1시간 출력 trace로 폴딩
hadoop rumenfolder \
-output-duration 1h \
-input-cycle 20m \
-concentration 2 \
file:///tmp/job-trace.json \
file:///tmp/job-trace-1hr.json
이것은 10시간 job-trace 파일 file:///tmp/job-trace.json을 concentration 2로 1시간 안에 끝내도록 접습니다. 10시간 job-trace를 1시간으로 접으면 기본적으로 작업의 10%가 유지됩니다. _concentration_이 2이면 총 입력 작업의 20%가 유지됩니다.
부록 (Appendix)
자원 (Resources)
MAPREDUCE-751은 _Rumen_을 _MapReduce_에 도입한 주요 JIRA입니다. 자세한 내용은 MapReduce rumen-component를 참고하세요.
더 알아보기 (Learn more)
- 원문: 문서