합성 부하 생성기 가이드
합성 부하 생성기 가이드 (Synthetic Load Generator Guide)
다양한 클라이언트 부하에서 NameNode 동작을 테스트하는 합성 부하 생성기(Synthetic Load Generator, SLG) 도구를 설명하는 문서예요. 읽기/쓰기/조회 요청 혼합과 부하 강도를 조절하고, 테스트 공간을 채우는 구조 생성기·데이터 생성기 사용법을 다룹니다.
출처: 문서
본문
개요 (Overview)
합성 부하 생성기(SLG)는 다양한 클라이언트 부하에서 NameNode 동작을 테스트하는 도구입니다. 읽기와 쓰기의 확률을 지정해 읽기·쓰기·조회(list) 요청의 서로 다른 혼합을 생성할 수 있어요. 워커 스레드 수와 연산 사이 지연 파라미터를 조절해 부하 강도를 제어합니다. 부하 생성기가 실행되는 동안 사용자는 NameNode 실행을 프로파일링하고 모니터링할 수 있어요. 부하 생성기가 종료되면 각 종류 연산의 평균 실행 시간과 NameNode 처리량 같은 통계를 출력합니다.
시놉시스 (Synopsis)
명령 시놉시스는 다음과 같습니다.
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNloadGenerator [options]
옵션은 다음과 같습니다.
-readProbabilityread probability — 읽기 연산 확률; 기본 0.3333.-writeProbabilitywrite probability — 쓰기 연산 확률; 기본 0.3333.-roottest space root — 테스트 공간 루트; 기본 /testLoadSpace.-maxDelayBetweenOpsmaxDelayBetweenOpsInMillis — 한 스레드에서 연속 두 연산 사이 최대 지연; 기본 0(지연 없음).-numOfThreadsnumOfThreads — 생성할 스레드 수; 기본 200.-elapsedTimeelapsedTimeInSecs — 프로그램이 실행될 초 수; 0이면 영원히 실행. 기본 0.-startTimestartTimeInMillis — 모든 워커 스레드가 실행을 시작할 시간. 기본으로 메인 프로그램 시작 10초 후. 둘 이상의 부하 생성기가 실행 중일 때 장벽(barrier)을 만듦.-seedseed — 단일 스레드로 실행할 때 NameNode에 반복 요청하기 위한 난수 생성기 시드; 기본 현재 시간.
명령줄 인자 파싱 후 부하 생성기는 테스트 공간을 순회하며 모든 디렉터리 테이블과 모든 파일 테이블을 만듭니다. 그다음 시작 시간까지 기다렸다 사용자가 지정한 수의 워커 스레드를 생성해요. 각 스레드는 NameNode에 요청 스트림을 보냅니다. 각 반복마다 먼저 사용자가 지정한 읽기/쓰기 확률에 따라 파일을 읽을지, 파일을 만들지, 디렉터리를 조회할지 결정합니다. 조회 확률은 1 - 읽기 확률 - 쓰기 확률입니다. 읽을 때는 테스트 공간에서 파일을 무작위로 골라 전체 파일을 읽어요. 쓸 때는 테스트 공간에서 디렉터리를 무작위로 골라 그곳에 파일을 만듭니다.
같은 부하 생성기의 두 스레드나 두 다른 부하 생성기가 같은 파일을 만드는 것을 피하기 위해, 파일 이름은 현재 머신의 호스트 이름과 스레드 id로 구성됩니다. 파일 길이는 평균 2블록, 표준편차 1의 가우시안 분포를 따릅니다. 새 파일은 바이트 'a'로 채워져요. 테스트 공간이 무한정 커지는 것을 막기 위해 파일 생성이 완료되면 즉시 삭제합니다. 조회 중에는 테스트 공간에서 디렉터리를 무작위로 골라 내용을 나열합니다.
연산이 완료되면 지정한 최대 지연이 0이 아닐 때 스레드는 [0, maxDelayBetweenOps] 범위의 임의 시간만큼 멈춥니다. 지정한 경과 시간이 지나면 모든 스레드가 멈춥니다. 종료 전에 프로그램은 각 NameNode 연산 종류의 평균 실행 시간과 NameNode가 초당 처리한 요청 수를 출력합니다.
테스트 공간 채우기 (Test Space Population)
부하 생성기를 실행하기 전에 테스트 공간을 채워야 합니다. **구조 생성기(structure generator)**가 무작위 테스트 공간 구조를 만들고, **데이터 생성기(data generator)**가 Hadoop 분산 파일 시스템에 테스트 공간의 파일·디렉터리를 만듭니다.
구조 생성기 (Structure Generator)
이 도구는 다음 제약으로 무작위 네임스페이스 구조를 생성합니다.
- 디렉터리가 가질 수 있는 하위 디렉터리 수는 [minWidth, maxWidth]의 무작위 수.
- 각 하위 디렉터리의 최대 깊이는 [2*maxDepth/3, maxDepth]의 무작위 수.
- 파일은 잎(leaf) 디렉터리에 무작위로 배치. 각 파일 크기는 평균 1블록, 표준편차 1의 가우시안 분포를 따름.
생성된 네임스페이스 구조는 출력 디렉터리의 두 파일로 설명됩니다. 첫 번째 파일의 각 줄은 잎 디렉터리의 전체 이름이고, 두 번째 파일의 각 줄은 파일의 전체 이름과 크기를 공백으로 구분해 담고 있어요.
명령 시놉시스는 다음과 같습니다.
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNstructureGenerator [options]
옵션은 다음과 같습니다.
-maxDepthmaxDepth — 디렉터리 트리의 최대 깊이; 기본 5.-minWidthminWidth — 디렉터리당 하위 디렉터리 최소 수; 기본 1.-maxWidthmaxWidth — 디렉터리당 하위 디렉터리 최대 수; 기본 5.-numOfFiles#OfFiles — 테스트 공간의 총 파일 수; 기본 10.-avgFileSizeavgFileSizeInBlocks — 블록 평균 크기; 기본 1.-outDiroutDir — 출력 디렉터리; 기본 현재 디렉터리.-seedseed — 난수 생성기 시드; 기본 현재 시간.
데이터 생성기 (Data Generator)
이 도구는 입력 디렉터리에서 디렉터리 구조와 파일 구조를 읽고 Hadoop 분산 파일 시스템에 네임스페이스를 만듭니다. 모든 파일은 바이트 'a'로 채워집니다.
명령 시놉시스는 다음과 같습니다.
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNdataGenerator [options]
옵션은 다음과 같습니다.
-inDirinDir — 디렉터리/파일 구조가 저장된 입력 디렉터리 이름; 기본 현재 디렉터리.-roottest space root — 새 네임스페이스가 놓일 루트 디렉터리 이름; 기본 "/testLoadSpace".
더 알아보기 (Learn more)
- 원문: 문서