Apache Amoro 0.8.1-incubating 常用 CLI 命令与工具详解
Apache Amoro 0.8.1-incubating 常用 CLI 命令与工具详解:bin/ams.sh 六个子命令全生命周期实测、bin/optimizer.sh 独立优化器管理、curl 调用 /api/ams/v1 REST(登录会话与 basic 两种鉴权)、jps/netstat 进程端口诊断,命令与回显均实测
Apache Amoro 0.8.1-incubating 常用 CLI 命令与工具详解
目标:详解 Apache Amoro 0.8.1-incubating AMS 的常用命令行工具——
bin/ams.sh服务生命周期管理、bin/optimizer.sh独立优化器管理、curl调用 REST API(Web 会话与 Basic 两种鉴权)、jps/netstat进程与端口诊断。所有命令与回显均为真实环境实测。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS
- Java:OpenJDK 11.0.32.1
- Apache Amoro:0.8.1-incubating(bin-hadoop3,版本号实测
0.8.1-incubating(bc906c0)) - 安装目录:
/opt/amoro - 服务脚本:
/opt/amoro/bin/ams.sh、/opt/amoro/bin/optimizer.sh - 服务端口:1630(HTTP)/ 1260(表服务)/ 1261(优化服务)
- 管理账号:admin / q1w2e3r4
- 运行方式:本文演示在 systemd 停止状态下直接用 ams.sh 管理进程(两种托管方式的命令差异见 4.1 末尾)
二、工具概览
| 工具 | 位置 | 用途 |
|---|---|---|
ams.sh | /opt/amoro/bin/ | AMS 启停/状态/进程号管理(start、stop、restart、status、pid、start-foreground) |
optimizer.sh | /opt/amoro/bin/ | 独立 optimizer 进程管理(可选高级功能) |
curl | 系统命令 | 调用 /api/ams/v1/ REST 接口(登录、目录、概览、健康检查等) |
jps | JDK 自带 | 查看 AMS Java 进程及 JVM 参数生效值 |
netstat | net-tools 包 | 校验 1630/1260/1261 端口监听 |
| 日志文件 | /opt/amoro/logs/ | ams-info.log/ams-error.log/gc.log 排障 |
三、前置条件
- 已按《Apache Amoro 0.8.1-incubating 安装指南》完成安装:
/opt/amoro就绪,JDK 8/11 已装(含jps),net-tools已装。 - 已完成首启前的关键配置(管理员密码、derby 路径、JVM 堆 256-512MB)。
- 若 AMS 由 systemd 托管,演示 ams.sh 前先停止服务避免二者互相干扰:
systemctl stop amoro-ams
systemctl is-active amoro-ams
inactive
四、工具详解
4.1 ams.sh 服务管理
bin/ams.sh 是 AMS 的主管理脚本,用 help 查看用法:
/opt/amoro/bin/ams.sh help
Usage /opt/amoro/bin/ams.sh start|start-foreground|stop|restart|status|pid
| 子命令 | 说明 |
|---|---|
start | 后台启动(nohup 方式),日志写 /opt/amoro/logs/,pid 记录到 /opt/amoro/run/app.pid |
start-foreground | 前台启动,输出直接打到当前终端(Ctrl+C 即退出) |
stop | 停止服务 |
restart | 先停后启 |
status | 输出 running. 或 not running. |
pid | 输出记录在 pid 文件中的进程号 |
启动服务:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
/opt/amoro/bin/ams.sh start
starting app server.
process start success.
查看状态与进程号(启动完成约需 10-20 秒):
/opt/amoro/bin/ams.sh status
/opt/amoro/bin/ams.sh pid
jps -l | grep -v Jps
running.
2037
2037 org.apache.amoro.server.AmoroServiceContainer
ams.sh pid 输出与 jps 看到的 AmoroServiceContainer 进程号一致,说明记录无误。重启与停止:
/opt/amoro/bin/ams.sh restart
stop success.
process start success.
/opt/amoro/bin/ams.sh pid
2251
重启后进程号从 2037 变为 2251,服务继续 running.。停止:
/opt/amoro/bin/ams.sh stop
/opt/amoro/bin/ams.sh status
stopping app server.
stop success.
not running.
💡 说明:
start-foreground用于调试,输出可见 derby 初始化建表 SQL 与Http server start at 1630.;生产托管二选一——systemd 场景(systemctl start/stop/restart amoro-ams,单元文件见《安装指南》4.8 节)与脚本场景不要混用,混用会出现 6.1 的状态错乱。
4.2 optimizer.sh 独立优化器管理
bin/optimizer.sh 管理内置的独立 optimizer(StandaloneOptimizer,可选高级功能;对接 Flink/Spark 集群时才需要启用,普通 AMS 使用可跳过本节)。用 help 查看用法:
bash /opt/amoro/bin/optimizer.sh help
Usage: /opt/amoro/bin/optimizer.sh {start|start-foreground|stop|status|pid} <memory_limit_in_MB> [additional_args]
| 子命令 | 说明 |
|---|---|
start <内存MB> | 后台启动一个 optimizer 进程,堆大小由 <memory_limit_in_MB> 指定(如 512) |
start-foreground <内存MB> | 前台启动 |
stop / status / pid | 停止/状态/进程号 |
日志写到 /opt/amoro/logs/optimizer-<时间戳>/optimizer.log.err。检查 optimizer 进程用 jps 最可靠:
jps -l | grep -v Jps
(无 optimizer 运行时仅显示 AMS 进程;启动后会出现 org.apache.amoro.optimizer.standalone.StandaloneOptimizer 行。)
⚠️ 注意:0.8.1 的
optimizer.sh status/pid存在脚本缺陷,未运行 optimizer 时会报error: process ID list syntax error(见 6.3),以jps -l的输出为准。
4.3 curl 调用 REST API
AMS REST 接口前缀为 /api/ams/v1/。免登录白名单接口可直接访问:
curl -s http://127.0.0.1:1630/api/ams/v1/versionInfo
curl -s http://127.0.0.1:1630/api/ams/v1/health/status
{"message":"success","code":200,"result":{"version":"0.8.1-incubating(bc906c0)","commitTime":"2025-08-28T08:55:33+0800"}}
{"message":"success","code":200,"result":null}
业务接口需要登录。方式一:Web 会话(与控制台登录同款),先登录拿会话 Cookie:
curl -s -c /tmp/amoro-cookie.txt -X POST http://127.0.0.1:1630/api/ams/v1/login \
-H "Content-Type: application/json" -H "X-Request-Source: Web" \
-d '{"user":"admin","password":"q1w2e3r4"}'
{"message":"success","code":200,"result":"success"}
随后带 Cookie 与 X-Request-Source: Web 头访问业务接口(目录列表、概览汇总、当前登录用户):
curl -s -b /tmp/amoro-cookie.txt -H "X-Request-Source: Web" http://127.0.0.1:1630/api/ams/v1/catalogs
curl -s -b /tmp/amoro-cookie.txt -H "X-Request-Source: Web" http://127.0.0.1:1630/api/ams/v1/login/current
curl -s -b /tmp/amoro-cookie.txt -H "X-Request-Source: Web" http://127.0.0.1:1630/api/ams/v1/overview/summary
{"message":"success","code":200,"result":[]}
{"message":"success","code":200,"result":{"userName":"admin","loginTime":"1791861673624"}}
{"message":"success","code":200,"result":{"catalogCnt":0,"tableCnt":0,"tableTotalSize":0,"totalCpu":0,"totalMemory":0}}
方式二:HTTP Basic(需将 config.yaml 的 ams.http-server.rest-auth-type 改为 basic 并重启,实测):
curl -s -u admin:q1w2e3r4 http://127.0.0.1:1630/api/ams/v1/catalogs
{"message":"success","code":200,"result":[]}
未登录/密码错误时的实测回显(token 模式):
{"message":"Please login first","code":403,"requestId":""}
{"message":"Signature check failed","code":403,"requestId":""}
常用业务接口速查(均需登录会话或 Basic):
| 接口 | 方法 | 说明 |
|---|---|---|
/api/ams/v1/login | POST | 登录,body 为 {"user":"admin","password":"q1w2e3r4"} |
/api/ams/v1/login/current | GET | 当前登录用户与登录时间 |
/api/ams/v1/logout | POST | 退出登录 |
/api/ams/v1/catalogs | GET | catalog 列表 |
/api/ams/v1/overview/summary | GET | 首页概览汇总(目录数/表数/CPU/内存) |
/api/ams/v1/versionInfo | GET | 版本信息(免登录) |
/api/ams/v1/health/status | GET | 健康检查(免登录) |
4.4 Web 控制台访问
浏览器打开 http://<服务器IP>:1630/,即 Apache Amoro 控制台(页面标题实测为 Apache Amoro™ Dashboard),用 admin / q1w2e3r4 登录后可进行目录管理、表优化状态查看、SQL 终端等操作。控制台的登录走的就是 4.3 的 /api/ams/v1/login 会话机制,脚本登录拿到的 Cookie 与浏览器会话等价。
curl -s http://127.0.0.1:1630/ | grep -oE '<title>[^<]*</title>'
<title>Apache Amoro™ Dashboard</title>
4.5 进程、端口与日志诊断
确认 JVM 参数实际生效(本文堆限制 256-512MB):
jps -lv | grep AmoroServiceContainer | grep -oE '\-Xms[0-9]+m -Xmx[0-9]+m'
-Xms256m -Xmx512m
确认端口监听:
netstat -tlnp | grep -E '1630|1260|1261'
tcp6 0 0 :::1630 :::* LISTEN 2037/java
tcp6 0 0 :::1260 :::* LISTEN 2037/java
tcp6 0 0 :::1261 :::* LISTEN 2037/java
日志文件速查(/opt/amoro/logs/):
| 文件 | 用途 |
|---|---|
ams-info.log | 主日志,启动完成标志 Http server start at 1630. |
ams-error.log | 错误日志,排障第一入口 |
ams-debug.log | 调试日志(默认未启用输出) |
gc.log | GC 日志(ams.sh 内置参数固定输出) |
amoro-metrics.log | Iceberg 指标日志 |
服务不监听时优先看 ams-error.log 末尾:
tail -20 /opt/amoro/logs/ams-error.log
五、注意事项
- ams.sh 依赖 pid 文件
/opt/amoro/run/app.pid判断状态;与 systemd 混用会造成状态错乱(见 6.1),一种环境只用一种托管方式。 start-foreground前台运行时终端 Ctrl+C 会直接终止服务,仅用于调试。- REST 鉴权默认
token模式,脚本直调业务接口必须先走会话登录或切换 basic 模式;白名单接口只有 versionInfo、health/status、login、login/current 等少数几个。 - optimizer.sh 的 start 需要显式传内存参数(如
optimizer.sh start 512),缺省会启动失败。 - 修改任何配置后需重启 AMS 才生效,重启后用
jps -v与端口检查双重复核。
六、常见问题
6.1 ams.sh stop 报 stop failed 但进程已停止
现象:ams.sh stop 输出:
stopping app server.
stop failed. process is still running.
但 jps -l 里 AmoroServiceContainer 已消失。
定位:stop 后脚本立刻检查进程存活,进程尚在退出过程中即被误判;若同时由 systemd 托管(Restart=on-failure),systemd 还会立刻把进程拉起来,进一步造成 start 报 alreadly running. start app failed.(该拼写为脚本原文)。
解决:systemd 场景一律用 systemctl stop/start/restart amoro-ams;纯脚本场景先 ams.sh stop,等 3 秒再用 ams.sh status 确认 not running. 后再做后续操作。
6.2 optimizer.sh status 报 process ID list syntax error
现象:
error: process ID list syntax error
Usage:
定位:0.8.1 的 optimizer.sh status/pid 未运行 optimizer 时脚本内部命令参数拼接有缺陷,属发行包已知小问题。
解决:以 jps -l 为准(出现 org.apache.amoro.optimizer.standalone.StandaloneOptimizer 即在运行);需要更详细的 JVM 信息用 jps -lv。
6.3 调用接口返回 Signature check failed 或 Please login first
定位:Signature check failed 是请求未带合法鉴权(token 模式缺 apiKey/signature,或 Basic 密码错误);Please login first 是 Web 会话缺失或过期(session-timeout 默认 7d)。
解决:按 4.3 先登录拿 Cookie 再访问,或切换 rest-auth-type: basic 用 curl -u admin:q1w2e3r4 直调。
6.4 端口已监听但 curl 无响应
定位:AMS 启动分两阶段——Thrift(1260/1261)先起、HTTP(1630)后起,ams.sh status 显示 running. 不代表 1630 已就绪;极端情况下 1630 绑定失败(地址被占用)。
解决:看 ams-info.log 是否出现 Http server start at 1630.,再用 curl -s http://127.0.0.1:1630/api/ams/v1/versionInfo 确认返回 200。
6.5 jps 命令不存在
定位:jps 属 JDK 工具,只装 JRE 时没有。
解决:安装 openjdk-11-jdk-headless(含 jps),或用 ps -ef | grep AmoroServiceContainer 替代查看进程。