기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
4단계: cqlsh COPY FROM
설정 구성
이 섹션에서는 에 대한 cqlsh COPY
FROM
매개변수 값을 결정하는 방법을 간략하게 설명합니다. cqlsh COPY FROM
명령은 이전에 준비한 CSV 파일을 읽고 CQL을 사용하여 Amazon Keyspaces에 데이터를 삽입합니다. 이 명령은 행을 분할하고 작업자 집합 간에 INSERT
작업을 분배합니다. 각 워커는 Amazon Keyspaces와 연결을 설정하고 이 채널을 통해 INSERT
요청을 보냅니다.
cqlsh COPY
명령에는 작업자 간에 작업을 균등하게 분배하기 위한 내부 로직이 없습니다. 그러나 작업이 균등하게 분배되도록 수동으로 구성할 수 있습니다. 먼저 다음과 같은 주요 충돌 파라미터를 검토하세요.
-
DELIMITER — 쉼표가 아닌 구분 기호를 사용한 경우 이 매개 변수를 설정할 수 있습니다. 기본값은 쉼표입니다.
-
INGESTRATE — 초당 처리를
cqlsh COPY FROM
시도하는 대상 행 수입니다. 설정하지 않은 경우 기본값은 100,000입니다. -
NUMPROCESSIES — Clash에서 태스크에 대해 생성하는 하위 작업자 프로세스의 수입니다.
COPY FROM
이 설정의 최대값은 16이며, 기본값은num_cores - 1
, 여기서num_cores
는 cqlsh를 실행하는 호스트의 처리 코어 수입니다. -
MAXBATCHSIZE — 배치 크기는 단일 배치에서 대상 테이블에 삽입되는 최대 행 수를 결정합니다. 설정하지 않으면 calsh는 삽입된 20개 행의 배치를 사용합니다.
-
CHUNKSIZE — 하위 작업자에게 전달되는 작업 단위의 크기입니다. 기본적으로 5,000으로 설정됩니다.
-
최대 시도 — 실패한 작업자 청크를 다시 시도하는 최대 횟수입니다. 최대 시도 횟수에 도달하면 실패한 레코드가 새 CSV 파일에 기록되며 나중에 오류를 조사한 후 다시 실행할 수 있습니다.
대상 테이블에 프로비저닝한 WCU 수를 INGESTRATE
기준으로 설정합니다. INGESTRATE
cqlsh COPY FROM
명령의 범위는 한계가 아니라 목표 평균입니다. 즉, 설정한 수치 이상으로 폭발할 수 있으며 종종 그렇습니다. 버스트를 허용하고 데이터 로드 요청을 처리하기에 충분한 용량이 확보되도록 INGESTRATE
하려면 테이블 쓰기 용량의 90% 로 설정하십시오.
INGESTRATE = WCUs * .90
그런 다음 NUMPROCESSES
파라미터를 시스템의 코어 수보다 1 적은 값으로 설정합니다. 다음 코드를 실행하여 시스템의 코어 수를 확인할 수 있습니다.
python -c "import multiprocessing; print(multiprocessing.cpu_count())"
이 자습서에서는 다음 값을 사용합니다.
NUMPROCESSES = 4
각 프로세스는 워커를 생성하고, 각 워커는 Amazon Keyspaces에 대한 연결을 설정합니다. Amazon Keyspaces 모든 연결에서 초당 최대 3,000개의 CQL 요청을 지원할 수 있습니다. 즉, 각 작업자가 초당 3,000개 미만의 요청을 처리하는지 확인해야 합니다.
INGESTRATE
마찬가지로 작업자는 설정한 숫자 이상으로 급증하는 경우가 많으며 클럭 초의 제한을 받지 않습니다. 따라서 버스트를 고려하려면 각 작업자가 초당 2,500개의 요청을 처리하도록 Cqlsh 파라미터를 설정해야 합니다. 작업자에게 분배되는 작업량을 계산하려면 다음 지침을 사용하십시오.
-
INGESTRATE
로 나눕니다NUMPROCESSES
. -
INGESTRATE
/NUMPROCESSES
> 2,500인 경우 값을 낮추면 이 공식이 참이 됩니다.INGESTRATE
INGESTRATE / NUMPROCESSES <= 2,500
샘플 데이터의 업로드를 최적화하도록 설정을 구성하기 전에 기본 설정을 살펴보고 cqlsh
기본 설정을 사용하는 것이 데이터 업로드 프로세스에 미치는 영향을 살펴보겠습니다. CHUNKSIZE
를 cqlsh COPY FROM
사용하여 작업자에게 배포할 작업 청크 (INSERT
명령문) 를 생성하기 때문에 작업이 자동으로 균등하게 분배되지 않습니다. 일부 작업자는 INGESTRATE
설정에 따라 가만히 앉아 있을 수 있습니다.
작업자 간에 작업을 균등하게 분배하고 각 작업자가 초당 2,500개의 최적 요청 속도로 유지하려면 입력 매개 변수를 INGESTRATE
변경하여 및 를 CHUNKSIZE
설정해야 합니다. MAXBATCHSIZE
데이터 로드 중에 네트워크 트래픽 사용률을 최적화하려면 최대값인 30에 가까운 값을 선택합니다. MAXBATCHSIZE
100과 CHUNKSIZE
MAXBATCHSIZE
25로 변경하면 10,000개의 행이 네 명의 작업자 사이에 균등하게 분산됩니다 (10,000/ 2500 = 4).
다음 코드 예는 이 방법을 보여줍니다.
INGESTRATE = 10,000 NUMPROCESSES = 4 CHUNKSIZE = 100 MAXBATCHSIZE. = 25 Work Distribution: Connection 1 / Worker 1 : 2,500 Requests per second Connection 2 / Worker 2 : 2,500 Requests per second Connection 3 / Worker 3 : 2,500 Requests per second Connection 4 / Worker 4 : 2,500 Requests per second
요약하면 매개 변수를 설정할 cqlsh COPY FROM
때 다음 공식을 사용하십시오.
-
통합 = 쓰기 용량_단위 * .90
-
넘프로세스 = num_cores -1 (기본값)
-
INGESTRATE/ NUMPROCESSTES = 2,500 (이것은 정확한 진술이어야 합니다.)
-
최대 배치 크기 = 30 (기본값은 20입니다. 아마존 Keyspaces 최대 30개까지 배치를 허용합니다.)
-
청크 크기 = (인제스트레이트/프로세스 수)/최대 배치 크기
이제 NUMPROCESSES
INGESTRATE
CHUNKSIZE
, 및 계산을 마쳤으니 데이터를 로드할 준비가 되었습니다.