Apache Impala는 분산 SQL 쿼리 엔진으로, Hadoop과 통합되어 빠른 쿼리 성능을 제공합니다.
Impala는 여러 구성 요소로 나뉘어져 있으며, 각 구성 요소는 특정 기능을 수행하여 전체 쿼리 처리를 지원합니다.
기존 스토리지 시스템과 달리 스토리지 엔진과 분리되어 있습니다.
아키텍처

Impala State Store (Statestore)
Impala 클러스터의 노드 상태를 관리하는 역할을 합니다.
설명: Statestore는 Impala의 여러 노드들 사이에서 메타데이터와 상태 정보를 주기적으로 교환하여,
노드가 가용한지 여부와 클러스터 전체의 상태를 유지합니다.
Impala Catalog (Catalog Server)
메타데이터를 관리하고 쿼리 계획에 필요한 데이터를 제공하는 역할을 합니다.
Catalog 서버는 Impala에서 데이터베이스, 테이블, 뷰, 컬럼 등의 메타데이터 정보를 캐싱하고 제공합니다.
Impala Coordinator (코디네이터)
클라이언트의 쿼리를 수신하고 실행 계획을 수립하는 역할을 합니다.
Impala에서 쿼리를 실행할 때, 클라이언트는 Coordinator 노드에 쿼리를 제출합니다.
Coordinator는 쿼리를 분석하고 실행 계획을 생성한 다음,
실행 계획을 여러 Executor 노드에 배포하여 병렬로 작업을 수행하게 합니다.
Impala Executor (실행자, Worker 노드)
Coordinator가 전달한 쿼리 실행 계획을 기반으로 데이터를 처리하는 역할을 합니다.
각 Executor는 데이터에 접근하여 필요한 연산을 수행하고,
중간 결과를 Coordinator나 다른 Executor로 전달합니다.
여러 Executor가 협력하여 병렬 처리 및 분산 쿼리 실행을 가능하게 하므로,
대용량 데이터에 대한 빠른 처리가 가능합니다.
Query 실행 예제
SQL과 대부분 동일한 커맨드를 가집니다.
- explain
- profile
- alter
- describe
- drop
- insert
- select
- show
- use
Profile
최근 실행된 쿼리에 대한 저수준(low-level) 정보를 표시합니다.
주로 쿼리 성능을 분석하거나 문제를 진단하는 데 사용됩니다.
EXPLAIN SELECT * FROM my_table WHERE id = 1;
PROFILE;
# 출력 예제
Query Runtime Profile:
Query (id=164b1294a1049189:a67598a6699e3ab6):
Summary:
Session ID: e74927207cd752b5:65ca61e630ad3ad
Session Type: BEESWAX
Start Time: 2016-04-17 23:49:26.08148000 End Time: 2016-04-17 23:49:26.2404000
Query Type: EXPLAIN
Query State: FINISHED
Query Status: OK
Impala Version: impalad version 2.3.0-cdh5.5.0 RELEASE (build 0c891d77280e2129b)
User: cloudera
Connected User: cloudera
Delegated User:
Network Address:10.0.2.15:43870
Default Db: my_db
Sql Statement: explain select * from sample
Coordinator: quickstart.cloudera:22000
: 0ns
Query Timeline: 167.304ms
- Start execution: 41.292us (41.292us) - Planning finished: 56.42ms (56.386ms)
- Rows available: 58.247ms (1.819ms)
- First row fetched: 160.72ms (101.824ms)
- Unregister query: 166.325ms (6.253ms)
ImpalaServer:
- ClientFetchWaitTimer: 107.969ms
- RowMaterializationTimer: 0ns
Explain
주어진 쿼리에 대한 실행계획을 출력합니다.
[quickstart.cloudera:21000] > explain select * from sample;
Query: explain select * from sample
+------------------------------------------------------------------------------------+
| Explain String |
+------------------------------------------------------------------------------------+
| Estimated Per-Host Requirements: Memory = 48.00MB VCores = 1 |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| my_db.customers |
| 01:EXCHANGE [UNPARTITIONED] |
| 00:SCAN HDFS [my_db.customers] |
| partitions = 1/1 files = 6 size = 148B |
+------------------------------------------------------------------------------------+
Fetched 7 row(s) in 0.17s
Describe
테이블의 메타데이터를 조회하는 데 사용됩니다.
DESCRIBE new_table;
+-------------+------------+----------+
| name | type | comment |
+-------------+------------+----------+
| new_column | INT | NULL |
+-------------+------------+----------+
Insert
데이터를 테이블에 추가하거나 기존 데이터를 덮어쓸 때 사용됩니다.
INSERT INTO my_table VALUES (1, 'value1'), (2, 'value2');
# 또는
INSERT OVERWRITE my_table SELECT * FROM another_table;
# 출력
Query: insert into my_table
Inserted 2 rows
# SELECT * FROM my_table; 실행 시:
+----+--------+
| id | name |
+----+--------+
| 1 | value1 |
| 2 | value2 |
+----+--------+
데이터 타입
BIGINT
숫자를 저장하는 데 사용되는 데이터 타입입니다.
8바이트 크기로, -9223372036854775808 ~ 9223372036854775807 범위의 값을 저장할 수 있습니다.
BOOLEAN
TRUE 또는 FALSE 값을 저장합니다.
CHAR
고정 길이 문자열을 저장하며, 길이가 설정된 크기에 맞게 공백으로 패딩됩니다.
최대 255 문자까지 저장할 수 있습니다.
DECIMAL
소수점 값을 저장합니다.
CREATE TABLE example_table (price DECIMAL(10, 2));
DOUBLE
부동소수점 값을 저장합니다.
값 범위: ±4.94065645841246544e-324 ~ ±1.79769313486231570e+308.
CREATE TABLE example_table (measurement DOUBLE);
FLOAT
부동소수점 값을 저장합니다.
값 범위: ±1.40129846432481707e-45 ~ ±3.40282346638528860e+38.
INT
4바이트 크기의 정수를 저장합니다.
값 범위: -2147483648 ~ 2147483647.
SMALLINT
2바이트 크기의 정수를 저장합니다.
값 범위: -32768 ~ 32767.
CREATE TABLE example_table (year SMALLINT);
STRING
문자열 값을 저장합니다.
TIMESTAMP
특정 시점(날짜 및 시간)을 나타냅니다.
TINYINT
1바이트 크기의 정수를 저장합니다.
값 범위: -128 ~ 127.
VARCHAR
가변 길이 문자열을 저장하며, 최대 65,535 문자까지 저장할 수 있습니다.
ARRAY
순서가 있는 여러 개의 요소를 저장할 수 있는 데이터 타입입니다.
CREATE TABLE example_table (tags ARRAY<STRING>);
MAP
키-값 쌍을 저장하는 데이터 타입입니다.
CREATE TABLE example_table (properties MAP<STRING, STRING>);
STRUCT
단일 항목의 여러 필드를 표현하기 위해 사용됩니다.
CREATE TABLE example_table (address STRUCT<street:STRING, city:STRING, zipcod
참조 :
https://impala.apache.org/docs/build/html/topics/impala_tutorial.html
https://www.tutorialspoint.com/impala/impala_quick_guide.htm