데이터 삭제하기
데이터 삭제하기 (Tutorial: Deleting data)
기존 데이터를 삭제하는 방법을 보여 드릴게요. 이 튜토리얼에서는 Coordinator API로 세그먼트(segment)를 비활성화한 뒤 Kill Task로 영구 삭제하는 흐름을 직접 경험해 봐요.
출처: 문서
본문
이 튜토리얼이 필요로 하는 것은 다음과 같아요:
- 실행 중인 Apache Druid 인스턴스. Druid가 없다면 단일 머신 퀵스타트 (single-machine quickstart)를 참고해 시작해 주세요.
- 커맨드라인 JSON 프로세서인
jq.
초기 데이터 로드하기 (Load initial data)
이 튜토리얼에서는 시간별 세그먼트를 만드는 인덱싱 스펙으로 Wikipedia 편집 데이터를 사용할 거예요. 이 스펙은 quickstart/tutorial/deletion-index.json 에 있고, deletion-tutorial 이라는 데이터소스를 만들어요.
이 초기 데이터를 로드해 볼게요:
bin/post-index-task --file quickstart/tutorial/deletion-index.json --url http://localhost:8081
로드가 끝나면 브라우저에서 http://localhost:8888/unified-console.html#datasources 를 열어 주세요.
데이터를 영구 삭제하는 방법 (How to permanently delete data)
Druid 세그먼트의 영구 삭제는 두 단계로 이루어져요:
- 먼저 세그먼트를
"unused"로 표시해야 해요. 이는 사용자가 Coordinator API를 통해 세그먼트를 수동으로 비활성화할 때 일어나요. - 세그먼트가
"unused"로 표시된 뒤에는 Kill Task가 Druid의 메타데이터 저장소와 딥 스토리지(deep storage)에서"unused"세그먼트를 삭제해요.
이제 Coordinator API를 사용해 구간(interval)과 segmentId로 데이터를 드롭하면서 일부 세그먼트를 비활성화해 볼게요.
구간으로 세그먼트 비활성화하기 (Disable segments by interval)
지정된 구간의 세그먼트를 비활성화해 볼게요. 이는 해당 구간의 모든 세그먼트를 "unused" 로 표시하지만, 딥 스토리지에서 제거하지는 않아요. 2015-09-12T18:00:00.000Z/2015-09-12T20:00:00.000Z 구간, 즉 18시와 20시 사이의 세그먼트를 비활성화해 볼게요.
curl -X 'POST' -H 'Content-Type:application/json' -d '{ "interval" : "2015-09-12T18:00:00.000Z/2015-09-12T20:00:00.000Z" }' http://localhost:8081/druid/coordinator/v1/datasources/deletion-tutorial/markUnused
요청이 완료되면 웹 콘솔의 Segments 뷰에 18시와 19시 세그먼트가 더 이상 표시되지 않아요.
18시와 19시 세그먼트는 여전히 딥 스토리지에 존재한다는 점을 확인해 주세요:
$ ls -l1 var/druid/segments/deletion-tutorial/2015-09-12T00:00:00.000Z_2015-09-12T01:00:00.000Z2015-09-12T01:00:00.000Z_2015-09-12T02:00:00.000Z2015-09-12T02:00:00.000Z_2015-09-12T03:00:00.000Z2015-09-12T03:00:00.000Z_2015-09-12T04:00:00.000Z2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z2015-09-12T05:00:00.000Z_2015-09-12T06:00:00.000Z2015-09-12T06:00:00.000Z_2015-09-12T07:00:00.000Z2015-09-12T07:00:00.000Z_2015-09-12T08:00:00.000Z2015-09-12T08:00:00.000Z_2015-09-12T09:00:00.000Z2015-09-12T09:00:00.000Z_2015-09-12T10:00:00.000Z2015-09-12T10:00:00.000Z_2015-09-12T11:00:00.000Z2015-09-12T11:00:00.000Z_2015-09-12T12:00:00.000Z2015-09-12T12:00:00.000Z_2015-09-12T13:00:00.000Z2015-09-12T13:00:00.000Z_2015-09-12T14:00:00.000Z2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z2015-09-12T15:00:00.000Z_2015-09-12T16:00:00.000Z2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z2015-09-12T17:00:00.000Z_2015-09-12T18:00:00.000Z2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z2015-09-12T19:00:00.000Z_2015-09-12T20:00:00.000Z2015-09-12T20:00:00.000Z_2015-09-12T21:00:00.000Z2015-09-12T21:00:00.000Z_2015-09-12T22:00:00.000Z2015-09-12T22:00:00.000Z_2015-09-12T23:00:00.000Z2015-09-12T23:00:00.000Z_2015-09-13T00:00:00.000Z
세그먼트 ID로 세그먼트 비활성화하기 (Disable segments by segment IDs)
일부 세그먼트를 segmentID로 비활성화해 볼게요. 이 역시 세그먼트를 "unused" 로 표시하지만 딥 스토리지에서 제거하지는 않아요. 웹 콘솔에서 세그먼트의 전체 segmentID를 확인할 수 있어요.
segments 뷰에서 세그먼트 행 중 하나를 클릭하면 세그먼트 메타데이터 대화상자가 열려요.
메타데이터 대화상자의 identifier 필드가 전체 세그먼트 ID를 보여 줘요. 예를 들어 23시 세그먼트는 deletion-tutorial_2015-09-12T23:00:00.000Z_2015-09-13T00:00:00.000Z_2023-05-16T00:04:12.091Z 라는 세그먼트 ID를 가져요.
마지막 두 세그먼트인 22시와 23시 세그먼트를 대응하는 세그먼트 ID로 Coordinator에 POST 요청을 보내 비활성화해 볼게요. 다음 명령은 Coordinator에 세그먼트 ID를 쿼리하고 jq 로 마지막 두 세그먼트의 ID를 파싱·추출해요. 세그먼트 ID는 unusedSegmentIds 라는 환경 변수에 저장돼요.
unusedSegmentIds=$(curl -X 'GET' -H 'Content-Type:application/json' http://localhost:8081/druid/coordinator/v1/datasources/deletion-tutorial/segments | jq '.[-2:]')
다음 요청이 세그먼트를 unused로 표시해요:
curl -X 'POST' -H 'Content-Type:application/json' -d "{\"segmentIds\": $unusedSegmentIds}" http://localhost:8081/druid/coordinator/v1/datasources/deletion-tutorial/markUnused
요청이 완료되면 웹 콘솔의 Segments 뷰에 22시와 23시 세그먼트가 더 이상 표시되지 않아요.
22시와 23시 세그먼트는 여전히 딥 스토리지에 있음을 확인해 주세요:
$ ls -l1 var/druid/segments/deletion-tutorial/2015-09-12T00:00:00.000Z_2015-09-12T01:00:00.000Z2015-09-12T01:00:00.000Z_2015-09-12T02:00:00.000Z2015-09-12T02:00:00.000Z_2015-09-12T03:00:00.000Z2015-09-12T03:00:00.000Z_2015-09-12T04:00:00.000Z2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z2015-09-12T05:00:00.000Z_2015-09-12T06:00:00.000Z2015-09-12T06:00:00.000Z_2015-09-12T07:00:00.000Z2015-09-12T07:00:00.000Z_2015-09-12T08:00:00.000Z2015-09-12T08:00:00.000Z_2015-09-12T09:00:00.000Z2015-09-12T09:00:00.000Z_2015-09-12T10:00:00.000Z2015-09-12T10:00:00.000Z_2015-09-12T11:00:00.000Z2015-09-12T11:00:00.000Z_2015-09-12T12:00:00.000Z2015-09-12T12:00:00.000Z_2015-09-12T13:00:00.000Z2015-09-12T13:00:00.000Z_2015-09-12T14:00:00.000Z2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z2015-09-12T15:00:00.000Z_2015-09-12T16:00:00.000Z2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z2015-09-12T17:00:00.000Z_2015-09-12T18:00:00.000Z2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z2015-09-12T19:00:00.000Z_2015-09-12T20:00:00.000Z2015-09-12T20:00:00.000Z_2015-09-12T21:00:00.000Z2015-09-12T21:00:00.000Z_2015-09-12T22:00:00.000Z2015-09-12T22:00:00.000Z_2015-09-12T23:00:00.000Z2015-09-12T23:00:00.000Z_2015-09-13T00:00:00.000Z
Kill Task 실행하기 (Run a kill task)
이제 일부 세그먼트를 비활성화했으니, Kill Task를 제출해 비활성화된 세그먼트를 메타데이터와 딥 스토리지에서 삭제할 수 있어요.
Kill Task 스펙은 quickstart/tutorial/deletion-kill.json 에 준비되어 있어요. 다음 명령으로 이 태스크를 Overlord에 제출해 주세요:
curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/deletion-kill.json http://localhost:8081/druid/indexer/v1/task
태스크가 끝나면 Druid가 비활성화된 세그먼트를 딥 스토리지에서 삭제한 것을 확인할 수 있어요.
$ ls -l1 var/druid/segments/deletion-tutorial/2015-09-12T00:00:00.000Z_2015-09-12T01:00:00.000Z2015-09-12T01:00:00.000Z_2015-09-12T02:00:00.000Z2015-09-12T02:00:00.000Z_2015-09-12T03:00:00.000Z2015-09-12T03:00:00.000Z_2015-09-12T04:00:00.000Z2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z2015-09-12T05:00:00.000Z_2015-09-12T06:00:00.000Z2015-09-12T06:00:00.000Z_2015-09-12T07:00:00.000Z2015-09-12T07:00:00.000Z_2015-09-12T08:00:00.000Z2015-09-12T08:00:00.000Z_2015-09-12T09:00:00.000Z2015-09-12T09:00:00.000Z_2015-09-12T10:00:00.000Z2015-09-12T10:00:00.000Z_2015-09-12T11:00:00.000Z2015-09-12T11:00:00.000Z_2015-09-12T12:00:00.000Z2015-09-12T12:00:00.000Z_2015-09-12T13:00:00.000Z2015-09-12T13:00:00.000Z_2015-09-12T14:00:00.000Z2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z2015-09-12T15:00:00.000Z_2015-09-12T16:00:00.000Z2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z2015-09-12T17:00:00.000Z_2015-09-12T18:00:00.000Z2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z2015-09-12T19:00:00.000Z_2015-09-12T20:00:00.000Z2015-09-12T20:00:00.000Z_2015-09-12T21:00:00.000Z2015-09-12T21:00:00.000Z_2015-09-12T22:00:00.000Z
더 알아보기 (Learn more)
- 세그먼트 (Segments) — 세그먼트가 어떻게 구성되는지에 대한 문서.
- 데이터 관리 (Data management) — 데이터 업데이트와 컴팩션 등 데이터 유지 관리 주제.