첫 배치 수집
첫 배치 수집 (First Batch Ingest)
첫 번째 배치 데이터를 Pinot로 가져와서 쿼리 콘솔에서 확인하는 페이지예요. 앞서 만든 transcript 오프라인 테이블에 CSV 데이터를 수집하고, 그 행이 실제로 쿼리 가능한지 직접 눈으로 확인해 볼 수 있어요.
본문
이 페이지를 마치면 알게 되는 것 (Outcome)
이 페이지를 끝까지 읽으면 CSV 데이터를 transcript 오프라인 테이블로 가져오고, 행이 쿼리 가능한 것을 확인할 수 있어요.
사전 요구 사항 (Prerequisites)
- 첫 테이블과 스키마 완료 --
transcript_OFFLINE테이블이 이미 존재해야 해요. - 이전 단계의 샘플 CSV 파일
/tmp/pinot-quick-start/rawdata/transcript.csv - Docker 사용자:
PINOT_VERSION환경 변수 설정. 버전 레퍼런스 페이지 참조.
단계 (Steps)
1. 배치 수집 이해하기
배치 수집은 파일(CSV, JSON, Avro, Parquet 등)에서 데이터를 읽어 Pinot 세그먼트로 변환하고, 그 세그먼트를 클러스터에 푸시해요. 작업 명세(job specification) YAML 파일이 Pinot에 입력 데이터를 어디서 찾을지, 어떤 형식인지, 완성된 세그먼트를 어디로 보낼지 알려줘요.
2. 수집 작업 명세 생성
로컬:
/tmp/pinot-quick-start/batch-job-spec.yml 파일을 만드세요:
executionFrameworkSpec:
name: 'standalone'
segmentGenerationJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentGenerationJobRunner'
segmentTarPushJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentTarPushJobRunner'
segmentUriPushJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentUriPushJobRunner'
jobType: SegmentCreationAndTarPush
inputDirURI: '/tmp/pinot-quick-start/rawdata/'
includeFileNamePattern: 'glob:**/*.csv'
outputDirURI: '/tmp/pinot-quick-start/segments/'
overwriteOutput: true
pinotFSSpecs:
- scheme: file
className: org.apache.pinot.spi.filesystem.LocalPinotFS
recordReaderSpec:
dataFormat: 'csv'
className: 'org.apache.pinot.plugin.inputformat.csv.CSVRecordReader'
configClassName: 'org.apache.pinot.plugin.inputformat.csv.CSVRecordReaderConfig'
tableSpec:
tableName: 'transcript'
schemaURI: 'http://localhost:9000/tables/transcript/schema'
tableConfigURI: 'http://localhost:9000/tables/transcript'
pinotClusterSpecs:
- controllerURI: 'http://localhost:9000'
Docker:
Docker 안에서 실행할 때 수집 작업 컨테이너는 localhost가 아니라 Docker 네트워크 호스트명으로 controller에 도달해야 해요. /tmp/pinot-quick-start/batch-job-spec.yml 파일을 만드세요:
executionFrameworkSpec:
name: 'standalone'
segmentGenerationJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentGenerationJobRunner'
segmentTarPushJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentTarPushJobRunner'
segmentUriPushJobRunnerClassName: 'org.apache.pinot.plugin.ingestion.batch.standalone.SegmentUriPushJobRunner'
jobType: SegmentCreationAndTarPush
inputDirURI: '/tmp/pinot-quick-start/rawdata/'
includeFileNamePattern: 'glob:**/*.csv'
outputDirURI: '/tmp/pinot-quick-start/segments/'
overwriteOutput: true
pinotFSSpecs:
- scheme: file
className: org.apache.pinot.spi.filesystem.LocalPinotFS
recordReaderSpec:
dataFormat: 'csv'
className: 'org.apache.pinot.plugin.inputformat.csv.CSVRecordReader'
configClassName: 'org.apache.pinot.plugin.inputformat.csv.CSVRecordReaderConfig'
tableSpec:
tableName: 'transcript'
schemaURI: 'http://pinot-controller:9000/tables/transcript/schema'
tableConfigURI: 'http://pinot-controller:9000/tables/transcript'
pinotClusterSpecs:
- controllerURI: 'http://pinot-controller:9000'
💡 설정 중 다른 이름을 사용했다면
pinot-controller를 실제 Pinot controller 컨테이너 이름으로 바꾸세요.
3. 수집 작업 실행
로컬:
bin/pinot-admin.sh LaunchDataIngestionJob \
-jobSpecFile /tmp/pinot-quick-start/batch-job-spec.yml
Docker:
docker run --rm -ti \
--network=pinot-demo \
-v /tmp/pinot-quick-start:/tmp/pinot-quick-start \
--name pinot-data-ingestion-job \
apachepinot/pinot:${PINOT_VERSION} LaunchDataIngestionJob \
-jobSpecFile /tmp/pinot-quick-start/batch-job-spec.yml
작업은 CSV 파일을 읽고, 세그먼트를 만들고, controller에 푸시해요. 성공 메시지로 끝나는 로그 출력을 볼 수 있을 거예요.
확인 (Verify)
- 브라우저에서 Query Console을 엽니다.
- 다음 쿼리를 실행합니다:
SELECT * FROM transcript
- 로드한 CSV 데이터와 일치하는 4개 행이 반환되는 것을 볼 수 있어요:
| studentID | firstName | lastName | gender | subject | score | timestampInEpoch |
|---|---|---|---|---|---|---|
| 200 | Lucy | Smith | Female | Maths | 3.8 | 1570863600000 |
| 200 | Lucy | Smith | Female | English | 3.5 | 1571036400000 |
| 201 | Bob | King | Male | Maths | 3.2 | 1571900400000 |
| 202 | Nick | Young | Male | Physics | 3.6 | 1572418800000 |
다음 단계 (Next step)
Kafka에서 실시간 수집을 설정하는 방법을 배우려면 첫 스트림 수집으로 계속 진행하세요.