기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 섹션에서는 cqlsh COPY
FROM
의 파라미터 값을 결정하는 방법을 간략하게 설명합니다. cqlsh COPY FROM
명령은 이전에 준비한 CSV 파일을 읽고 CQL을 사용하여 Amazon Keyspaces에 데이터를 삽입합니다. 이 명령은 행을 나누어 작업자 집합 간에 INSERT
작업을 분배합니다. 각 작업자는 Amazon Keyspaces와 연결을 설정하고 이 채널을 통해 INSERT
요청을 보냅니다.
cqlsh COPY
명령에는 작업자 간에 작업을 균등하게 분배하기 위한 내부 로직이 없습니다. 하지만 작업이 균등하게 분배되도록 수동으로 구성할 수 있습니다. 먼저 다음과 같은 주요 cqlsh 파라미터를 검토합니다.
-
DELIMITER - 쉼표 이외의 구분 기호를 사용한 경우 이 파라미터를 설정할 수 있습니다. 기본값은 쉼표입니다.
-
INGESTRATE -
cqlsh COPY FROM
이 초당 처리를 시도하는 대상 행 수입니다. 지정되지 않은 경우 기본값은 100,000입니다. -
NUMPROCESSES - cqlsh가
COPY FROM
작업을 위해 생성하는 하위 작업자 프로세스의 수입니다. 이 설정의 최대값은 16이며, 기본값은num_cores - 1
입니다. 여기서num_cores
는 cqlsh를 실행하는 호스트의 프로세싱 코어 수입니다. -
MAXBATCHSIZE – 배치 크기에 따라 단일 배치에서 대상 테이블에 삽입되는 최대 행 수가 결정됩니다. 설정되지 않은 경우 cqlsh는 삽입된 20개 행의 배치를 사용합니다.
-
CHUNKSIZE - 하위 작업자에게 전달되는 작업 단위의 크기입니다. 기본적으로 5,000으로 설정됩니다.
-
MAXATTEMPTS - 실패한 작업자 청크를 다시 시도할 수 있는 최대 횟수입니다. 최대 시도 횟수에 도달하면 실패한 레코드가 새 CSV 파일에 기록되며 실패를 조사한 후 나중에 다시 실행할 수 있습니다.
대상 테이블에 프로비저닝한 WCU 수를 기반으로 INGESTRATE
를 설정합니다. cqlsh COPY FROM
명령의 INGESTRATE
는 제한이 아니라 대상 평균입니다. 즉, 설정한 수치를 초과할 수 있으며 종종 그럴 수도 있습니다. 버스트를 허용하고 데이터 로드 요청을 처리할 수 있는 충분한 용량을 확보하려면 INGESTRATE
를 테이블 쓰기 용량의 90% 설정합니다.
INGESTRATE = WCUs * .90
그런 다음 NUMPROCESSES
파라미터를 시스템의 코어 수보다 하나 적은 것으로 설정합니다. 다음 코드를 실행하여 시스템의 코어 수를 확인할 수 있습니다.
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
를 낮추면 이 공식이 true가 됩니다.
INGESTRATE / NUMPROCESSES <= 2,500
샘플 데이터의 업로드를 최적화하도록 설정을 구성하기 전에 cqlsh
기본 설정을 검토하고 기본 설정을 사용하는 것이 데이터 업로드 프로세스에 어떤 영향을 미치는지 살펴보겠습니다. cqlsh COPY FROM
은 CHUNKSIZE
를 사용하여 작업자에게 배포할 작업 청크(INSERT
문)를 만들기 때문에 작업이 자동으로 균등하게 분배되지 않습니다. INGESTRATE
설정에 따라 일부 작업자는 가만히 앉아 있을 수 있습니다.
작업자 간에 작업을 균등하게 분배하고 각 작업자가 초당 2,500개의 요청 속도를 최적화할 수 있도록 하려면 입력 파라미터를 변경하여 CHUNKSIZE
, MAXBATCHSIZE
및 INGESTRATE
를 설정해야 합니다. 데이터 로드 중에 네트워크 트래픽 사용률을 최적화하려면 MAXBATCHSIZE
에 대해 최대값인 30에 가까운 값을 선택합니다. CHUNKSIZE
를 100으로 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
파라미터를 설정할 때 다음 공식을 사용합니다.
-
INGESTRATE = write_capacity_units * .90
-
NUMPROCESSES = num_cores -1(기본값)
-
INGESTRATE / NUMPROCESSES = 2,500(true 문이어야 합니다.)
-
MAXBATCHSIZE = 30(기본값은 20입니다. Amazon Keyspaces는 최대 30개의 배치를 허용합니다.)
-
CHUNKSIZE = (INGESTRATE / NUMPROCESSES) / MAXBATCHSIZE
NUMPROCESSES
, INGESTRATE
및 CHUNKSIZE
계산을 마쳤고 이제 데이터를 로드할 준비가 되었습니다.