첫 배치 수집

첫 배치 수집 (First Batch Ingest)

첫 번째 배치 데이터를 Pinot로 가져와서 쿼리 콘솔에서 확인하는 페이지예요. 앞서 만든 transcript 오프라인 테이블에 CSV 데이터를 수집하고, 그 행이 실제로 쿼리 가능한지 직접 눈으로 확인해 볼 수 있어요.

출처: First Batch Ingest

본문

이 페이지를 마치면 알게 되는 것 (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)

  1. 브라우저에서 Query Console을 엽니다.
  2. 다음 쿼리를 실행합니다:
SELECT * FROM transcript
  1. 로드한 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에서 실시간 수집을 설정하는 방법을 배우려면 첫 스트림 수집으로 계속 진행하세요.

더 알아보기 (Learn more)