4단계: cqlsh COPY FROM 설정 구성 - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

4단계: cqlsh COPY FROM 설정 구성

이 섹션에서는 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 파라미터를 설정합니다. 작업자에게 분배된 작업량을 계산하려면 다음 지침을 사용합니다.

  • INGESTRATENUMPROCESSES로 나눕니다.

  • INGESTRATE/NUMPROCESSES > 2,500인 경우 INGESTRATE를 낮추면 이 공식이 true가 됩니다.

INGESTRATE / NUMPROCESSES <= 2,500

샘플 데이터의 업로드를 최적화하도록 설정을 구성하기 전에 cqlsh 기본 설정을 검토하고 기본 설정을 사용하는 것이 데이터 업로드 프로세스에 어떤 영향을 미치는지 살펴보겠습니다. cqlsh COPY FROMCHUNKSIZE를 사용하여 작업자에게 배포할 작업 청크(INSERT 문)를 만들기 때문에 작업이 자동으로 균등하게 분배되지 않습니다. INGESTRATE 설정에 따라 일부 작업자는 가만히 앉아 있을 수 있습니다.

작업자 간에 작업을 균등하게 분배하고 각 작업자가 초당 2,500개의 요청 속도를 최적화할 수 있도록 하려면 입력 파라미터를 변경하여 CHUNKSIZE, MAXBATCHSIZEINGESTRATE를 설정해야 합니다. 데이터 로드 중에 네트워크 트래픽 사용률을 최적화하려면 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, INGESTRATECHUNKSIZE 계산을 마쳤고 이제 데이터를 로드할 준비가 되었습니다.