Impala?
Apache Impala는 Apache Hadoop 데이터를 SQL문을 활용하여 쿼리할 수 있도록 돕는 오픈소스이다. Apache Hive와 동일한 메타데이터, 데이터 저장소, SQL 문법(Hive SQL)을 제공한다. JDBC 드라이버로 제공되며, 그 밖에도 Impala sh, ODBC, Web UI인 Hue로도 제공된다. 실시간 쿼리에 최적화되어 있으며, 배치 작업이 필요하면 Map Reduce 방식을 지원하는 Hive를 사용하면 된다.
Impala를 활용한 쿼리 처리 흐름

Impala는 다음과 같은 구성 요소로 이루어져 있다.
- 클라이언트: Hue, ODBC, JDBC 클라이언트, impala-shell. 쿼리를 보내거나 연결/관리 작업을 수행하는 데 사용한다.
- Hive Metastore: Impala가 사용할 수 있는 데이터 정보를 저장한다. 해당 정보는 어떤 데이터베이스가 존재하는지, 구조가 어떻게 되는지를 의미한다. Impala SQL로 스키마 객체를 생성, 삭제, 수정하고 데이터를 로드하면, 관련 메타데이터 변경이 Impala 노드 전체에 자동으로 전달된다. 밑에서 살펴볼 Catalog 서비스를 활용한다.
- Impala 데몬(impalad): DataNode에서 실행되며, 쿼리를 조정하고 실행한다. 클러스터 내 각 Impala 인스턴스는 쿼리를 수신하고 실행할 수 있으며, 이 쿼리는 병렬로 여러 노드에서 처리된다.
- HDFS와 HBase: 쿼리할 데이터가 저장된 스토리지이다.
Impala 쿼리 처리 흐름은 다음과 같다.
- 사용자 애플리케이션이 ODBC나 JDBC를 통해 Impala에 SQL 쿼리를 전송한다.
- 클러스터 내의 임의의 impalad 인스턴스가 요청을 받아 쿼리 코디네이터 역할을 한다.
- Impala는 쿼리를 파싱하고 분석하여 실행 계획을 수립한다.
- HDFS나 HBase에서 필요한 데이터를 가져온다.
- 각 impalad 인스턴스가 데이터를 처리하고, 결과를 코디네이터로 전송한다.
- 최종 결과가 사용자 애플리케이션에 반환된다.
Impala 서버 구조와 MPP(Massive Parallel Processing)

Impala 서버는 분산형 대규모 병렬 처리(MPP) 데이터베이스 엔진이다. 실제로 처리하는 Impala 데몬 서버인 impalad가 클러스터 내의 각 노드에 배치되어 쿼리 계획을 수립하고 수행한다. 임의의 impalad가 쿼리 요청을 받으면(쿼리 코디네이터) 작업을 분산하여 각 impalad가 병렬로 쿼리를 수행할 수 있도록 한다. 병렬 처리를 통해 대규모 데이터를 분산 처리하여 성능을 높일 수 있다.
병렬 처리를 위해, 분산된 노드의 데몬들을 관리할 수 있어야 한다. Impala 서버에서는 2가지 요소를 활용한다.
- State Store(statestored): 상태 저장소이다. 데몬들이 여러 대의 노드에 존재하기 때문에, 이러한 데몬들의 상태를 모니터링하고 장애를 감지할 수 있어야 하는데, 그 역할을 한다.
- Catalog Service(catalogd): Impala SQL을 통해 메타데이터(Hive Metastore)가 변경되었을 때, 이를 전체 데몬들에게 전파해주는 역할을 한다.
- Catalog Service는 State Store를 통해 변경 사항을 전파하므로, 둘은 같은 노드(호스트)에 존재해야 한다.
참고 자료
Impala Concepts and Architecture
The following sections provide background information to help you become productive using Impala and its features. Where appropriate, the explanations include context to help understand how aspects of Impala relate to other technologies you might already b
impala.apache.org