[Hadoop] hiveserver2

이혜지·2020년 11월 13일
1

참고: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview
hiveserver2 overview

HiveServer2(HS2)

클라이언트가 Hive에 대해 쿼리를 실행할 수 있도록하는 서비스입니다.
HiveServer2는 더 이상 사용되지 않는 HiveServer1의 후속 작품으로,
HS2는 다중 클라이언트 동시 접속 및 인증을 지원합니다. JDBC, ODBC 같은 개방형 API 클라이언트에 대한 더 나은 지원을 제공하도록 설계되었습니다.
HiveServer2는 Thrift기반 Hive 서비스(TCP 또는 HTTP)와 웹UI용 Jetty 웹 서버를 포함하는 복합 서비스로 실행되는 단일 프로세스입니다.

Thrift 기반 Hive service는 HS2의 핵심이며 Hive 쿼리 서비스 (ex. Beeline)을 담당한다.

*여기서 Thrift는 크로스 플랫폼 서비스를 구축하기위한 RPC 프레임 워크이다. 스택은 서버, 전송, 프로토콜 및 프로세서의 4개 계층으로 구성됩니다. (참고 : https://thrift.apache.org/docs/concepts)

HS2 4가지 layer

Server

Tansport

Protocol

Processor

Dependencies of HS2

  • Metastore
    metastore는 임베디드(hs2와 동일한 프로세스에서) 또는 원격 서버(thrift 기반 서비스이기도함)로 구성 할 수 있습니다. hs2는 쿼리 컴파일에 필요한 메타 데이터를 위해 메타 스토어와 통신합니다.

  • Hadoop cluster
    hs2는 다양한 실행 엔진(MapReduce/Tez/Spark)에 대한 물리적 실행 계획을 준비하고 실행을 위해 작업을 Hadoop 클러스터에 제출합니다. 여기서 hs2와 해당 종속성 간의 상호 작용 다이어그램을 찾을 수 있습니다.

JDBC Client

JDBC 드라이버는 클라이언트 측이 hs2와 상호 작용하는데 권장됩니다.
Thrift 클라이언트가 직접 사용되고, jdbc가 우회되는 경우가 있다(ex. Hadoop Hue)

쿼리생성시 api 호출 과정
jdbc client(ex. beeline)는 전송연결을 시작한다음 OpenSession API를 호출하여 SessionHandle을 가져오면서 HiveConnection을 생성. Session은 서버측에 생성된다.
HiveStatement가 실행되고 Thrift 클라이언트에서 ExecuteStatement API 호출이 수행됩니다. API호출에서 SessionHandle 정보는 쿼리 정보와 함께 서버로 전달됩니다.
HS2 서버는 요청을 수신하고 드라이버 (CommandProcessor)에게 쿼리 구문 분석 및 컴파일을 요청합니다. 드라이버는 Hadoop과 통신하는 백그라운드 작업을 시작하고 즉시 클라이언트에 응답을 반환합니다.
이것은 ExecuteStatement API의 비동기 설계입니다. 응답에는 서버 측에서 생성 된 OperationHandle이 포함됩니다.
클라이언트는 OperationHandle을 사용하여 HS2와 통신하여 쿼리 실행 상태를 폴링합니다.

profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글