다중 사용자 및 운영 클러스터 환경에서 Impala 서비스에 대한 가용성을 확보하기 위해 Proxy 서버나 하드웨어 Load-Balancer를 설정할 수도 있습니다. 현재 버전에서 Impala statestore 메카니즘은 로드발랜서와 같은 기능이 포함되지 않았습니다.
대 규모 운영환경에서는 "L4 -> HAProxy와 같은 소프트웨어 Load-Balancer -> Impala Daemons"과 같이 구성가능합니다.
본 문서에서는 데이터 노드에 배포 구성된 다중 Impala 데몬 프로세스를 HAProxy로 구성하고, Hue와 같은 JDBC 연결 역시 HAProxy를 통해 구성하는 방식을 설명할 예정이며, Kerberos로 보호되는 클러스터 환경에서는 몇 가지 추가 고려 사항이 있지만 본 문서에 포함되지 않았습니다. 자세한 사항은 Cloudera 메뉴얼을 참조해 주시기 바랍니다.
Overview of Proxy Usage and Load Balancing for Impala
Impala용 부하분산을 위한 Proxy 서버를 사용한 경우 다음과 같은 이점을 얻을 수 있습니다:
- 애플리케이션이 특정 Impala 데몬이 실행되는 호스트가 아닌 공통 Proxy 서버에 접근합니다.
- 특정 Impala 데몬이 장애가 발생하더라도 가용한 Impala 데몬에게 쿼리 요청을 전달하기 때문에 서비스 연속성을 보장할 수 있습니다.
- 각 Impala 쿼리용 Coordinator 노드는 쿼리를 처리하는 다른 노드보다 더 많은 메모리 및 CPU 리소스를 필요로합니다. 때문에, Proxy 서버에서 쿼리 요청을 Round-robin 방식으로 다중 Impala 데몬 호스트에게 적절하게 분산시킨 경우, 특정 Impala 데몬에게 Coordinator 역할이 집중되는 현상을 사전에 방지할 수 있습니다.
다음은 일반적인 Load-balancing Proxy 소프트웨어를 적용하는 절차입니다:
- Load-Balancing Proxy 소프트웨어를 다운로드 후, 설치할 호스트에 HAProxy를 설치 및 구성하십시오. 일반적으로 Impala 데몬이 실행되는 DataNode 보다는 별도의 Proxy 노드에 소프트웨어 기반의 Load Balancer를 설치할 것을 권장합니다.
- 예: HAProxy 설치 명령어 - yum install haproxy
Load Balancer(haproxy.cfg)를 적절하게 구성하십시오:
Impala 요청을 중계하기 위한 Load Balancer의 Listen 포트를 지정.
"Sticky Sessions" 설정을 고려하십시오. Cloudera는 Impalad와 Hue와 같은 stateless 클라이언트 애플리케이션에서 오랫 동안 실행되는 쿼리가 중간에 끊어지는 현상을 미연에 방지하기 위해 해당 옵션을 권장합니다. 실제 운영 워크로드 및 클라이언트 애플리케이션 속성에 따라 적절한 구성을 해야 합니다.
- 개별 Impala 노드에 대한 host 및 port 설정을 지정하십시오. 이 구성은 Proxy 서버에 의해 개별 Impala 쿼리에게 요청을 중계할 때 사용될 Impala용 호스트입니다.
- 예: HAProxy - "/etc/haproxy/haproxy.cfg"의 구성정보 파일을 설정합니다. 설정 예는 다음에 설명될 예정입니다.
- 로드 발랜싱 구성이 완료된 구성파일을 기반으로 HAProxy 서버를 실행하십시오:
- 예: HAProxy
/usr/sbin/haproxy –f /etc/haproxy/haproxy.cfg
- Cloudera Manager 관리 콘솔에서, ""을 차례대로 선택 한 뒤 다음 옵션의 값을 정의합니다.
- 옵션 : Impala Daemons Load Balancer
- 값:Load Balancer의 주소 정보를 "host:port "와 같은 형식으로 입력 - 이 설정을 통해 Impala 관련 작업 요청을 이 옵션에 등록된 Proxy 서버로 라우팅해줍니다.
- 올바르게 구성되었는지 테스트 해봅니다.
- Impala-shell: 21000 포트 대신 HAProxy에 설정된 포트 번호를 통해 임의의 Impala 데몬에게 접속이 정상적으로 되는지를 검증합니다: 예 Impala-shell의 -i 옵션을 통해 접속 정보를 특정 Impala 데몬이 아닌 HAProxy가 설치되고 구성된 호스트 정보 및 포트 정보를 기입합니다.
- Hue(JDBC Client) 또는 ODBC 클라이언트: Hue 애플리케이션의 구성 방식은 다음 절에서 설명할 예정입니다.
구성 정보 예: HAProxy Load Balancer for Impala
다음은 haproxy.cfg 구성 예 입니다:
global # To have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local0 log 127.0.0.1 local1 notice chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket #stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block # # You might need to adjust timing values to prevent timeouts. #--------------------------------------------------------------------- defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 maxconn 3000 contimeout 5000 clitimeout 50000 srvtimeout 50000 # # This sets up the admin page for HA Proxy at port 25002. # listen stats :25002 balance mode http stats enable stats auth username:password # This is the setup for Impala. Impala client connect to load_balancer_host:25003. # HAProxy will balance connections among the list of servers listed below. # The list of Impalad is listening at port 21000 for beeswax (impala-shell) or original ODBC driver. # For JDBC or ODBC version 2.x driver, use port 21050 instead of 21000. listen impala :25003 mode tcp option tcplog balance leastconn server symbolic_name_1 impala-host-1.example.com:21000 server symbolic_name_2 impala-host-2.example.com:21000 server symbolic_name_3 impala-host-3.example.com:21000 server symbolic_name_4 impala-host-4.example.com:21000 # Setup for Hue or other JDBC-enabled applications. # In particular, Hue requires sticky sessions. # The application connects to load_balancer_host:21051, and HAProxy balances # connections to the associated hosts, where Impala listens for JDBC # requests on port 21050. listen impalajdbc :21051 mode tcp option tcplog balance source server symbolic_name_5 impala-host-1.example.com:21050 server symbolic_name_6 impala-host-2.example.com:21050 server symbolic_name_7 impala-host-3.example.com:21050 server symbolic_name_8 impala-host-4.example.com:21050
구성 시 주요 고려 사항
Impala 연결 요청은 TCP 모드 이기 때문에 client timeout / server timeout 값을 동일하게 설정합니다.
Long-query를 수용하기 위해 client timeout / server timeout을 쿼리 특성 또는 SLA에 맞게 긴 값으로 설정합니다.
Impala-shell을 활용한 스크립트를 사용하는 경우, 연결이 쿼리 수행 후 정상적으로 종료하기 위해 "Connect > 쿼리 수행 > quit"와 같이 절차에 준수하십시오.
업무 속성에 맞도록 balance 옵션을 올바르게 설정하십시오.
보다 자세한 정보는 HAProxy 메뉴얼을 참조하십시오.
Configuring Hue
1. Cloudera Manager 관리 콘솔에서 상위 Cluster 메뉴를 선택 한 뒤, Hue 서비스를 클릭.
2. Hue 서비스에서, 구성 정보 탭을 클릭 후, "Service-Wide > Advanced"로 이동 한 뒤, 다음과 같이 "Hue Service Advanced Configuration Snippet(Safety Value)"의 값을 설정합니다.
Server_host : HAProxy가 실행되는 호스트 명 정의
Server Port: 21050 포트가 Binding되어 있는 HAProxy의 Port 정의
server_conn_timeout을 설정
1 2 3 4 | [impala] server_host=< hostname running HAProxy> server_port=<port HAProxy is bound to> server_conn_timeout=<timeout in seconds> |
참고자료:
http://www.cloudera.com/documentation/enterprise/latest/topics/impala_proxy.html
http://gethue.com/hadoop-tutorial-how-to-distribute-impala-query-load/
'Big DATA > Impala' 카테고리의 다른 글
Impala - Statestore와 Coordinator간의 연결 불량 (0) | 2019.11.19 |
---|---|
[Impala JDBC 인증 설정] WAS에서 JDBC 연결 시 kerberos 통합? (0) | 2017.08.16 |
Impala Options (0) | 2017.02.16 |
Impala Timeout (0) | 2017.01.24 |
Components of the Impala Server (0) | 2017.01.16 |