0

나는 제거하고 싶은 오래된 카산드라 클러스터를 가지고 있으며 선택한 클러스터의 일부 테이블 만 데이터를 이전 클러스터에서 새로 만든 클러스터로 전송하려고합니다. Cassandra의 COPY 명령을 약 1,500 만 개의 행 (각 행에 약 20 개의 열)이있는 테이블에서 사용하려고했습니다. 나는 우리의 새 클러스터에서 같은 테이블에 CSV 파일에서 데이터를 가져올 때, 나는 끊임없이이 반응을 얻고있다 :카산드라의 한 클러스터에서 다른 클러스터로 데이터 전송

20 개 행을 가져 오는 데 실패

: WriteTimeout - 오류 서버에서 : 코드 = 1100 코디네이터 노드를 복제본을 기다리는 시간이 초과되었습니다. des 'responses] message = "작업 시간 초과 - 0 응답 만 받았습니다." 정보 = { 'received_responses'0 'required_resp onses'1, '일관성': 'ONE'}, 나중에 다시 시도합니다, 분명히 5

의 시도 1이 방법은 작동하지 않습니다. 한 클러스터에서 다른 클러스터로 일부 테이블 만 스트리밍 할 수있는 방법이 있습니까? 우리가 수백만 개의 행을 가지고 있음에도 불구하고, 데이터는 그다지 크지 않습니다. 내가 가지고있는 가장 큰 테이블은 약 2.5GB입니다.

해당 키 공간은 현재 SimpleStrategy를 사용하도록 구성되어 있습니다. NetworkTopologyStrategy가 도움이됩니까? 필자는 소수의 테이블에서 데이터를 스트리밍하여 다른 테이블을 남기고 싶다는 점을 지적해야합니다.

답변

1

이 작업에는 sstableloader을 사용하시기 바랍니다. 그냥 참고로 nodetool snapshot을 사용하여 원하는 표의 복사본을 만들고 필요할 때마다 scp로 복사 할 수 있습니다.

또 다른 참고로, 어떤 종류의 제작에서도 Simple Strategy를 사용하는 것은 결코 좋은 생각이 아닙니다. NetworkTopologyStrategy는 좋은 대안입니다.

+0

nodetool 스냅 샷을 가져 와서 다른 서버로 scp를 보낸 다음? – Ankush92

+0

이것이 바로 sstableloader가 들어오는 곳입니다. 문서가 게시물에 링크되었습니다. – mando222

+0

스냅 샷을 성공적으로 가져 와서 전송하고 nodetool refresh를 사용하여 데이터를 새 클러스터에로드했습니다. 두 클러스터의 키 수는 이제 같지만 데이터를 쿼리하려고하면 데이터가 누락 된 것으로 나타났습니다. 노드마다 스냅 샷을 찍어야합니까? RF = 1 인 3 노드 클러스터가 있습니다. 즉, 2 노드에서 스냅 샷을 찍어야합니까? – Ankush92

0

한 클러스터에서 다른 클러스터로 데이터를 복사하는 데 사용하는 전략을 성공적으로 사용했습니다.

일반적으로 스냅 샷에서 복원하는 것이 좋습니다. 그러나 유스 케이스가 전체 데이터를 새로운 클러스터로 복원하지 않고 커다란 테이블을 전송하는 것이 아니라면 COPY FROM 및 COPY TO는 간단한 효과적인 전략입니다.

전략에 충실하고 오류에만 집중하십시오.

작은 배치 크기를 사용해보십시오.

  • cqlsh $ host -e "use $ keyspace; COPY $ 키 스페이스. $ table FROM '$ {file}'WITH MAXBATCHSIZE = '1'" ";