Creating custom workloads
출처: 문서
본문
사용자 지정 워크로드 만들기
OpenSearch Benchmark에는 클러스터의 데이터를 벤치마킹하는 데 사용할 수 있는 워크로드 세트가 포함되어 있어요. 다음 옵션 중 하나를 사용해서 자신의 데이터에 맞춤화된 워크로드를 만들 수도 있어요:
기존 클러스터에서 워크로드 만들기
이미 인덱싱된 데이터를 갖춘 OpenSearch 클러스터가 있다면, 다음 단계에 따라 클러스터용 사용자 지정 워크로드를 만드세요.
사전 요구 사항
사용자 지정 OpenSearch Benchmark 워크로드를 만들기 전에 다음 사전 요구 사항이 갖춰져 있는지 확인하세요:
- 1000개 이상의 문서를 담은 인덱스를 가진 OpenSearch 클러스터. 클러스터의 인덱스에 최소 1000개의 문서가 없더라도 워크로드는 여전히 테스트를 실행할 수 있지만,
--test-mode를 사용한 워크로드 실행은 할 수 없어요. - OpenSearch 클러스터에 접근할 수 있는 올바른 권한을 갖고 있어야 해요. 클러스터 권한에 대한 자세한 내용은 권한을 참조하세요.
워크로드 사용자 지정하기
사용자 지정 OpenSearch Benchmark 워크로드 만들기를 시작하려면 opensearch-benchmark create-workload 명령어를 사용하세요.
opensearch-benchmark create-workload \
--workload="<WORKLOAD NAME>" \
--target-hosts="<CLUSTER ENDPOINT>" \
--client-options="basic_auth_user:'<USERNAME>',basic_auth_password:'<PASSWORD>'" \
--indices="<INDEXES TO GENERATE WORKLOAD FROM>" \
--output-path="<LOCAL DIRECTORY PATH TO STORE WORKLOAD>"
앞선 예시에서 다음 옵션들을 기존 클러스터에 맞는 정보로 바꾸세요:
--workload: 사용자 지정 워크로드에 붙일 이름이에요.--target-hosts:클러스터가 데이터를 추출해 오는 host:port 쌍을 쉼표로 구분한 목록이에요.--client-options: OpenSearch Benchmark가 클러스터에 접근할 때 사용하는 기본 인증 클라이언트 옵션이에요.--indices: OpenSearch 클러스터 안에서 데이터를 담고 있는 하나 이상의 인덱스예요.--output-path: OpenSearch Benchmark가 워크로드와 그 설정 파일을 생성하는 디렉터리예요.
다음 예시 응답은 movies-info라는 이름의 인덱스를 가진 클러스터에서 movies라는 이름의 워크로드를 만들어요. movies-info 인덱스에는 2,000개가 넘는 문서가 담겨 있어요.
____ _____ __ ____ __ __
/ __ \____ ___ ____ / ___/___ ____ ___________/ /_ / __ )___ ____ _____/ /_ ____ ___ ____ ______/ /__
/ / / / __ \/ _ \/ __ \\__ \/ _ \/ __ `/ ___/ ___/ __ \ / __ / _ \/ __ \/ ___/ __ \/ __ `__ \/ __ `/ ___/ //_/
/ /_/ / /_/ / __/ / / /__/ / __/ /_/ / / / /__/ / / / / /_/ / __/ / / / /__/ / / / / / / / / /_/ / / / ,<
\____/ .___/\___/_/ /_/____/\___/\__,_/_/ \___/_/ /_/ /_____/\___/_/ /_/\___/_/ /_/_/ /_/ /_/\__,_/_/ /_/|_|
/_/
[INFO] You did not provide an explicit timeout in the client options. Assuming default of 10 seconds.
[INFO] Connected to OpenSearch cluster [380d8fd64dd85b5f77c0ad81b0799e1e] version [1.1.0].
Extracting documents for index [movies] for test mode... 1000/1000 docs [100.0% done]
Extracting documents for index [movies]... 2000/2000 docs [100.0% done]
[INFO] Workload movies has been created. Run it with: opensearch-benchmark --workload-path=/Users/hoangia/Desktop/workloads/movies
-----------------------------------
[INFO] ✅ SUCCESS (took 2 seconds)
-----------------------------------
워크로드 생성 과정의 일부로 OpenSearch Benchmark는 다음 파일들을 생성해요. --output-path 옵션으로 지정한 디렉터리에서 이 파일들에 접근할 수 있어요.
workload.json: 워크로드의 일반적인 사양을 담고 있어요.<index>.json: 추출한 인덱스의 매핑과 설정을 담고 있어요.<index>-documents.json: 추출한 인덱스에 있는 모든 문서의 소스를 담고 있어요.-1k접미사가 붙은 소스는 워크로드 문서 코퍼스의 일부만 담고 있으며, 테스트 모드로 워크로드를 실행할 때만 사용돼요.
기본적으로 OpenSearch Benchmark에는 쿼리를 생성하기 위한 참조가 포함되어 있지 않아요. 여러분이 데이터를 가장 잘 이해하고 있기 때문에, 인덱스의 사양에 맞는 쿼리를 workload.json에 추가할 것을 권장해요. 워크로드에 추가하는 쿼리의 예시로 다음 match_all 쿼리를 사용해 보세요:
{
"operation": {
"name": "query-match-all",
"operation-type": "search",
"body": {
"query": {
"match_all": {}
}
}
},
"clients": 8,
"warmup-iterations": 1000,
"iterations": 1000,
"target-throughput": 100
}
기존 클러스터 없이 워크로드 만들기
사용자 지정 워크로드를 만들고 싶지만 인덱싱된 데이터를 갖춘 기존 OpenSearch 클러스터가 없다면, 워크로드 소스 파일을 직접 만들어서 워크로드를 생성할 수 있어요. 필요한 것은 JSON 형식으로 내보낼 수 있는 데이터뿐이에요.
소스 파일로 워크로드를 만들려면, 워크로드용 디렉터리를 만들고 다음 단계를 수행하세요:
- 워크로드의 문서 코퍼스를 구성하는 문서 행들을 담고, 클러스터에 수집하고 쿼리할 모든 데이터를 저장하는
<index>-documents.json파일을 만드세요. 다음 예시는 유명 영화에 대한 문서 행들을 담은movies-documents.json파일의 처음 몇 행을 보여줘요:
{"title": "Back to the Future", "director": "Robert Zemeckis", "revenue": "$212,259,762 USD", "rating": "8.5 out of 10", "image_url": "https://imdb.com/images/32"}
{"title": "Avengers: Endgame", "director": "Anthony and Joe Russo", "revenue": "$2,800,000,000 USD", "rating": "8.4 out of 10", "image_url": "https://imdb.com/images/2"}
{"title": "The Grand Budapest Hotel", "director": "Wes Anderson", "revenue": "$173,000,000 USD", "rating": "8.1 out of 10", "image_url": "https://imdb.com/images/65"}
{"title": "The Godfather: Part II", "director": "Francis Ford Coppola", "revenue": "$48,000,000 USD", "rating": "9 out of 10", "image_url": "https://imdb.com/images/7"}
-
같은 디렉터리에서
index.json파일을 만드세요. 워크로드는 이 파일을,<index>-documents.json에 담긴 문서들에 대한 데이터 매핑과 인덱스 설정의 참조로 사용해요. 다음 예시는 이전 단계의movie-documents.json데이터에 맞춘 매핑과 설정을 만들어요:{ "settings": { "index.number_of_replicas": 0 }, "mappings": { "dynamic": "strict", "properties": { "title": { "type": "text" }, "director": { "type": "text" }, "revenue": { "type": "text" }, "rating": { "type": "text" }, "image_url": { "type": "text" } } } } -
다음으로, 워크로드에 대한 전체적인 개요를 제공하고 워크로드가 벤치마크 테스트를 실행하는 방식을 결정하는
workload.json파일을 만드세요.workload.json파일에는 다음 섹션이 포함되어 있어요:indices: 이전 단계에서 만든 워크로드의index.json파일에 있는 매핑을 사용해 OpenSearch 클러스터에 생성할 인덱스의 이름을 정의해요.corpora: 코퍼스와 소스 파일을 정의해요. 다음을 포함해요:document-count:<index>-documents.json에 담긴 문서 수예요. 정확한 문서 수를 구하려면wc -l <index>-documents.json을 실행하세요.uncompressed-bytes: 인덱스 내부의 바이트 수예요. 정확한 바이트 수를 구하려면 macOS에서는stat -f %z <index>-documents.json을, GNU/Linux에서는stat -c %s <index>-documents.json을 실행하세요. 또는ls -lrt | grep <index>-documents.json을 실행할 수도 있어요.
schedule: 워크로드의 작업 순서와 사용 가능한 테스트 절차를 정의해요.
다음 예시 workload.json 파일은 movies 워크로드의 진입점을 제공해요. indices 섹션은 movies라는 인덱스를 생성해요. corpora 섹션은 1단계에서 만든 소스 파일인 movie-documents.json을 참조하며 문서 수와 압축되지 않은 바이트 양을 제공해요. 마지막으로 schedule 섹션은 워크로드가 호출될 때 수행하는 몇 가지 작업을 정의하는데, 다음을 포함해요:
-
movies라는 이름의 기존 인덱스가 있으면 삭제하기 -
movie-documents.json의 데이터와index.json의 매핑을 바탕으로movies라는 이름의 인덱스 생성하기 -
클러스터가 정상 상태이고 새 인덱스를 수집할 수 있는지 확인하기
-
workload.json의 데이터 코퍼스를 클러스터에 수집하기 -
결과 쿼리하기
{ "version": 2, "description": "Tutorial benchmark for OpenSearch Benchmark", "indices": [ { "name": "movies", "body": "index.json" } ], "corpora": [ { "name": "movies", "documents": [ { "source-file": "movies-documents.json", "document-count": 11658903, # Fetch document count from command line "uncompressed-bytes": 1544799789 # Fetch uncompressed bytes from command line } ] } ], "schedule": [ { "operation": { "operation-type": "delete-index" } }, { "operation": { "operation-type": "create-index" } }, { "operation": { "operation-type": "cluster-health", "request-params": { "wait_for_status": "green" }, "retry-until-success": true } }, { "operation": { "operation-type": "bulk", "bulk-size": 5000 }, "warmup-time-period": 120, "clients": 8 }, { "operation": { "operation-type": "force-merge" } }, { "operation": { "name": "query-match-all", "operation-type": "search", "body": { "query": { "match_all": {} } } }, "clients": 8, "warmup-iterations": 1000, "iterations": 1000, "target-throughput": 100 } ] }
corpora 섹션은 1단계에서 만든 소스 파일인 movie-documents.json을 참조하며 문서 수와 압축되지 않은 바이트 양을 제공해요. 마지막으로 schedule 섹션은 워크로드가 호출될 때 수행하는 몇 가지 작업을 정의하는데, 다음을 포함해요:
movies라는 이름의 기존 인덱스가 있으면 삭제하기movie-documents.json의 데이터와index.json의 매핑을 바탕으로movies라는 이름의 인덱스 생성하기- 클러스터가 정상 상태이고 새 인덱스를 수집할 수 있는지 확인하기
workload.json의 데이터 코퍼스를 클러스터에 수집하기- 결과 쿼리하기
만든 모든 워크로드 파일에 대해, 테스트를 실행해서 워크로드가 제대로 작동하는지 확인하세요. 워크로드를 확인하려면 다음 명령어를 실행하되, --workload-path는 워크로드 디렉터리의 경로로 바꾸세요:
opensearch-benchmark list workloads --workload-path=</path/to/workload/>
사용자 지정 워크로드 실행하기
다음 예시에서 보듯이, opensearch-benchmark run 명령어를 사용해 새 워크로드를 실행하고 OpenSearch 클러스터를 대상으로 벤치마크 테스트를 수행하세요. --workload-path는 사용자 지정 워크로드의 경로로, --target-host는 클러스터의 host:port 쌍으로, --client-options는 클러스터 접근에 필요한 인증 옵션으로 각각 바꾸세요.
opensearch-benchmark run \
--pipeline="benchmark-only" \
--workload-path="<PATH OUTPUTTED IN THE OUTPUT OF THE CREATE-WORKLOAD COMMAND>" \
--target-host="<CLUSTER ENDPOINT>" \
--client-options="basic_auth_user:'<USERNAME>',basic_auth_password:'<PASSWORD>'"
테스트 결과는 workloads.json에서 --output-path 옵션으로 설정한 디렉터리에 표시돼요.
고급 옵션
다음 고급 옵션을 사용해 사용자 지정 워크로드의 기능을 강화할 수 있어요.
테스트 모드
워크로드가 의도한 대로 작동하는지 확인하려고 테스트를 테스트 모드로 실행하고 싶다면, run 명령어에 --test-mode 옵션을 추가하세요. 테스트 모드는 제공된 각 인덱스에서 처음 1,000개의 문서만 수집하고, 그 문서들을 대상으로 쿼리 작업을 실행해요.
테스트 모드를 사용하려면, 다음 명령어로 <index>-documents.json의 처음 1000개 문서를 담는 <index>-documents-1k.json 파일을 만드세요:
head -n 1000 <index>-documents.json > <index>-documents-1k.json
그런 다음 --test-mode 옵션을 붙여 opensearch-benchmark run을 실행하세요. 테스트 모드는 워크로드 테스트의 빠른 버전을 실행해요.
opensearch-benchmark run \
--pipeline="benchmark-only" \
--workload-path="<PATH OUTPUTTED IN THE OUTPUT OF THE CREATE-WORKLOAD COMMAND>" \
--target-host="<CLUSTER ENDPOINT>" \
--client-options"basic_auth_user:'<USERNAME>',basic_auth_password:'<PASSWORD>'" \
--test-mode
테스트 절차에 변화 추가하기
사용자 지정 워크로드를 몇 번 사용하고 나면, 같은 워크로드를 사용하면서도 워크로드의 작업을 다른 순서로 수행하고 싶을 수 있어요. 새 워크로드를 만들거나 절차를 직접 재구성하는 대신, 테스트 절차를 제공해서 워크로드 작업에 변화를 줄 수 있어요.
워크로드 작업에 변화를 추가하려면, workload.json 파일로 가서 다음 예시에서 보듯이 schedule 섹션을 test_procedures 배열로 바꾸세요. 배열의 각 항목에는 다음이 포함되어 있어요:
name: 테스트 절차의 이름이에요.default:true로 설정하면, 다른 테스트 절차가 지정되지 않은 경우 OpenSearch Benchmark가 워크로드에서default로 지정된 테스트 절차를 기본으로 사용해요.schedule: 테스트 절차가 실행할 모든 작업이에요.
"test_procedures": [
{
"name": "index-and-query",
"default": true,
"schedule": [
{
"operation": {
"operation-type": "delete-index"
}
},
{
"operation": {
"operation-type": "create-index"
}
},
{
"operation": {
"operation-type": "cluster-health",
"request-params": {
"wait_for_status": "green"
},
"retry-until-success": true
}
},
{
"operation": {
"operation-type": "bulk",
"bulk-size": 5000
},
"warmup-time-period": 120,
"clients": 8
},
{
"operation": {
"operation-type": "force-merge"
}
},
{
"operation": {
"name": "query-match-all",
"operation-type": "search",
"body": {
"query": {
"match_all": {}
}
}
},
"clients": 8,
"warmup-iterations": 1000,
"iterations": 1000,
"target-throughput": 100
}
]
}
]
}
작업과 테스트 절차 분리하기
workload.json 파일을 더 읽기 쉽게 만들고 싶다면, 작업과 테스트 절차를 서로 다른 디렉터리로 분리하고 workload.json에서 각 경로를 참조하게 할 수 있어요. 작업과 절차를 분리하려면 다음 단계를 수행하세요:
-
모든 테스트 절차를 하나의 파일에 추가하세요. 파일 이름은 자유롭게 지을 수 있어요. 앞선
movies워크로드에 인덱스 작업과 쿼리가 포함되어 있으므로, 이 단계에서는 테스트 절차 파일의 이름을index-and-query.json으로 지어요. -
모든 작업을
operations.json이라는 이름의 파일에 추가하세요. -
다음 예시에서 보듯이, 다음 구문을 추가해서
workloads.json에 새 파일들을 참조하되,parts는 각 파일의 상대 경로로 바꾸세요:"operations": [ {% raw %}{{ benchmark.collect(parts="operations/*.json") }}{% endraw %} ] # Reference test procedure files in workload.json "test_procedures": [ {% raw %}{{ benchmark.collect(parts="test_procedures/*.json") }}{% endraw %} ]
다음 단계
- 워크로드가 프로덕션 환경을 더 가깝게 반영하도록 조정하려면 사용자 지정 워크로드 미세 조정을 참조하세요.
- 워크로드를 OpenSearch Project에 기여하려면 사용자 지정 워크로드 공유를 참조하세요.
- OpenSearch Benchmark 구성에 대한 자세한 내용은 OpenSearch Benchmark 구성하기를 참조하세요.
- OpenSearch Benchmark용 사전 패키징된 워크로드 목록을 보려면
opensearch-benchmark-workloads저장소를 참조하세요.