세그먼트 페처
세그먼트 페처 (Segment Fetchers)
Pinot 세그먼트 파일이 외부 시스템(Hadoop/Spark 등)에서 생성될 때 그 데이터를 Pinot Controller와 Server로 푸시하는 방법을 다루는 문서예요.
출처: 문서
본문
Pinot 세그먼트 파일이 외부 시스템(Hadoop/Spark 등)에서 생성될 때 그 데이터를 Pinot Controller와 Server로 푸시하는 방법은 여러 가지가 있어요:
- 세그먼트를 공유 NFS로 푸시하고 Pinot가 해당 NFS 위치에서 세그먼트 파일을 가져오게 함.
- 세그먼트를 Web 서버로 푸시하고 Pinot가 http/https 링크로 Web 서버에서 세그먼트 파일을 가져오게 함.
- 세그먼트를 HDFS로 푸시하고 Pinot가 hdfs 위치 uri로 HDFS에서 세그먼트 파일을 가져오게 함.
- 세그먼트를 다른 시스템으로 푸시하고 자체 세그먼트 페처를 구현해 그 시스템에서 데이터를 가져오게 함.
첫 번째 두 옵션은 Pinot 패키지와 함께 기본 지원돼요. 원격 작업이 파일에 해당하는 URI를 Pinot 컨트롤러에 보내기만 하면 Pinot가 파일을 가져와 적절한 Pinot 서버와 브로커에 할당해요. Pinot의 HDFS 지원을 활성화하려면 Pinot Hadoop 구성과 적절한 Hadoop 의존성을 제공해야 해요.
HDFS 세그먼트 페처 구성 (HDFS segment fetcher configs)
Pinot 컨트롤러/서버 구성에 다음 구성을 제공해야 해요:
pinot.controller.segment.fetcher.hdfs.hadoop.conf.path=`<file path to hadoop conf folder>
또는
pinot.server.segment.fetcher.hdfs.hadoop.conf.path=`<file path to hadoop conf folder>
이 경로는 Hadoop 설치의 core-site.xml과 hdfs-site.xml 파일을 포함하는 로컬 폴더를 가리켜야 해요.
pinot.controller.segment.fetcher.hdfs.hadoop.kerberos.principle=<your kerberos principal>
pinot.controller.segment.fetcher.hdfs.hadoop.kerberos.keytab=<your kerberos keytab>
또는
pinot.server.segment.fetcher.hdfs.hadoop.kerberos.principle=<your kerberos principal>
pinot.server.segment.fetcher.hdfs.hadoop.kerberos.keytab=<your kerberos keytab>
이 두 구성은 Hadoop 설치가 Kerberos로 보호된 경우 해당 Kerberos 구성이어야 해요. Kerberos 보안 식별 생성 방법은 Hadoop Kerberos 가이드를 확인하세요.
또한 Hadoop 설치에서 Pinot 시작 스크립트로 적절한 Hadoop 의존성 jar를 제공해야 해요.
HDFS 세그먼트를 Pinot Controller로 푸시 (Push HDFS segment to Pinot Controller)
HDFS 세그먼트 파일을 Pinot 컨트롤러로 푸시하려면 이전 부분에서 언급한 적절한 Hadoop 구성이 있는지 확인하면 돼요. 그러면 원격 세그먼트 생성/푸시 작업이 새로 생성된 세그먼트 파일의 HDFS 경로를 Pinot Controller에 보내 파일을 다운로드하게 할 수 있어요.
예를 들어 컨트롤러에 대한 다음 curl 요청은 세그먼트 파일을 적절한 테이블로 다운로드하도록 알려줘요:
curl -X POST -H "UPLOAD_TYPE:URI" -H "DOWNLOAD_URI:hdfs://nameservice1/hadoop/path/to/segment/file.gz" -H "content-type:application/json" -d '' localhost:9000/segments
다른 시스템용 자체 세그먼트 페처 구현 (Implement your own segment fetcher for other systems)
다른 파일 시스템용 자체 세그먼트 페처를 구현해 외부 jar로 Pinot 시스템에 로드할 수도 있어요. 할 일은 SegmentFetcher 인터페이스를 확장하는 클래스를 구현하고 Pinot Controller와 Server에 다음과 같이 구성을 제공하는 것뿐이에요:
pinot.controller.segment.fetcher.`<protocol>`.class =`<class path to your implementation>
또는
pinot.server.segment.fetcher.`<protocol>`.class =`<class path to your implementation>
구성 루트 pinot.server.segment.fetcher.<protocol> 아래에 페처에 대한 다른 구성도 제공할 수 있어요.