HiveServer2 설정

HiveServer2 설정 (Setting Up HiveServer2)

원격 클라이언트가 Hive에 쿼리를 실행하고 결과를 가져올 수 있게 해주는 서버 인터페이스 HiveServer2(HS2)의 설정 방법을 설명해요. 구성 속성, 기동 방법, 인증·보안(SSL, Kerberos, LDAP, PAM), 스크래치 디렉터리 관리까지 다룹니다.

출처: 문서

본문

HiveServer2 (HS2)는 원격 클라이언트가 Hive에 대해 쿼리를 실행하고 결과를 가져올 수 있게 하는 서버 인터페이스입니다(더 자세한 소개는 여기). Thrift RPC 기반의 현재 구현은 HiveServer의 개선된 버전으로, 다중 클라이언트 동시성과 인증을 지원합니다. JDBC와 ODBC 같은 공개 API 클라이언트를 더 잘 지원하도록 설계되었습니다.

이 문서는 서버를 설정하는 방법을 설명합니다. 이 서버를 클라이언트에서 어떻게 사용하는지는 HiveServer2 Clients 문서에서 설명합니다.

버전 정보 (Version information)

Hive 0.11 버전에서 도입되었습니다. HIVE-2935 참고.

구성 방법 (How to Configure)

hive-site.xml 파일의 구성 속성 (Configuration Properties in the hive-site.xml File)

hive.server2.thrift.min.worker.threads – 최소 작업자 스레드 수, 기본 5. hive.server2.thrift.max.worker.threads – 최대 작업자 스레드 수, 기본 500. hive.server2.thrift.port – 수신할 TCP 포트 번호, 기본 10000. hive.server2.thrift.bind.host – 바인딩할 TCP 인터페이스.

HiveServer2에 설정할 수 있는 추가 속성은 Configuration Properties 문서의 HiveServer2를 참고하세요.

선택적 환경 설정 (Optional Environment Settings)

HIVE_SERVER2_THRIFT_BIND_HOST – 선택적 TCP 호스트 인터페이스 바인딩. 구성 파일 설정을 재정의합니다. HIVE_SERVER2_THRIFT_PORT – 선택적 TCP 포트 번호 수신, 기본 10000. 구성 파일 설정을 재정의합니다.

HTTP 모드 실행 (Running in HTTP Mode)

HiveServer2는 HTTP 전송으로 Thrift RPC 메시지를 보내는 것을 지원합니다(Hive 0.13 이후, HIVE-4752 참고). 특히 클라이언트와 서버 사이에 프록시 중계자(예: 로드 밸런싱이나 보안 목적)를 지원할 때 유용합니다. 현재 HiveServer2는 TCP 모드나 HTTP 모드 중 하나로 실행할 수 있지만 둘 다는 아닙니다. 해당 JDBC URL은 HiveServer2 Clients – JDBC Connection URLs 링크를 확인하세요. HTTP 모드를 활성화·구성하려면 다음 설정을 사용하세요: | Setting | Default | Description | |---|---|---| | hive.server2.transport.mode | binary | http로 설정하면 HTTP 전송 모드 활성화 | | hive.server2.thrift.http.port | 10001 | 수신할 HTTP 포트 번호 | | hive.server2.thrift.http.max.worker.threads | 500 | 서버 풀의 최대 작업자 스레드 | | hive.server2.thrift.http.min.worker.threads | 5 | 서버 풀의 최소 작업자 스레드 | | hive.server2.thrift.http.path | cliservice | 서비스 엔드포인트 |

쿠키 기반 인증 (Cookie Based Authentication) HIVE-9709와 HIVE-9710이 HTTP 모드 HiveServer2의 쿠키 기반 인증을 도입했습니다. 이 변경과 관련된 HiveServer2 파라미터(hive.server2.thrift.http.cookie.*)는 여기에서 찾을 수 있습니다.

선택적 전역 초기화 파일 (Optional Global Init File)

구성된 hive.server2.global.init.file.location 위치에 전역 초기화 파일을 둘 수 있습니다(Hive 0.14 이후, HIVE-5160, HIVE-7497, HIVE-8138 참고). 이것은 초기화 파일 자체의 경로이거나, ".hiverc"라는 초기화 파일이 있을 것으로 기대되는 디렉터리일 수 있습니다.

초기화 파일은 이 HiveServer2 인스턴스의 사용자들을 위해 실행될 명령 집합(예: 표준 jar·함수 집합 등록)을 나열합니다.

로깅 구성 (Logging Configuration)

HiveServer2 연산 로그는 Beeline 클라이언트에서 사용할 수 있습니다(Hive 0.14 이후). 다음 파라미터가 로깅을 구성합니다:

  • hive.server2.logging.operation.enabled
  • hive.server2.logging.operation.log.location
  • hive.server2.logging.operation.verbose (Hive 0.14 ~ 1.1)
  • hive.server2.logging.operation.level (Hive 1.2 이후)

시작 방법 (How to Start)

$HIVE_HOME/bin/hiveserver2

OR

$HIVE_HOME/bin/hive --service hiveserver2

사용 메시지 (Usage Message)

-H 또는 --help 옵션이 사용 메시지를 표시합니다. 예를 들어:

$HIVE_HOME/bin/hive --service hiveserver2 -H
Starting HiveServer2
usage: hiveserver2
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property

인증/보안 구성 (Authentication/Security Configuration)

HiveServer2는 익명(인증 없음, SASL 포함/미포함), Kerberos(GSSAPI), LDAP 패스스루, 플러그 가능한 커스텀 인증, 그리고 PAM(Pluggable Authentication Modules, Hive 0.13 이후 지원)을 지원합니다.

구성 (Configuration)

인증 모드: hive.server2.authentication – 인증 모드, 기본 NONE. 옵션은 NONE(일반 SASL 사용), NOSASL, KERBEROS, LDAP, PAM, CUSTOM.

KERBEROS 모드에서는 다음 설정: hive.server2.authentication.kerberos.principal – 서버용 Kerberos principal. hive.server2.authentication.kerberos.keytab – 서버 principal용 keytab.

LDAP 모드에서는 다음 설정: hive.server2.authentication.ldap.url – LDAP URL(예: ldap://hostname.com:389). hive.server2.authentication.ldap.baseDN – LDAP base DN. (AD에서는 선택.) hive.server2.authentication.ldap.Domain – LDAP 도메인. (Hive 0.12.0 이상.)

Hive 1.3.0 이상의 다른 LDAP 구성 파라미터는 HiveServer2의 User and Group Filter Support with LDAP Atn Provider를 참고하세요.

CUSTOM 모드에서는 다음 설정: hive.server2.custom.authentication.class – org.apache.hive.service.auth.PasswdAuthenticationProvider 인터페이스를 구현하는 커스텀 인증 클래스.

PAM 모드는 아래 PAM 섹션의 세부 사항을 참고하세요.

사용자 가장 (Impersonation)

기본적으로 HiveServer2는 쿼리를 제출한 사용자로 쿼리 처리를 수행합니다. 그러나 다음 파라미터를 false로 설정하면 쿼리는 hiveserver2 프로세스가 실행되는 사용자로 실행됩니다.

hive.server2.enable.doAs – 연결된 사용자를 가장(impersonate), 기본 true.

비보안 모드에서 메모리 누수를 막으려면 다음 파라미터를 true로 설정해 파일 시스템 캐시를 비활성화합니다(HIVE-4501 참고): fs.hdfs.impl.disable.cache – HDFS 파일시스템 캐시 비활성화, 기본 false. fs.file.impl.disable.cache – 로컬 파일시스템 캐시 비활성화, 기본 false.

무결성/기밀성 보호 (Integrity/Confidentiality Protection)

Hive JDBC 드라이버와 HiveServer2 사이 통신에 대한 무결성 보호와 기밀성 보호(기본 인증 이상)가 활성화됩니다(Hive 0.12 이후, HIVE-4911 참고). 이를 구성하려면 SASL QOP 속성을 사용할 수 있습니다.

  • 이것은 HS2 클라이언트(JDBC/ODBC 애플리케이션)가 HiveServer2에 Kerberos로 인증할 때만 해당됩니다.
  • hive-site.xml의 hive.server2.thrift.sasl.qop는 유효한 QOP 값('auth', 'auth-int', 'auth-conf') 중 하나로 설정해야 합니다.

SSL 암호화 (SSL Encryption)

SSL 암호화 지원이 제공됩니다(Hive 0.13 이후, HIVE-5351 참고). 활성화하려면 hive-site.xml에서 다음 구성을 설정하세요:

hive.server2.use.SSL – true로 설정. hive.server2.keystore.path – 키스토어 경로로 설정. hive.server2.keystore.password – 키스토어 비밀번호로 설정.

참고 (Note) hive.server2.transport.mode가 binary이고 hive.server2.authentication이 KERBEROS일 때 SSL 암호화는 Hive 2.0까지 동작하지 않았습니다. 암호화를 활성화하려면 hive.server2.thrift.sasl.qop를 auth-conf로 설정하세요. 자세한 내용은 HIVE-14019를 참고하세요.

자가 서명 인증서로 SSL 설정 (Setting up SSL with self-signed certificates) HiveServer2에서 사용할 자가 서명 SSL 인증서를 만들고 검증하는 단계:

  • 자가 서명 인증서를 만들고 키스토어 파일에 추가: keytool -genkey -alias example.com -keyalg RSA -keystore keystore.jks -keysize 2048. 자가 서명 인증서에 사용된 이름이 HiveServer2가 실행될 호스트명과 일치하는지 확인하세요.
  • 키스토어 항목을 나열해 인증서가 추가되었는지 확인: keytool -list -keystore keystore.jks. 키스토어에는 이런 인증서가 여러 개 포함될 수 있습니다.
  • 이 인증서를 keystore.jks에서 인증서 파일로 내보내기: keytool -export -alias example.com -file example.com.crt -keystore keystore.jks
  • 신뢰를 확립하기 위해 클라이언트의 truststore에 이 인증서 추가: keytool -import -trustcacerts -alias example.com -file example.com.crt -keystore truststore.jks
  • 인증서가 truststore.jks에 존재하는지 확인: keytool -list -keystore truststore.jks
  • 그런 다음 HiveServer2를 시작하고 beeline으로 연결 시도:
jdbc:hive2://<host>:<port>/<database>;ssl=true;sslTrustStore=<path-to-truststore>;trustStorePassword=<truststore-password>

SSL 프로토콜 버전 선택적 비활성화 (Selectively disabling SSL protocol versions) 특정 SSL 프로토콜 버전을 비활성화하려면 다음 단계를 사용하세요:

  • openssl ciphers -v(또는 openssl이 아니면 해당 명령)를 실행해 모든 프로토콜 버전을 봅니다.
  • 1단계에 더해, HiveServer2가 실행되는 노드가 지원하는 모든 프로토콜을 보려면 HiveServer2 로그를 살펴보는 추가 단계가 필요할 수 있습니다. HiveServer2 로그 파일에서 "SSL Server Socket Enabled Protocols:"를 검색하세요.
  • 비활성화해야 할 모든 SSL 프로토콜을 hive.ssl.protocol.blacklist에 추가하세요. hiveserver2-site.xml의 속성이 hive-site.xml의 그것을 재정의하지 않도록 하세요.

PAM (Pluggable Authentication Modules)

경고 (Warning) PAM 인증 모드를 제공하는 데 사용되는 JPAM 라이브러리는 사용자 비밀번호가 만료되면 HiveServer2가 다운될 수 있습니다. JPAM이 호출한 네이티브 코드의 segfault/core dump 때문에 발생합니다. 일부 사용자는 로그인 중 다른 경우에도 크래시를 보고했습니다. LDAP 또는 KERBEROS 사용을 권장합니다.

PAM 지원이 제공됩니다(Hive 0.13 이후, HIVE-6466 참고). PAM을 구성하려면:

  • 관련 아키텍처용 JPAM 네이티브 라이브러리를 내려받습니다.
  • 압축을 풀고 libjpam.so를 시스템의 디렉터리(<libjmap-directory>)에 복사합니다.
  • 다음과 같이 LD_LIBRARY_PATH 환경 변수에 디렉터리를 추가합니다:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<libjmap-directory>
  • 일부 PAM 모듈의 경우 etc/shadow/etc/login.defs 파일이 HiveServer2 프로세스를 실행하는 사용자가 읽을 수 있도록 해야 합니다.

마지막으로 hive-site.xml에서 다음 구성을 설정합니다:

hive.server2.authentication – PAM으로 설정. hive.server2.authentication.pam.services – 사용할 쉼표로 구분된 PAM 서비스 목록으로 설정. PAM 서비스와 같은 이름의 파일이 /etc/pam.d에 존재해야 합니다.

HiveServer2 작업 자격 증명 공급자 설정 (Setting up HiveServer2 job credential provider)

Hive 2.2.0부터(HIVE-14822 참고) HiveServer2는 MR과 Spark 작업용 작업별 hadoop 자격 증명 공급자(job specific hadoop credential provider)를 지원합니다. Hadoop Credential Provider로 암호화된 비밀번호를 사용할 때, HiveServer2는 클러스터 전역에서 실행되는 작업이 그 시크릿을 읽을 수 있도록 작업 구성에 충분한 정보를 전달해야 합니다. 추가로, HiveServer2는 작업이 가지면 안 되는 시크릿(예: Hive Metastore 데이터베이스 비밀번호)을 가질 수 있습니다. 작업이 S3 자격 증명 같은 시크릿에 접근해야 한다면 아래 구성 단계로 설정할 수 있습니다:

  • HDFS의 안전한 위치에 Hadoop Credential Provider API로 작업별 키스토어를 만듭니다. 이 키스토어는 작업에 필요한 구성의 암호화된 키/값 쌍을 담아야 합니다. 예: S3 자격 증명의 경우 키스토어는 해당 값을 가진 fs.s3a.secret.key와 fs.s3a.access.key를 담아야 합니다.
  • 키스토어를 해독할 비밀번호는 HIVE_JOB_CREDSTORE_PASSWORD라는 HiveServer2 환경 변수로 설정해야 합니다.
  • hive.server2.job.credential.provider.path를 위 (1)에서 만든 키스토어의 타입과 위치를 가리키는 URL로 설정하세요. 작업별 키스토어가 없으면 HiveServer2는 core-site.xml의 hadoop.credential.provider.path로 설정된 것을 사용합니다(가능하면).
  • 2단계의 환경 변수로 비밀번호가 제공되지 않으면 HiveServer2는 HADOOP_CREDSTORE_PASSWORD 환경 변수를 사용합니다(가능하면).
  • 이제 HiveServer2는 MR 또는 Spark 실행 엔진으로 실행되는 작업의 작업 구성을 수정해 작업 자격 증명 공급자를 포함시켜, 작업 태스크가 시크릿이 담긴 암호화된 키스토어에 접근할 수 있게 합니다.

hive.server2.job.credential.provider.path – 작업별 hadoop 자격 증명 공급자로 설정. 예: jceks://hdfs/user/hive/secret/jobcreds.jceks. HIVE_JOB_CREDSTORE_PASSWORD – 이 HiveServer2 환경 변수를 위에서 설정한 작업별 Hadoop 자격 증명 공급자 비밀번호로 설정하세요.

스크래치 디렉터리 관리 (Scratch Directory Management)

HiveServer2는 Hive가 임시 출력과 계획을 저장하는 데 사용하는 스크래치 디렉터리의 다양한 측면을 구성할 수 있게 합니다.

구성 속성 (Configuration Properties)

스크래치 디렉터리와 관련해 구성할 수 있는 속성은 다음과 같습니다:

  • hive.scratchdir.lock
  • hive.exec.scratchdir
  • hive.scratch.dir.permission
  • hive.start.cleanup.scratchdir

ClearDanglingScratchDir 도구 (ClearDanglingScratchDir Tool)

cleardanglingscratchdir 도구는 Hive의 부적절한 종료(예: 가상 머신이 재시작되어 Hive가 종료 훅을 실행할 기회가 없을 때)로 남겨진 매달린(dangling) 스크래치 디렉터리를 정리하는 데 사용할 수 있습니다.

hive --service cleardanglingscratchdir [-r] [-v] [-s scratchdir]
    -r   	dry-run 모드, 콘솔에 목록을 생성
	-v   	verbose 모드, 추가 디버깅 정보 출력
	-s   	비표준 스크래치 디렉터리를 사용하는 경우

이 도구는 스크래치 디렉터리가 사용 중인지 테스트하고, 사용 중이 아니면 제거합니다. 이것은 HDFS 쓰기 잠금에 의존해 스크래치 디렉터리가 사용 중인지 감지합니다. HDFS 클라이언트는 HDFS 파일($scratchdir/inuse.lck)을 쓰기 위해 열고 세션이 닫힐 때만 닫습니다. cleardanglingscratchdir은 해당 HiveCli/HiveServer2가 여전히 실행 중인지 테스트하기 위해 $scratchdir/inuse.lck를 쓰기 위해 열려 시도합니다. 잠금이 사용 중이면 스크래치 디렉터리는 정리되지 않습니다. 잠금을 사용할 수 있으면 스크래치 디렉터리가 정리됩니다. 죽은 HiveCli/HiveServer2의 스크래치 파일 잠금에 대한 리스(lease)를 NameNode가 되찾는 데 최대 10분이 걸릴 수 있으며, 그 시점에 cleardanglingscratchdir을 다시 실행하면 제거할 수 있습니다.

HiveServer2 웹 UI (Web UI for HiveServer2)

Version

Hive 2.0.0에서 도입되었습니다. HIVE-12338과 그 하위 태스크 참고.

HiveServer2용 웹 사용자 인터페이스(UI)는 구성, 로깅, 메트릭, 활성 세션 정보를 제공합니다. 웹 UI는 기본적으로 10002 포트(127.0.0.1:10002)에서 사용할 수 있습니다.

  • 웹 UI의 구성 속성은 hive-site.xml에서 hive.server2.webui.host, hive.server2.webui.port, hive.server2.webui.max.threads 등을 포함해 커스터마이즈할 수 있습니다.
  • Hive Metrics는 "Metrics Dump" 탭을 사용해 볼 수 있습니다.
  • 로그는 "Local logs" 탭을 사용해 볼 수 있습니다.

이 인터페이스는 현재 HIVE-12338에서 개발 중입니다.

Python 클라이언트 드라이버 (Python Client Driver)

HiveServer2용 Python 클라이언트 드라이버는 https://github.com/BradRuderman/pyhs2에서 사용할 수 있습니다(감사합니다, Brad). SASL과 Thrift 래퍼 같은 필요 패키지를 모두 포함합니다.

이 드라이버는 Python 2.6 이상에서 사용하도록 인증되었습니다.

pyhs2 드라이버를 사용하려면:

pip install pyhs2

그리고:

import pyhs2

with pyhs2.connect(host='localhost',
                   port=10000,
                   authMechanism="PLAIN",
                   user='root',
                   password='test',
                   database='default') as conn:
    with conn.cursor() as cur:
    	#Show databases
    	print cur.getDatabases()

    	#Execute query
        cur.execute("select * from table")

        #Return column info from query
        print cur.getSchema()

        #Fetch table results
        for i in cur.fetch():
            print i

이 드라이버는 [email protected] 메일링 리스트에서 논의할 수 있습니다.

Ruby 클라이언트 드라이버 (Ruby Client Driver)

Ruby 클라이언트 드라이버는 github의 https://github.com/forward3d/rbhive에서 사용할 수 있습니다.

더 알아보기 (Learn more)

HiveServer2는 원격 클라이언트(JDBC/ODBC/Beeline)가 Thrift RPC로 Hive를 조회하게 하는 서버예요. hive.site.xml의 hive.server2.* 속성으로 포트·스레드·전송 모드를 설정하고, KERBEROS/LDAP/PAM/CUSTOM 인증과 SSL을 지원합니다. pyhs2 같은 클라이언트 드라이버도 있습니다.