Apache Impala 常用 CLI 命令与工具详解
Apache Impala 4.5.3 常用 CLI 与工具详解(bin/impala.sh 守护进程管理、impala-shell 建表查询、版本与进程诊断)及真实回显
Apache Impala 常用 CLI 命令与工具详解
目标:系统讲解 Apache Impala 4.5.3 日常运维与开发最常用的命令行工具——客户端
impala-shell(连接、非交互执行、交互命令、元数据管理、数据装载)、服务管理脚本impala.sh(start/stop/restart/status/health)、catalogd/statestored 的日志定位与 WebUI 命令,以及版本与进程诊断(impalad --version、jps/ps)。每个命令均给出可独立执行的形式与实测回显,全部命令与回显来自真实运行的 Impala 4.5.3 集群(impalad/statestored/catalogd 守护进程),已在 Ubuntu 22.04 服务器实测通过(/opt/impala,impala-shell 位于/opt/impala/shell/),为实际执行结果。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS,x86_64;Impala 4.5.3-RELEASE(build
b3e78704d824efd8f9ecb884d4aa1c09d4e12017) - 安装目录:
/opt/impala;impala-shell:/opt/impala/shell/impala-shell - 守护进程:
statestored、catalogd、impalad(另有admissiond) - 客户端连接默认走 HS2 端口 21050;Web UI
http://<host>:25000 - 管理账号:
root/admin,示例口令q1w2e3r4 - 全部命令与回显均来自上述真实环境的实际执行结果
二、前置条件
- 已部署 Impala 4.5.3 且三守护进程正常(见安装指南)。
- 执行 impala-shell 查询前,需确保 HDFS 与 Hive Metastore 可用(否则报"元数据/HDFS 不可用",见 FAQ)。
- 以下命令均以
root权限在/opt/impala下执行;每个命令可独立运行。
三、工具总览
| 工具 | 路径 | 用途 |
|---|---|---|
| impala-shell | /opt/impala/shell/impala-shell | 客户端:执行 SQL、管理元数据、导出结果(Python 脚本,依赖 python3) |
| impala.sh | /opt/impala/bin/impala.sh | 服务管理:启停/重启/状态/健康检查三类守护进程 |
| 守护进程二进制 | /opt/impala/sbin/impalad、catalogd、statestored | 直接命令行启动(生产一般经 impala.sh) |
| 版本查询 | /opt/impala/sbin/impalad --version | 查看守护进程版本 |
| Java 进程诊断 | jps、ps | 查看进程 PID、JVM 参数(堆) |
| HDFS 客户端 | /opt/hadoop/bin/hdfs | 准备/查看数据文件(LOAD DATA 前置) |
| WebUI | 25000/25010/25020 | impalad/statestored/catalogd 调试页面(curl 可脚本化) |
四、impala-shell 连接与协议
4.1 版本查看
/opt/impala/shell/impala-shell -v
真实回显:
Impala Shell v4.5.3-RELEASE (b3e7870) built on Tue Oct 6 22:36:19 UTC 2026
4.2 连接参数
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax
连接回显:
Starting Impala Shell with no authentication using Python 3.10.12
Warning: live_progress only applies to interactive shell sessions, and is being skipped for now.
Opened TCP connection to impalad:21000
Connected to impalad:21000
Server version: impalad version 4.5.3-RELEASE RELEASE (build b3e78704d824efd8f9ecb884d4aa1c09d4e12017)
关键连接选项(impala-shell --help 真实输出节选):
-i IMPALAD, --impalad=IMPALAD
<host:port> of impalad to connect to
[default: impalad]
-k, --kerberos Connect to a kerberized impalad [default: False]
-l, --ldap Use LDAP to authenticate with Impala. Impala must be
configured to allow LDAP authentication.
-d DEFAULT_DB, --database=DEFAULT_DB
Issues a use database command on startup
--protocol=PROTOCOL Network protocol (hs2 or beeswax)
协议要点:Impala 4.x 的 21000 端口是 Beeswax(Thrift 旧协议),21050 是 HS2。impala-shell 默认按 HS2 协议连接;连 21000 必须显式 --protocol=beeswax,否则报 Invalid method name: 'OpenSession'(实测错误)。两种方式等价:
# 方式一:Beeswax 协议连 21000
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "SHOW DATABASES;"
# 方式二:HS2 默认协议连 21050
/opt/impala/shell/impala-shell -i impalad:21050 -q "SHOW DATABASES;"
HS2 默认协议连接实测回显(示例主机 localhost):
cd /opt/impala/shell && ./impala-shell -i localhost -q "SHOW DATABASES;"
真实回显:
Starting Impala Shell with no authentication using Python 3.10.12
Warning: live_progress only applies to interactive shell sessions, and is being skipped for now.
Opened TCP connection to localhost:21050
Connected to localhost:21050
Server version: impalad version 4.5.3-RELEASE RELEASE (build b3e78704d824efd8f9ecb884d4aa1c09d4e12017)
Query: SHOW DATABASES
+------------------+----------------------------------------------+
| name | comment |
+------------------+----------------------------------------------+
| _impala_builtins | System database for Impala builtin functions |
| default | Default Hive database |
+------------------+----------------------------------------------+
Fetched 2 row(s) in 0.09s
五、非交互执行(脚本化)
5.1 -q 单条查询
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "SHOW DATABASES;"
真实回显:
Starting Impala Shell with no authentication using Python 3.10.12
Warning: live_progress only applies to interactive shell sessions, and is being skipped for now.
Opened TCP connection to impalad:21000
Connected to impalad:21000
Server version: impalad version 4.5.3-RELEASE RELEASE (build b3e78704d824efd8f9ecb884d4aa1c09d4e12017)
Query: SHOW DATABASES
+------------------+----------------------------------------------+
| name | comment |
+------------------+----------------------------------------------+
| _impala_builtins | System database for Impala builtin functions |
| default | Default Hive database |
+------------------+----------------------------------------------+
Fetched 2 row(s) in 0.02s
5.2 -f 查询文件(多语句,分号分隔)
printf 'SELECT 1;\nSELECT COUNT(*) FROM default.emp;\n' > /tmp/q.sql
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -f /tmp/q.sql --quiet
真实回显:
+---+
| 1 |
+---+
| 1 |
+---+
+----------+
| count(*) |
+----------+
| 3 |
+----------+
-f - 表示从 stdin 读取(配合管道):
echo "SELECT 1;" | /opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -f - --quiet
5.3 -o 结果输出到文件
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax --quiet \
-o /tmp/out.txt -q "SELECT dept, COUNT(*) c FROM default.emp GROUP BY dept ORDER BY dept;"
cat /tmp/out.txt
真实回显(文件内容):
+-------+---+
| dept | c |
+-------+---+
| Eng | 2 |
| Sales | 1 |
+-------+---+
多条语句(分号分隔)的结果会追加到同一文件。
5.4 -B 分隔符模式(报表/ETL 友好)
-B 去掉表格边框,字段间用制表符分隔(默认 \t),配 --print_header 输出列名:
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax --quiet \
-B --print_header -q "SELECT id, name, salary FROM default.emp ORDER BY id;"
真实回显:
id name salary
1 Alice 12000
2 Bob 9000
3 Carol 15000
自定义分隔符(--output_delimiter):
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax --quiet \
-B --print_header --output_delimiter=, -q "SELECT id, name FROM default.emp ORDER BY id LIMIT 2;"
真实回显:
id,name
1,Alice
2,Bob
5.5 -E 垂直输出(列多/值长时易读)
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax --quiet \
-E -q "SELECT id, name, salary FROM default.emp WHERE id=1;"
真实回显:
************************************** 1.row **************************************
id: 1
name: Alice
salary: 12000
5.6 -p 显示查询 Profile(执行细节)
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -p --quiet \
-q "SELECT COUNT(*) FROM default.emp;"
真实回显(节选):
Summary:
Max Per-Host Resource Reservation: Memory=8.00KB Threads=3
Per-Host Resource Estimates: Memory=10MB
Per Host Min Memory Reservation: impalad2:27000(8.00 KB) impalad:27000(0)
Cluster Memory Admitted: 20.00 MB
ExecSummary:
- MemoryAsk: 20.00 MB (20971520)
- MemoryMax: 8589934592.00 GB (9223372036854775807)
多节点集群中 Profile 会显示每个执行节点的资源占用(Per Host Min Memory Reservation 列出所有参与节点)。
5.7 其它常用选项
| 选项 | 说明 |
|---|---|
-i, --impalad=<host:port> | 指定 impalad 连接地址(默认 impalad) |
-q, --query=<SQL> | 非交互执行单条查询 |
-f, --query_file=<file> | 执行文件中以 ; 分隔的查询 |
-d <db> | 启动即 USE 指定数据库 |
-o <file> | 结果写文件 |
-B, --delimited | 分隔符(去表格)输出 |
--print_header | 分隔模式打印列名 |
-E, --vertical | 纵向输出 |
-c / --ignore_query_failure | 文件执行中遇到错误继续执行后续语句 |
-p / --show_profiles | 每次执行后打印 Profile |
--protocol=<hs2|hs2-http|beeswax> | 连接协议(默认 hs2,beeswax 弃用) |
-t | 连接超时毫秒(0 关闭),默认 60000 |
--var=KEY=VALUE / -Q KEY=VALUE | 会话变量 / 查询选项 |
--quiet | 去掉连接横幅与 Query 提示行,仅输出结果(脚本最常用) |
-V / --verbose | 详细输出(默认开) |
-s <service> | Kerberos 服务名(默认 impala) |
--ssl / -k / -b | SSL / Kerberos 认证相关 |
-j / -a | JWT / OAuth 认证 |
-v, --version | 打印版本 |
六、交互模式常用命令
不带 -q 启动即进入交互模式,[impalad:21000] > 提示符。常用内建命令:
| 命令 | 说明 |
|---|---|
help | 显示内建命令帮助 |
quit / exit | 退出 |
SET <k=v> / SET ALL | 查看/设置会话查询选项 |
SHOW ... | SHOW DATABASES/TABLES/COLUMNS/FUNCTIONS |
EXPLAIN <sql> | 显示执行计划 |
PROFILE | 显示上一条查询的 Profile |
INVALIDATE METADATA | 使全部元数据缓存失效 |
REFRESH <table> | 刷新指定表元数据 |
! <shell 命令> | 转义执行本机 shell 命令(如 ! date) |
history | 显示历史命令 |
交互示例(模拟 stdin 输入,真实回显):
printf 'SET mem_limit=2g;\nEXPLAIN SELECT * FROM default.emp;\nquit;\n' | \
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax
真实回显(节选):
Starting Impala Shell with no authentication using Python 3.10.12
...
[impalad:21000] > SET mem_limit=2g;
MEM_LIMIT set to 2g
[impalad:21000] > EXPLAIN SELECT * FROM default.emp;
Query: EXPLAIN SELECT * FROM default.emp
+-------------------------------------------------------+
| Explain String |
+-------------------------------------------------------+
| F00:PLAN FRAGMENT [UNPARTITIONED] |
| PLAN-ROOT SINK |
| 00:SCAN HDFS [default.emp] |
| HDFS partitions=1/1 files=1 size=1.11KB |
+-------------------------------------------------------+
[impalad:21000] > quit;
补充:交互式会话内可连续执行多条语句(HS2 连接时提示符形如 [localhost:21050] >);cd 与 shell 无关。
七、元数据管理命令
7.1 SHOW 系列
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "SHOW TABLES;" --quiet
真实回显:
+-----------+
| name |
+-----------+
| emp |
| emp_text2 |
+-----------+
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "SHOW CREATE TABLE default.emp;" --quiet
真实回显(节选):
+------------------------------------------------------------------------+
| result |
+------------------------------------------------------------------------+
| CREATE TABLE default.emp ( |
| id INT, |
| name STRING, |
| dept STRING, |
| salary INT |
| ) |
| STORED AS PARQUET |
| LOCATION 'hdfs://impalad:9000/user/hive/warehouse/emp' |
| TBLPROPERTIES ('OBJCAPABILITIES'='EXTREAD,EXTWRITE', 'accessType'='8') |
+------------------------------------------------------------------------+
建库与空表查询(另一会话实测):
cd /opt/impala/shell && ./impala-shell -i localhost -q "SHOW TABLES;"
cd /opt/impala/shell && ./impala-shell -i localhost -q "CREATE DATABASE IF NOT EXISTS demo;"
SHOW TABLES(空表时)实测回显:
Query: SHOW TABLES
Fetched 0 row(s) in 0.04s
7.2 INVALIDATE METADATA(全量失效)
外部(如 Hive 直建表、直接往 HDFS 写数据)修改元数据后,需要让 Impala 重新从 HMS 加载:
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "INVALIDATE METADATA;"
真实回显:
Query: INVALIDATE METADATA
Query submitted at: 2026-10-07 11:52:36 (Coordinator: http://impalad:25000)
Query state can be monitored at: http://impalad:25000/query_plan?query_id=84483a1fe98e96ba:230e73f400000000
Fetched 0 row(s) in 5.60s
也可以只失效某个库表:INVALIDATE METADATA default.emp;。
7.3 REFRESH(增量刷新)
仅刷新指定表的分区与文件列表(开销小,适合数据文件新增/删除):
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "REFRESH default.emp;"
真实回显:
Query: REFRESH default.emp
Query submitted at: 2026-10-07 11:52:42 (Coordinator: http://impalad:25000)
Query state can be monitored at: http://impalad:25000/query_plan?query_id=d5400e1454734c36:8d04f8f900000000
Fetched 0 row(s) in 0.12s
选用原则:表结构(列/分区)变更用 INVALIDATE;仅数据文件变化用 REFRESH。集中式目录模式下二者都会广播到全部节点。
八、数据写入与装载
8.1 建表、INSERT 写入与查询
以下为另一套 emp 表(salary 为 DECIMAL(10,2),与前文非交互示例中的 emp 表无关)的建表、写入与查询实测。
建表(Parquet 存储,独立命令):
cd /opt/impala/shell && ./impala-shell -i localhost \
-q "CREATE TABLE IF NOT EXISTS emp (id INT, name STRING, dept STRING, salary DECIMAL(10,2)) STORED AS PARQUET;"
实测回显:
Query: CREATE TABLE IF NOT EXISTS emp (id INT, name STRING, dept STRING, salary DECIMAL(10,2)) STORED AS PARQUET
+-------------------------+
| summary |
+-------------------------+
| Table has been created. |
+-------------------------+
Fetched 1 row(s) in 1.28s
写入:
cd /opt/impala/shell && ./impala-shell -i localhost \
-q 'INSERT INTO emp VALUES (1, "Alice", "Eng", 9500.00), (2, "Bob", "Sales", 8000.50), (3, "Cindy", "Eng", 8800.00);'
实测回显:
Query: INSERT INTO emp VALUES (1, "Alice", "Eng", 9500.00), (2, "Bob", "Sales", 8000.50), (3, "Cindy", "Eng", 8800.00)
Query submitted at: 2026-10-11 09:06:47 (Coordinator: http://localhost:25000)
Query state can be monitored at: http://localhost:25000/query_plan?query_id=c94ebfc7ae5cf0b7:8c4748ee00000000
Modified 3 row(s) in 14.11s
聚合查询:
cd /opt/impala/shell && ./impala-shell -i localhost \
-q "SELECT dept, COUNT(*) AS cnt, SUM(salary) AS total FROM emp GROUP BY dept;"
实测回显:
Query: SELECT dept, COUNT(*) AS cnt, SUM(salary) AS total FROM emp GROUP BY dept
+-------+-----+----------+
| dept | cnt | total |
+-------+-----+----------+
| Eng | 2 | 18300.00 |
| Sales | 1 | 8000.50 |
+-------+-----+----------+
Fetched 2 row(s) in 1.38s
表结构查看:
cd /opt/impala/shell && ./impala-shell -i localhost -q "DESCRIBE emp;"
实测回显:
Query: DESCRIBE emp
+--------+---------------+---------+
| name | type | comment |
+--------+---------------+---------+
| id | int | |
| name | string | |
| dept | string | |
| salary | decimal(10,2) | |
+--------+---------------+---------+
Fetched 4 row(s) in 0.10s
8.2 LOAD DATA 装载(HDFS 文件)
从 HDFS 把文本文件装载进 Impala 表(移动文件语义,源目录需写权限)。
准备 HDFS 数据文件:
export HADOOP_HOME=/opt/hadoop
printf '4,Dave,Eng,18000\n5,Eve,Sales,11000\n' > /tmp/emp_text2.txt
/opt/hadoop/bin/hdfs dfs -mkdir -p /tmp/emp_data2
/opt/hadoop/bin/hdfs dfs -put -f /tmp/emp_text2.txt /tmp/emp_data2/
/opt/hadoop/bin/hdfs dfs -chmod -R 777 /tmp/emp_data2
建文本表:
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax \
-q "CREATE TABLE default.emp_text2 (id INT, name STRING, dept STRING, salary INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY \",\" STORED AS TEXTFILE;"
真实回显:
Query: CREATE TABLE default.emp_text2 (id INT, name STRING, dept STRING, salary INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY "," STORED AS TEXTFILE
+-------------------------+
| summary |
+-------------------------+
| Table has been created. |
+-------------------------+
Fetched 1 row(s) in 0.22s
LOAD DATA:
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax \
-q "LOAD DATA INPATH \"/tmp/emp_data2/emp_text2.txt\" INTO TABLE default.emp_text2;"
真实回显:
Query: LOAD DATA INPATH "/tmp/emp_data2/emp_text2.txt" INTO TABLE default.emp_text2
+----------------------------------------------------------+
| summary |
+----------------------------------------------------------+
| Loaded 1 file(s). Total files in destination location: 1 |
+----------------------------------------------------------+
Fetched 1 row(s) in 4.52s
查询验证:
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax -q "SELECT * FROM default.emp_text2;" --quiet
真实回显:
+----+------+-------+--------+
| id | name | dept | salary |
+----+------+-------+--------+
| 4 | Dave | Eng | 18000 |
| 5 | Eve | Sales | 11000 |
+----+------+-------+--------+
Fetched 2 row(s) in 0.13s
常见报错:AnalysisException: Unable to LOAD DATA ... because Impala does not have WRITE permissions on its parent directory——源文件父目录缺写权限,用 hdfs dfs -chmod -R 777 <dir> 解决(LOAD 是移动文件,需要源目录写权限)。
九、impala.sh 服务管理命令
9.1 用法与帮助
/opt/impala/bin/impala.sh <command> [<options>] <service> [<flags>]
| command | 说明 |
|---|---|
start <service> | 启动服务(轮询就绪,默认 20 次 × 2s) |
stop <service> | 优雅停止(等待退出,默认 40s 超时) |
stop -f <service> | 强制停止 |
restart <service> | 重启 |
status <service> | 状态(依据 PID 文件与进程存活) |
health <service> | 健康检查 |
service 取值:statestored、catalogd、impalad、admissiond。
--help 实测回显:
cd /opt/impala && ./bin/impala.sh --help
Usage: ./bin/impala.sh <command> [<options>] <service> [<flags>]
./bin/impala.sh --version
./bin/impala.sh --help
command: {start|stop|restart|status|health}
service: {impalad|catalogd|admissiond|statestored}
flags: in pattern '-key=val……'.
start: start an Impala daemon service, wait until service is ready.
options:
-c: maximum count of checks, defaults to 20.
-p: seconds of period between checks, defaults to 2.
stop: stop an Impala daemon service, wait until service is stopped.
options:
-c: maximum count of checks, defaults to 20.
-f: force kill a daemon service.
-g: graceful shutdown the impalad service.
-p: seconds of period between checks, defaults to 2.
restart: restart an Impala daemon service.
9.2 启动与停止(start / stop)
启动各守护进程(statestored → catalogd → impalad 依序):
cd /opt/impala && ./bin/impala.sh start statestored
cd /opt/impala && ./bin/impala.sh start catalogd
cd /opt/impala && ./bin/impala.sh start impalad
启动 impalad 实测回显:
Using JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
Using hadoop native libs in '/opt/hadoop/lib/native'
Service stdout is redirected to '/tmp/impalad.out'.
Service stderr is redirected to '/tmp/impalad.err'.
(1/20) impalad on port 25000 is not ready.
(2/20) impalad on port 25000 is not ready.
(3/20) Waiting for impalad to be ready.
(4/20) impalad is ready.
[impalad] impalad 已启动
停止(支持 -g 优雅关停 impalad、-f 强制):
cd /opt/impala && ./bin/impala.sh stop impalad
cd /opt/impala && ./bin/impala.sh stop catalogd
cd /opt/impala && ./bin/impala.sh stop statestored
示范 -g 优雅停 impalad:
cd /opt/impala && ./bin/impala.sh -g stop impalad
9.3 status(真实回显)
impala.sh 只查询本机 PID 文件,须在运行对应守护进程的主机上执行(本文环境为单机部署,三个守护进程同机):
/opt/impala/bin/impala.sh status statestored
/opt/impala/bin/impala.sh status catalogd
/opt/impala/bin/impala.sh status impalad
真实回显:
statestored is running with PID 30.
catalogd is running with PID 32.
impalad is running with PID 1213.
9.4 health(真实回显)
cd /opt/impala && ./bin/impala.sh health impalad
实测回显:
(1/20) impalad is ready.
9.5 restart(真实回显)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
/opt/impala/bin/impala.sh restart impalad
真实回显:
Using JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
Using hadoop native libs in '/opt/hadoop/lib/native'
Service stdout is redirected to '/tmp/impalad.out'.
Service stderr is redirected to '/tmp/impalad.err'.
(1/20) impalad on port 25000 is not ready.
(2/20) impalad is ready.
impalad is running with PID 1213.
9.6 PID 文件机制与僵尸处理
impala.sh 通过 /tmp/impalad.pid、/tmp/catalogd.pid、/tmp/statestored.pid 记录进程号。已知坑(实测):进程被信号中断未及时退出时会留下 <defunct> 僵尸条目,PID 文件仍在,导致 status 误报 running 且 start 拒绝再启。处理:
ps -o pid,ppid,state,comm -p <pid> # 确认 Z 状态
rm -f /tmp/impalad.pid # 删除 PID 文件解除阻塞
/opt/impala/bin/impala.sh start impalad
重启服务器即可清空僵尸条目。
9.7 直接启动守护进程(绕过脚本)
需要自定义参数时可直接执行二进制(示例):
LD_LIBRARY_PATH=/opt/impala/lib/native:/usr/lib/jvm/java-17-openjdk-amd64/lib/server \
/opt/impala/sbin/impalad --flagfile=/opt/impala/conf/impalad_flags
查看实际生效参数:
ps aux | grep impalad | grep -v grep | tr ' ' '\n' | grep '^-'
真实回显(节选):
-hostname=impalad
-catalog_service_host=catalogd
-state_store_host=statestored
-mem_limit=3072m
-v=1
-log_filename=impalad
-max_log_files=10
-max_log_size=200
-use_local_catalog=false
十、catalogd / statestored 管理命令
10.1 日志定位
日志文件位于 /tmp/ 下(out/err 重定向目录),命名规则 <前缀>.<主机名>.<级别>.<时间戳>.<pid>:
# 列出 impalad 日志
ls /tmp/impalad*.log.*
真实回显:
/tmp/impalad.impalad.invalid-user.log.ERROR.20261007-113151.47
/tmp/impalad.impalad.invalid-user.log.INFO.20261007-113151.47
/tmp/impalad.impalad.invalid-user.log.WARNING.20261007-113151.47
排障顺序:ERROR 文件(JVM 栈、URI 异常、HMS 连接失败)→ INFO 文件的启动里程碑。
catalogd 连接 HMS 成功标志:
grep -E "Connected to metastore" /tmp/catalogd.*.log.INFO.* | head -1
真实回显:
I1007 11:31:43.652539 32 HiveMetaStoreClient.java:570] Connected to metastore.
statestored 注册与主题标志:
grep -E "registered|Preparing initial catalog-update" /tmp/statestored.*.log.INFO.* | tail -2
真实回显:
I1007 11:31:54.434285 85 statestore.cc:570] Subscriber 'impalad@impalad:27000' with type COORDINATOR AND EXECUTOR registered (registration id: d84eecce869396c7:69384375fe5694a3)
I1007 11:31:54.434413 44 statestore.cc:515] Preparing initial catalog-update topic update for impalad@impalad:27000. Size = 259.00 B
impalad 启动成功标志:
grep -E "Impala has started" /tmp/impalad.*.log.INFO.* | head -1
10.2 WebUI 运维命令(curl 脚本化)
| 命令 | 内容 |
|---|---|
curl -s http://impalad:25000/backends | 注册的执行节点列表 |
curl -s http://impalad:25000/queries | 运行/历史查询 |
curl -s http://statestored:25010/topics | 目录主题大小与订阅者 |
curl -s http://statestored:25010/healthz | statestored 健康状态 |
curl -s http://catalogd:25020/catalog | catalogd 表缓存统计 |
示例(已注册后端,真实回显):
curl -s http://impalad:25000/backends | grep -oE "impalad[0-9]*:[0-9]+" | sort -u
impalad:25000
impalad:27000
impalad2:25000
impalad2:27000
10.3 端口探测(无 nc 时)
for hp in impalad:21000 impalad:21050 statestored:24000 catalogd:26000; do
h=${hp%%:*}; p=${hp##*:}
timeout 2 bash -c "echo > /dev/tcp/$h/$p" 2>/dev/null && echo "$hp OPEN" || echo "$hp CLOSED"
done
真实回显:
impalad:21000 OPEN
impalad:21050 OPEN
statestored:24000 OPEN
catalogd:26000 OPEN
十一、版本与进程诊断
11.1 守护进程版本
cd /opt/impala && LD_LIBRARY_PATH=/opt/impala/lib/native:/usr/lib/jvm/java-17-openjdk-amd64/lib/server \
/opt/impala/sbin/impalad --version
实测回显:
Impala version 4.5.3-RELEASE RELEASE (build b3e78704d824efd8f9ecb884d4aa1c09d4e12017)
11.2 进程与 JVM 参数
jps -v
实测回显(impalad/catalogd 为 JVM 进程,堆 -Xms256m -Xmx512m;statestored 为纯 C++ 不在此列):
35 impalad -Xms256m -Xmx512m -javaagent:/opt/impala/lib/jars/jamm-0.4.0.jar --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util.regex=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED -Djava.library.path=/opt/hadoop/lib/native
32 catalogd -Xms256m -Xmx512m -javaagent:/opt/impala/lib/jars/jamm-0.4.0.jar ……
ps -eo pid,rss,args | grep [i]mpalad
实测回显:
35 319664 /opt/impala/sbin/impalad --flagfile=/opt/impala/conf/impalad_flags
十二、脚本化运维示例
12.1 批量导出表数据为 CSV
#!/bin/bash
DB=default
TABLES=$(/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax \
--quiet -B -q "SHOW TABLES IN $DB;" | tr -d ' ')
for t in $TABLES; do
/opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax \
--quiet -B --print_header --output_delimiter=, \
-o "/tmp/${DB}_${t}.csv" -q "SELECT * FROM $DB.$t;"
done
ls -la /tmp/default_*.csv
12.2 定时刷新表元数据(crontab)
# 每 5 分钟刷新一次 emp 表(外部 ETL 写 HDFS 后)
*/5 * * * * /opt/impala/shell/impala-shell -i impalad:21000 --protocol=beeswax \
--quiet -q "REFRESH default.emp;" >> /var/log/impala_refresh.log 2>&1
12.3 集群状态巡检
for c in statestored catalogd impalad; do
echo "== $c =="
/opt/impala/bin/impala.sh status $c
done
curl -s http://impalad:25000/backends | grep -c "impalad[0-9]*:27000"
十三、已知限制与排查思路
- 协议不匹配:连 21000 不带
--protocol=beeswax报Invalid method name: 'OpenSession';连 21050 无需指定。 - Beeswax 弃用:Beeswax 协议(21000)已弃用,新客户端统一走 HS2(21050)。
- python3 缺失:
impala-shell: line 40: python3: command not found,安装 python3(版本 3.10+)。 - LOAD DATA 权限:报
does not have WRITE permissions on its parent directory,hdfs dfs -chmod -R 777 <dir>。 - restart 超时:实测
restart impalad偶发Timed out waiting impalad to stop并遗留僵尸进程,删 PID 文件重新 start 即可。 - impalad 未就绪:
impala.sh start impalad持续impalad on port 25000 is not ready时,检查 catalogd 是否先就绪、目录主题 Size 是否 >0。 - 安全说明:Impala 4.5.3 默认无认证,任何能到达 21000/21050 的客户端均可执行 SQL;生产启用 LDAP/Kerberos 与 TLS。系统管理凭据:root / q1w2e3r4(演示环境专用)。
- 登录/鉴权选项:impala-shell 默认无认证(
no authentication);接入 Kerberos/LDAP 时用-k/-b/--ssl等方式,见impala-shell --help。 - 命令行历史:
-f文件内多条 SQL 用;分隔;敏感信息请勿明文写入命令行历史。
十四、常见问题(FAQ)
Q1:impala-shell 报"could not connect"?
确认 impalad 已 ready(bin/impala.sh health impalad)且 21050 端口可达;-i 指定 host:port 需与实际地址一致。
Q2:SHOW DATABASES 提示元数据/Hive Metastore 不可用?
Impala 查询依赖 Hive Metastore 与 HDFS;先确认 catalogd 的 -hive_metastore_uris 指向的 9083 已启动、HDFS 在线,再重试。
Q3:INSERT/SELECT 很慢?
单节点伪集群首次写入含 HDFS 落盘与 catalog 同步开销;生产关注 -mem_limit、副本数、并行度。
Q4:如何快速确认版本?
客户端 impala-shell --version;服务端 impalad --version 或在 SHOW DATABASES 回显的 Server version: 行查看。
十五、参考链接
- Apache Impala 官网:https://impala.apache.org/
- Apache Impala 官方文档:https://impala.apache.org/impala-docs.html