본문 바로가기

Big DATA/Impala

Using Impala through a Proxy for High Availability


다중 사용자 및 운영 클러스터 환경에서 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 소프트웨어를 적용하는 절차입니다:

  1. Load-Balancing Proxy 소프트웨어를 다운로드 후, 설치할 호스트에 HAProxy를 설치 및 구성하십시오. 일반적으로 Impala 데몬이 실행되는 DataNode 보다는 별도의 Proxy 노드에 소프트웨어 기반의 Load Balancer를 설치할 것을 권장합니다.
    • 예: HAProxy 설치 명령어 - yum install haproxy
  2. 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"의 구성정보 파일을 설정합니다. 설정 예는 다음에 설명될 예정입니다.
  3. 로드 발랜싱 구성이 완료된 구성파일을 기반으로 HAProxy 서버를 실행하십시오:
    •  예: HAProxy
  4. /usr/sbin/haproxy –f /etc/haproxy/haproxy.cfg
  5. Cloudera Manager 관리 콘솔에서, "Impala > Configuration > Impala Daemon Default Group"을 차례대로 선택 한 뒤 다음 옵션의 값을 정의합니다.
    • 옵션 : Impala Daemons Load Balancer 
    • :Load Balancer의 주소 정보를 "host:port "와 같은 형식으로 입력 -  이 설정을 통해 Impala 관련 작업 요청을 이 옵션에 등록된 Proxy 서버로 라우팅해줍니다.
  6. 올바르게 구성되었는지 테스트 해봅니다. 
    • 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 서비스를 클릭.

impala-1

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/