Apache Ambari 2.7.9 配置参数详解

Apache Ambari 2.7.9 配置参数详解:解读 ambari.properties、ambari-agent.ini 与 ambari-env.sh 关键参数,JVM 堆出厂 2048m 调至 512m 实测验证。

Apache AmbariAmbari2026/10/13

Apache Ambari 2.7.9 配置参数详解

目标:以一台已完成安装并运行的 CentOS 7.9 服务器为基准,逐项解读 Ambari Server 核心配置 ambari.properties、代理配置 ambari-agent.ini 与 JVM 启动脚本 ambari-env.sh 的全部实测参数,给出小规模生产模板与常见排障结论。文中文件内容与命令回显均来自实机逐字采集。

一、环境信息

  • 操作系统:CentOS Linux release 7.9.2009 (Core)(x86_64)
  • Apache Ambari:2.7.9(ambari-server --version 回显 2.7.9.0-0,2.7 系列最终版本)
  • Java:OpenJDK 1.8.0_412(java-1.8.0-openjdk-devel,JAVA_HOME 为 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64)
  • Python:2.7.5(Ambari Server 命令行与 Agent 均基于 Python 2 运行)
  • 元数据库:内嵌 PostgreSQL 9.2.24-9.el7_9(server.persistence.type=local)
  • 主机名:ambari1.example.com(Server 与 Agent 同机部署,/etc/hosts 自解析)
  • 服务端口:8080(Web 与 REST)、8440(Agent 注册心跳)、8441(Agent 加密通信)
  • 演示账号:admin(密码已由出厂 admin 改为 q1w2e3r4)
  • 运行用户:root

二、前置条件

  • 已按《Apache Ambari 2.7.9 安装指南》完成 ambari-server 的安装、setup 初始化,并确认服务处于运行状态:
ambari-server status
Using python  /usr/bin/python
Ambari-server status
Ambari Server running
Found Ambari Server PID: 156747 at: /var/run/ambari-server/ambari-server.pid
  • 具备 root 权限;修改任何配置前先备份原文件(本文 3.3 给出备份命令)。
  • 三份配置文件分布与职责:
文件职责修改后生效方式
/etc/ambari-server/conf/ambari.propertiesServer 核心配置:数据库、路径、端口、超时、线程池ambari-server restart
/var/lib/ambari-server/ambari-env.shServer JVM 启动参数(堆内存、GC、系统属性)ambari-server restart
/etc/ambari-agent/conf/ambari-agent.iniAgent 连接 Server 的地址、端口、心跳与本地目录ambari-agent restart

三、参数查看与修改方式

3.1 查看参数

Server 参数集中在 /etc/ambari-server/conf/ambari.properties,直接查看全文:

cat /etc/ambari-server/conf/ambari.properties

文件首部有一行由 setup 写入的时间戳注释(每次 setup 会重写整个文件并刷新该时间戳):

#Tue Oct 13 11:18:23 UTC 2026

只关心某类参数时用 grep 过滤,例如查看全部数据库相关参数:

grep '^server.jdbc' /etc/ambari-server/conf/ambari.properties
server.jdbc.connection-pool=internal
server.jdbc.database=postgres
server.jdbc.database_name=ambari
server.jdbc.postgres.schema=ambari
server.jdbc.user.name=ambari
server.jdbc.user.passwd=/etc/ambari-server/conf/password.dat

3.2 修改参数与生效方式

  • ambari.properties 与 ambari-env.sh 的修改均在 ambari-server restart 后生效;Agent 的 ambari-agent.ini 修改后在 ambari-agent restart 后生效。
  • ⚠️ 重新执行 ambari-server setup 会按交互应答重写 ambari.properties(文件首部时间戳即每次重写的痕迹),手工调整过的参数若无特殊说明会被还原,因此生产变更应直接编辑文件而非重复 setup。
  • 参数均为 key=value 一行一条,# 开头为注释;同键重复时后一行覆盖前一行,修改时注意不要留下重复键。

3.3 修改前备份

cp /etc/ambari-server/conf/ambari.properties /etc/ambari-server/conf/ambari.properties.bak.$(date +%F)
cp /var/lib/ambari-server/ambari-env.sh /var/lib/ambari-server/ambari-env.sh.bak.$(date +%F)
cp /etc/ambari-agent/conf/ambari-agent.ini /etc/ambari-agent/conf/ambari-agent.ini.bak.$(date +%F)
ls /etc/ambari-server/conf/
ambari.properties
ambari.properties.bak.2026-10-13
krb5JAASLogin.conf
log4j.properties
metrics.properties
password.dat

四、参数总览

下表汇总实机 /etc/ambari-server/conf/ambari.properties 的全部参数(去除注释与空行后逐条采集),按前缀分组:

路径与目录类

参数实测值说明
metadata.path/var/lib/ambari-server/resources/stacksStack 定义目录(HDP 服务编排元数据)
common.services.path/var/lib/ambari-server/resources/common-services通用服务定义目录
extensions.path/var/lib/ambari-server/resources/extensionsStack 扩展目录
resources.dir/var/lib/ambari-server/resources资源总目录(含 views、mpacks 等)
webapp.dir/usr/lib/ambari-server/webWeb 控制台前端文件目录
pid.dir/var/run/ambari-serverServer PID 文件目录
bootstrap.dir/var/run/ambari-server/bootstrap向导装 Agent 时的引导工作目录
server.tmp.dir/var/lib/ambari-server/data/tmp服务端临时目录
recommendations.dir/var/run/ambari-server/stack-recommendationsStack 推荐结果输出目录
mpacks.staging.path/var/lib/ambari-server/resources/mpacksManagement Pack 安装暂存目录
shared.resources.dir/usr/lib/ambari-server/lib/ambari_commons/resourcesServer 与 Agent 共享资源目录
server.version.file/var/lib/ambari-server/resources/version版本文件位置
stackadvisor.script/var/lib/ambari-server/resources/scripts/stack_advisor.pyStack 配置推荐脚本
bootstrap.script/usr/lib/ambari-server/lib/ambari_server/bootstrap.py引导安装 Agent 的执行脚本
bootstrap.setup_agent.script/usr/lib/ambari-server/lib/ambari_server/setupAgent.py节点上安装 Agent 的脚本
custom.action.definitions/var/lib/ambari-server/resources/custom_action_definitions自定义动作定义目录
kerberos.keytab.cache.dir/var/lib/ambari-server/data/cacheKerberos keytab 缓存目录
security.server.keys_dir/var/lib/ambari-server/keysServer 与 Agent 通信的 CA 证书与密钥目录

数据库类(server.jdbc.* 与 local.database.user)

参数实测值说明
server.persistence.typelocal持久化类型,local 为内嵌数据库
server.jdbc.databasepostgres数据库类型
server.jdbc.database_nameambari数据库名
server.jdbc.postgres.schemaambariPostgreSQL schema 名
server.jdbc.user.nameambari数据库用户名
server.jdbc.user.passwd/etc/ambari-server/conf/password.dat数据库密码所在文件(非明文写在配置里)
local.database.userpostgres本机 PostgreSQL 管理超级用户
server.jdbc.connection-poolinternal连接池实现(详见 5.2 拓展)

Server 运行行为类

参数实测值说明
ambari-server.userrootServer 运行账号
ambari.python.wrapambari-python-wrapPython 包装器名(兼容 python2/python3 环境)
server.os_familyredhat7目标节点 OS 家族(决定 Agent 安装与仓库选择)
server.os_typecentos7目标节点 OS 类型
server.task.timeout1200Server 侧任务超时(秒)
agent.task.timeout900Agent 执行命令超时(秒)
agent.package.install.task.timeout1800Agent 安装软件包任务超时(秒)
server.stages.paralleltrue多阶段请求并行执行
server.execution.scheduler.isClusteredfalse定时任务调度是否集群化(多 Server 时开启)
server.execution.scheduler.maxThreads5执行调度线程数
server.execution.scheduler.maxDbConnections5调度器数据库连接上限
server.execution.scheduler.misfire.toleration.minutes480错过触发容忍窗口(分钟)
client.threadpool.size.max25客户端请求线程池上限
agent.threadpool.size.max25Agent 通信线程池上限
server.connection.max.idle.millis900000连接最大空闲时间(毫秒,15 分钟)
server.http.session.inactive_timeout1800Web 会话不活动超时(秒,30 分钟)
agent.stack.retry.on_repo_unavailabilityfalse仓库不可用时是否重试
agent.stack.retry.tries5仓库重试次数
check_database_skippedfalse启动时是否跳过数据库一致性检查
skip.service.checksfalse部署时是否跳过服务检查
rolling.upgrade.skip.packages.prefixes(空)滚动升级时跳过的包名前缀
recommendations.artifacts.lifetime1w推荐产物保留时长(1 周)
ulimit.open.files65536Server 进程打开文件数上限
server.fqdn.service.urlhttp://169.254.169.254/latest/meta-data/public-hostname云元数据服务取主机名的地址(云上部署用)
server.python.log.levelINFOServer 命令行脚本日志级别
server.python.log.nameambari-server-command.log命令行脚本日志文件名

JDK 类

参数实测值说明
java.home/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64setup -j 写入的本机 JDK 路径
stack.java.home同上部署集群服务时下发到节点的 JDK 路径
java.releasesjdk1.8支持的 JDK 大版本列表
java.releases.ppc64le(空)PowerPC 架构 JDK 列表(未启用)
jdk1.8.descOracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8JDK 选项描述(setup 交互展示用)
jdk1.8.urlhttp://public-repo-1.hortonworks.com/ARTIFACTS/jdk-8u112-linux-x64.tar.gz联网下载 JDK 的地址(当前不可达,见 7.1)
jdk1.8.dest-filejdk-8u112-linux-x64.tar.gz下载保存的文件名
jdk1.8.home/usr/jdk64/联网安装时 JDK 解压目标目录
jdk1.8.re(jdk.*)/jre从解压目录识别 JAVA_HOME 的正则
jdk1.8.jcpol-urlhttp://public-repo-1.hortonworks.com/ARTIFACTS/jce_policy-8.zipJCE 策略文件下载地址(当前不可达)
jdk1.8.jcpol-filejce_policy-8.zipJCE 策略文件名
jdk.download.supportedtrue是否支持联网下载 JDK
jce.download.supportedtrue是否支持联网下载 JCE

HTTP 响应头与 View 类

参数实测值说明
http.cache-control / views.http.cache-controlno-store控制台与 View 的缓存策略响应头
http.charset / views.http.charsetutf-8默认字符集响应头
http.pragma / views.http.pragmano-cachePragma 响应头
http.strict-transport-security / views.http.strict-transport-securitymax-age=31536000HSTS 响应头
http.x-content-type-options / views.http.x-content-type-optionsnosniff禁止 MIME 嗅探
http.x-frame-optionsDENY控制台禁止被嵌入 iframe
views.http.x-frame-optionsSAMEORIGINView 页面仅允许同源嵌入
http.x-xss-protection / views.http.x-xss-protection1; mode=block浏览器 XSS 过滤
views.request.connect.timeout.millis5000View 请求连接超时
views.request.read.timeout.millis10000View 请求读取超时
views.ambari.request.connect.timeout.millis30000Ambari View 连接超时
views.ambari.request.read.timeout.millis45000Ambari View 读取超时
views.skip.home-directory-check.file-system.listwasb,adls,adl跳过家目录检查的文件系统类型

安全与 Kerberos 类

参数实测值说明
gpl.license.acceptedfalse未接受 GPL(LZO 组件随 setup 交互写入)
jce.download.supportedtrue同上 JDK 类
security.server.disabled.ciphers(TLS 套件长列表)Server 与 Agent 通道禁用的弱加密套件
kerberos.operation.verify.kdc.trusttrueKerberos 操作时校验 KDC 可信
user.inactivity.timeout.default0用户不活动强制登出(0 为不启用)
user.inactivity.timeout.role.readonly.default0只读角色不活动超时(0 为不启用)

Agent 侧参数位于 /etc/ambari-agent/conf/ambari-agent.ini,总览见 5.4。

五、核心参数分类详解

5.1 Server 核心参数

server.persistence.type=local:持久化类型。local 表示使用本机内嵌 PostgreSQL;采用外部数据库时该值变为 remote,同时 ambari.properties 会新增 server.jdbc.url、server.jdbc.driver 等参数(见 5.2)。

server.os_family / server.os_type:向导安装 Agent 时在目标节点上选择软件仓库与包名的依据。本机实测为 redhat7 / centos7;混合操作系统集群(如混有 Ubuntu 节点)时,Ambari 会按节点实际的 os_family 匹配 stack 仓库定义,该值与节点系统不符会导致 Agent 安装或服务包下载失败(见 7.5)。

metadata.path=/var/lib/ambari-server/resources/stacks:Stack 元数据根目录。Ambari 2.7.9 默认携带 HDP 系列定义,实机目录内容:

ls /var/lib/ambari-server/resources/stacks
HDP  hooks  repo_templates  repo_install_scripts

自定义服务(Custom Service)即以新增 HDP/<版本>/services/<服务名> 目录的方式接入,改错此参数会直接导致 Web 控制台读不到任何 Stack。

webapp.dir=/usr/lib/ambari-server/web:Web 控制台静态资源目录(Ember.js 前端产物)。浏览器看到的登录页与全部界面均来自这里,升级 ambari-web RPM 时由包管理器更新。

pid.dir=/var/run/ambari-server:PID 文件目录,ambari-server status 就是通过读取该目录下 ambari-server.pid 判断进程存活(见「一」中 status 回显的 Found Ambari Server PID 行)。目录被清理会导致 status 误判 not running,重启服务即可重建。

ulimit.open.files=65536:Server 启动时自动设置的打开文件数。管理大规模集群(数千文件句柄)时按需调大,改后 restart 生效:

grep '^ulimit' /etc/ambari-server/conf/ambari.properties
ulimit.open.files=65536

超时三件套 server.task.timeout / agent.task.timeout / agent.package.install.task.timeout:分别为 Server 等待任务完成、Agent 执行单条命令、Agent 安装软件包的超时秒数(实测 1200 / 900 / 1800)。大规模集群首次部署装包慢,报 Task timed out 时优先调大第三个。

client.threadpool.size.max / agent.threadpool.size.max(均 25):REST 请求处理与 Agent 通信两条线程池的上限,20 节点规模无需调整;数百节点并发心跳时同步调大,并确认数据库连接数(server.execution.scheduler.maxDbConnections)跟得上。

bootstrap.dir 与 recommendations.dir:均位于 /var/run 之下,属运行时可清理数据(引导过程记录与 Stack 推荐产物);recommendations.artifacts.lifetime=1w 控制推荐产物自动清理周期。

5.2 数据库相关参数(server.jdbc.*)

内嵌 PostgreSQL 模式下的全部实测参数:

grep -E '^(server.jdbc|local.database)' /etc/ambari-server/conf/ambari.properties
local.database.user=postgres
server.jdbc.connection-pool=internal
server.jdbc.database=postgres
server.jdbc.database_name=ambari
server.jdbc.postgres.schema=ambari
server.jdbc.user.name=ambari
server.jdbc.user.passwd=/etc/ambari-server/conf/password.dat
参数解读
server.persistence.type=local内嵌模式总开关;外部数据库时为 remote
server.jdbc.database=postgres数据库引擎类型(postgres 或 mysql)
server.jdbc.database_name=ambari库名,setup 建库时使用
server.jdbc.postgres.schema=ambarischema 名,表全部建在其下
server.jdbc.user.name=ambari应用连接账号
server.jdbc.user.passwd=/etc/ambari-server/conf/password.dat密码不落明文,存于该文件(权限 600,属主 root)
local.database.user=postgres内嵌模式下本机 PostgreSQL 超级用户,setup/initdb 使用
server.jdbc.connection-pool=internal连接池实现(见下方拓展)

💡 技术拓展:连接池与数据库选型。server.jdbc.connection-pool 支持 internal(Ambari 内置 c3p0 封装,内嵌库默认)、c3p0 与 hikari(外部库可显式指定,hikari 性能更好)。数据库侧:内嵌 PostgreSQL 由 RPM 依赖自动安装、零额外运维,适合管理与小规模集群;节点数百规模或需要高可用时应改为外部 PostgreSQL / MySQL——setup 时对 Enter advanced database configuration 回答 y 即进入外部库配置流程,完成后 ambari.properties 会从 server.persistence.type=local 变为 remote,并新增 server.jdbc.url(如 jdbc:postgresql://<db主机>:5432/ambari)、server.jdbc.driver(如 org.postgresql.Driver)与 server.jdbc.properties 等参数,JDBC 驱动 jar 放在 /usr/share/java/ 下(内嵌模式实测已有 postgresql-jdbc.jar 由 RPM 自动装入)。

实机验证数据库密码文件权限(防止被普通用户读取):

ls -l /etc/ambari-server/conf/password.dat
-rw------- 1 root root 10 Oct 13 11:18 /etc/ambari-server/conf/password.dat

5.3 安全认证相关参数

实机默认采用 Ambari 本地账号认证(用户与密码哈希存于元数据库 users 表),因此 ambari.properties 中没有出现认证方式参数;与安全直接相关的实测参数如下:

参数实测值解读
security.server.keys_dir=/var/lib/ambari-server/keysCA 根证书、Server 密钥与各 Agent 签发证书所在目录,8440/8441 双向认证的基础
security.server.disabled.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384|...通道禁用的弱套件长列表(3DES、匿名 DH、EXPORT 级等),无需修改
kerberos.keytab.cache.dir=/var/lib/ambari-server/data/cache启用 Kerberos 后 keytab 的服务端缓存目录
kerberos.operation.verify.kdc.trust=true执行 Kerberos 化操作前校验 KDC 连通可信
gpl.license.accepted=falseGPL(LZO)许可未接受;接受后 setup 写入 true 并允许装 LZO
http.x-frame-options=DENY 等响应头族见「四、参数总览」HTTP 组,控制台默认安全响应头

当需要接入企业认证时,通过对应子命令初始化并写入参数:ambari-server setup-ldap(写入 client.security=ldap 及 authentication.ldap.* 一族)、ambari-server setup-pam(写入 client.security=pam)、ambari-server setup-kerberos、ambari-server setup-sso / setup-trusted-proxy(SSO 场景)。执行后同样以 ambari-server restart 生效,命令详解见《Apache Ambari 2.7.9 常用 CLI 命令与工具详解》。

💡 技术拓展:Ambari 认证方式对比。client.security 取值决定登录链路:db(默认,本地 users 表,本文演示账号 admin 即此类)、ldap(对接 Active Directory/OpenLDAP,authentication.ldap.primaryUrl 等参数控制)、pam(操作系统账号)。Web 与 REST 层面另有 Kerberos SPNEGO 免密与 trusted proxy 两种 SSO 形态。多方式不并存——client.security 单值生效,切换认证方式务必先备份 ambari.properties 并确认本地 admin 账号可用,避免锁死管理入口。

5.4 Agent 侧参数(ambari-agent.ini)

Agent 配置采用 ini 分节格式,实机全文如下(; 为注释):

cat /etc/ambari-agent/conf/ambari-agent.ini
[server]
hostname=ambari1.example.com
url_port=8440
secured_url_port=8441
connect_retry_delay=10
max_reconnect_retry_delay=30


[agent]
logdir=/var/log/ambari-agent
piddir=/var/run/ambari-agent
prefix=/var/lib/ambari-agent/data
;loglevel=(DEBUG/INFO)
loglevel=INFO
data_cleanup_interval=86400
data_cleanup_max_age=2592000
data_cleanup_max_size_MB = 100
ping_port=8670
cache_dir=/var/lib/ambari-agent/cache
tolerate_download_failures=true
run_as_user=root
parallel_execution=0
; 0 - don't report commands output periodically. Reduces bandwidth on big cluster
command_update_output=1
alert_reports_interval=5
command_reports_interval=5
status_commands_run_interval=20
alert_grace_period=5
status_command_timeout=5
; (send_alert_changes_only) - enabling this is necessary to deploy big perf clusters
send_alert_changes_only=0
alert_kinit_timeout=14400000
system_resource_overrides=/etc/resource_overrides
; memory_threshold_soft_mb=400
; memory_threshold_hard_mb=1000
; ignore_mount_points=/mnt/custom1,/mnt/custom2

[security]
keysdir=/var/lib/ambari-agent/keys
server_crt=ca.crt
passphrase_env_var_name=AMBARI_PASSPHRASE
ssl_verify_cert=0
credential_lib_dir=/var/lib/ambari-agent/cred/lib
credential_conf_dir=/var/lib/ambari-agent/cred/conf
credential_shell_cmd=org.apache.hadoop.security.alias.CredentialShell

[network]
; this option apply only for Agent communication
use_system_proxy_settings=true

[services]
pidLookupPath=/var/run/

[heartbeat]
state_interval_seconds=60
dirs=/etc/hadoop,/etc/hadoop/conf,/etc/hbase,/etc/hcatalog,/etc/hive,/etc/oozie,
  /etc/sqoop,
  /var/run/hadoop,/var/run/zookeeper,/var/run/hbase,/var/run/templeton,/var/run/oozie,
  /var/log/hadoop,/var/log/zookeeper,/var/log/hbase,/var/run/templeton,/var/log/hive
; 0 - unlimited
log_max_symbols_size=900000
idle_interval_min=1
idle_interval_max=10


[logging]
syslog_enabled=0

逐段解读:

[server] 段(Agent 与 Server 的连接)

参数实测值解读
hostnameambari1.example.comServer 主机名,跨机部署改为 Server 的 IP 或主机名
url_port8440注册与心跳端口(明文 TLS 协商通道)
secured_url_port8441双向认证后的加密通信端口
connect_retry_delay10断线重连起始间隔(秒)
max_reconnect_retry_delay30重连间隔上限(秒)

💡 技术拓展:8440 与 8441 的分工。Agent 首次启动走 8440 完成注册(向 Server 请求证书签名,[security] keysdir 存放 CA 与证书),随后切换到 8441 双向认证通道收发命令与心跳。防火墙策略需同时放行两个端口;仅通 8440 时 Agent 能注册但无法执行任务。

[agent] 段(本地运行行为)

参数实测值解读
logdir / piddir/var/log/ambari-agent、/var/run/ambari-agent日志与 PID 目录
prefix/var/lib/ambari-agent/dataAgent 数据目录(已执行命令记录等)
loglevelINFO日志级别,排障时改 DEBUG
data_cleanup_interval / data_cleanup_max_age / data_cleanup_max_size_MB86400 / 2592000 / 100数据目录清理周期(天/秒)、最大保留 30 天、单文件上限 100MB
ping_port8670Agent 进程本地探活端口
cache_dir/var/lib/ambari-agent/cacheServer 下发命令的缓存目录
tolerate_download_failurestrue资源下载失败时容忍并继续上报
run_as_userrootAgent 执行命令的身份
parallel_execution0命令串行执行(1 为并行)
command_update_output1周期性上报命令输出(0 可降低大集群带宽)
alert_reports_interval / command_reports_interval / status_commands_run_interval5 / 5 / 20告警上报、命令结果上报、状态命令执行周期(秒)
alert_grace_period / status_command_timeout5 / 5告警宽限与状态命令超时(秒)
send_alert_changes_only0仅上报变化告警(大集群置 1 省带宽)
alert_kinit_timeout14400000Kerberos 化告警 kinit 凭据有效期(毫秒,4 小时)
system_resource_overrides/etc/resource_overrides系统资源覆写文件路径
memory_threshold_soft_mb / memory_threshold_hard_mb(注释态)400 / 1000Agent 自身内存软/硬阈值,默认注释不生效
ignore_mount_points(注释态)(空)排除不需要监控的挂载点

[security] / [network] / [services] / [heartbeat] / [logging] 段

参数实测值解读
keysdir/var/lib/ambari-agent/keys本机证书与 CA 存放目录
server_crtca.crt服务端 CA 证书文件名
passphrase_env_var_nameAMBARI_PASSPHRASE通信口令的环境变量名(与 Server 侧 ambari-env.sh 中同名变量配对)
ssl_verify_cert0不校验 CA 证书链(1 为严格校验)
credential_lib_dir / credential_conf_dir / credential_shell_cmd/var/lib/ambari-agent/cred/lib、/var/lib/ambari-agent/cred/conf、org.apache.hadoop.security.alias.CredentialShell凭据仓库(credential store)支持组件
use_system_proxy_settingstrueAgent 通信沿用系统代理配置
pidLookupPath/var/run/Agent 查找所管服务 PID 文件的根路径
state_interval_seconds60组件状态快照上报周期(秒)
dirs/etc/hadoop,...(多行)心跳时采集配置变更的目录清单(含换行续行)
log_max_symbols_size900000日志回传截断上限(0 为不限)
idle_interval_min / idle_interval_max1 / 10空闲期心跳随机间隔(秒)
syslog_enabled0不转发日志到 syslog

修改示例:把心跳状态上报收紧到 30 秒(两端排障时常用):

sed -i 's/^state_interval_seconds=60/state_interval_seconds=30/' /etc/ambari-agent/conf/ambari-agent.ini
grep '^state_interval_seconds' /etc/ambari-agent/conf/ambari-agent.ini
state_interval_seconds=30
ambari-agent restart
Restarting ambari-agent
Verifying Python version compatibility...
Using python  /usr/bin/python
Found ambari-agent PID: 154637
Stopping ambari-agent
Removing PID file at /run/ambari-agent/ambari-agent.pid
ambari-agent successfully stopped
Verifying Python version compatibility...
Using python  /usr/bin/python
Checking for previously running Ambari Agent...
Checking ambari-common dir...
Starting ambari-agent
Verifying ambari-agent process status...
Ambari Agent successfully started
Agent PID at: /run/ambari-agent/ambari-agent.pid
Agent out at: /var/log/ambari-agent/ambari-agent.out
Agent log at: /var/log/ambari-agent/ambari-agent.log

5.5 JVM 内存参数(ambari-env.sh)

ambari-server 本体是一个 JVM 进程(org.apache.ambari.server.controller.AmbariServer),其启动参数集中在 /var/lib/ambari-server/ambari-env.sh。实机文件全文:

cat /var/lib/ambari-server/ambari-env.sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


AMBARI_PASSPHRASE="DEV"
export AMBARI_JVM_ARGS="$AMBARI_JVM_ARGS -Xms256m -Xmx512m -XX:MaxPermSize=128m -Djava.security.auth.login.config=$ROOT/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dcom.sun.jndi.ldap.connect.pool.protocol=\"plain ssl\" -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.timeout=300000"
export PATH=$PATH:$ROOT/var/lib/ambari-server
export PYTHONPATH=$ROOT/usr/lib/ambari-server/lib:$PYTHONPATH

# customize python binary for ambari
# export PYTHON=/usr/bin/python2

# to add additional directory or jar to server classpath use SERVER_CLASSPATH variable
# export SERVER_CLASSPATH=/etc/hadoop/conf/secure

逐项解读:

变量解读
AMBARI_PASSPHRASE="DEV"Server 与 Agent 通信口令,出厂值 DEV;Agent 侧 [security] passphrase_env_var_name 与之配对。改值需同步到所有 Agent 并重启两端
AMBARI_JVM_ARGSJVM 全部启动参数;RPM 出厂堆为 -Xms512m -Xmx2048m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC ...,实机已改为 -Xms256m -Xmx512m(过程见下)
-Dcom.sun.jndi.ldap.connect.pool.*LDAP 连接池属性(协议、上限 20、超时 300 秒),LDAP 认证场景使用
-Djava.security.auth.login.config / -Djava.security.krb5.confJAAS 与 Kerberos 配置入口
PATH / PYTHONPATH 追加Server 命令行脚本运行环境
SERVER_CLASSPATH(注释态)追加第三方 jar 到 Server classpath(如外部数据库驱动)

JVM 堆从出厂 2048m 调整为 512m 的实测闭环。 Ambari 是管理平面,自身负载有限,出厂 -Xmx2048m 在中小规模环境偏大,实测调整为 256-512MB 区间并验证生效。

第一步,确认出厂值(grep 定位,jps -v 看运行中进程的实际参数):

grep -n 'AMBARI_JVM_ARGS' /var/lib/ambari-server/ambari-env.sh
18:export AMBARI_JVM_ARGS="$AMBARI_JVM_ARGS -Xms512m -Xmx2048m -XX:MaxPermSize=128m -Djava.security.auth.login.config=$ROOT/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dcom.sun.jndi.ldap.connect.pool.protocol=\"plain ssl\" -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.timeout=300000"
jps -v | grep AmbariServer
156268 AmbariServer -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms512m -Xmx2048m -XX:MaxPermSize=128m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.timeout=300000

第二步,sed 修改堆参数:

sed -i 's/-Xms512m -Xmx2048m/-Xms256m -Xmx512m/' /var/lib/ambari-server/ambari-env.sh
grep -o '\-Xms[0-9]*m -Xmx[0-9]*m' /var/lib/ambari-server/ambari-env.sh
-Xms256m -Xmx512m

第三步,重启使参数生效(restart = stop + start 全程回显):

ambari-server restart
Using python  /usr/bin/python
Restarting ambari-server
Waiting for server stop...
Ambari-server failed to stop gracefully. Sending SIGKILL to it
Ambari Server stopped
Ambari Server running with administrator privileges.
Organizing resource files at /var/lib/ambari-server/resources...
Ambari database consistency check started...
Server PID at: /var/run/ambari-server/ambari-server.pid
Server out at: /var/log/ambari-server/ambari-server.out
Server log at: /var/log/ambari-server/ambari-server.log
Waiting for server start...............
Server started listening on 8080

DB configs consistency check: no errors and warnings were found.
Ambari Server 'start' completed successfully.

注:Sending SIGKILL 一行是否出现取决于 JVM 在优雅停机等待窗口内能否自行退出,超时则强制结束,属正常现象;等待窗口长短随环境略有差异。

第四步,ps 确认新参数已在进程命令行中(输出节选运行中的 AmbariServer 进程行):

ps -ef | grep [j]ava
root      156747       1 99 13:22 ?        00:00:33 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/bin/java -server -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms256m -Xmx512m -XX:MaxPermSize=128m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.timeout=300000 -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/postgresql-jdbc.jar org.apache.ambari.server.controller.AmbariServer

-Xms256m -Xmx512m 生效确认。注意命令行中同时可见 classpath 含 /usr/share/java/postgresql-jdbc.jar——这就是 5.2 提到的 JDBC 驱动实际加载位置。

💡 技术拓展:-XX:MaxPermSize=128m 是 JDK 8 的永久代(PermGen)上限,JDK 8 中仍有效;升级到 JDK 11+ 后该参数会被移除(改为 Metaspace 的 -XX:MaxMetaspaceSize)。Ambari 2.7.x 官方仅支持 JDK 8,因此保持该参数不动即可。

六、生产配置模板

适用场景:8GB 内存的管理节点、管理规模 ≤20 节点、内嵌 PostgreSQL、JDK 8。以下仅列出与出厂默认不同的建议项(其余参数保持安装后的 ambari.properties 原样即可):

# /etc/ambari-server/conf/ambari.properties 追加或修改项
ulimit.open.files=65536
client.threadpool.size.max=25
agent.threadpool.size.max=25
server.execution.scheduler.maxThreads=5
server.execution.scheduler.maxDbConnections=5
agent.package.install.task.timeout=1800
check_database_skipped=false
# /var/lib/ambari-server/ambari-env.sh:堆限制在 256~512MB
sed -i 's/-Xms512m -Xmx2048m/-Xms256m -Xmx512m/' /var/lib/ambari-server/ambari-env.sh
调整项理由
JVM 堆 -Xms256m -Xmx512m管理平面实测负载低,512MB 堆足够;省出的内存留给节点上的大数据服务
ulimit.open.files=65536与出厂一致,显式固化,避免被系统默认 1024 覆盖
线程池 25 / 调度 520 节点规模实测默认值即可,显式写出便于扩容时对照调整
安装超时 1800 秒大规模首次部署装包慢,预防 Task timed out
check_database_skipped=false保持启动时数据库自检,尽早暴露元数据库异常

扩展场景备注:

  • 管理 100+ 节点:agent.threadpool.size.max 与 client.threadpool.size.max 提至 50-100,堆提至 1024-2048MB,数据库改外部 PostgreSQL 并将 server.jdbc.connection-pool 设为 hikari;
  • 管理节点与集群混部、内存紧张:堆取下限 256MB 起步,观察 /var/log/ambari-server/ambari-server.out 无 FullGC/OOM 后再定;
  • 启用 LDAP/SSO:参数由 setup-ldap / setup-sso 子命令写入,不要手抄参数(详见 5.3 拓展)。

七、常见问题

7.1 setup 交互中 JDK 下载卡住(jdk1.8.url 不可达)

现象:setup 未用 -j 指定 JDK 时会尝试从 jdk1.8.url(实测指向 public-repo-1.hortonworks.com,该源已返回 403)下载 Oracle JDK,长时间无响应。

解决:setup 时用 -j 直接指定本机已装 JDK,跳过联网下载:

ambari-server setup -j /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64

完成后 ambari.properties 中 java.home 与 stack.java.home 即为该路径(见「四、参数总览」JDK 组实测值)。

7.2 手工修改 ambari.properties 不生效

原因:配置在 Server 进程启动时一次性加载。

解决:ambari-server restart 后生效。同时注意:重新执行 ambari-server setup 会重写该文件(首部时间戳即重写痕迹),手工参数会被还原,变更管理上应把 ambari.properties 纳入备份(3.3)。

7.3 外部数据库连接失败

排查顺序:

  1. grep '^server.jdbc' /etc/ambari-server/conf/ambari.properties 确认 server.persistence.type=remote 且 server.jdbc.url 的主机、端口、库名正确;
  2. 确认 JDBC 驱动 jar 在 /usr/share/java/(内嵌模式驱动包名 postgresql-jdbc.jar,见 5.5 ps 回显中的 classpath);MySQL 场景需手工放置 mysql-connector-java.jar;
  3. 远端库需允许管理节点 IP 访问(PostgreSQL 的 pg_hba.conf、MySQL 的授权语句);
  4. 连接池改 hikari 时确认参数拼写为 server.jdbc.connection-pool=hikari。

7.4 password.dat 权限错误

现象:Server 启动报数据库密码读取失败。

解决:该文件由 setup 生成,权限应为 600 且属主 root(实测见 5.2 末尾回显)。被误改后修复:

chown root:root /etc/ambari-server/conf/password.dat
chmod 600 /etc/ambari-server/conf/password.dat
ambari-server restart

7.5 server.os_family 与节点系统不符导致 Agent 安装失败

现象:向导安装 Agent 时报找不到可用仓库或包名。

原因:server.os_family / server.os_type(实测 redhat7 / centos7)与目标节点实际系统不匹配,Stack 仓库定义按 OS 家族选择 repo。

解决:集群内统一操作系统版本;确有混合 OS 需求时确认所用 Stack 定义包含对应 os_family 的仓库配置。

7.6 check-database 报 Persistence service was already initialized

现象:ambari-server check-database 末尾抛出异常退出:

Exception in thread "main" java.lang.Exception: Unexpected error, database check failed
        at org.apache.ambari.server.checks.DatabaseConsistencyChecker.main(DatabaseConsistencyChecker.java:122)
Caused by: java.lang.IllegalStateException: Persistence service was already initialized.

说明:这是 2.7.9 检查器自身的缺陷——数据库一致性检查实际已完成(检查结论出现在 /var/log/ambari-server/ambari-server.out 中,实测为 Database consistency check result: DB_CHECK_SUCCESS),随后检查器内部重复初始化 JPA 持久化服务导致异常退出。判断数据库健康以该结论行为准,完整检查过程见 /var/log/ambari-server/ambari-server-check-database.log。

7.7 Agent 心跳丢失

现象:Web 控制台主机变红或 REST 查询心跳超时。

排查顺序:

grep -A3 '^\[server\]' /etc/ambari-agent/conf/ambari-agent.ini
[server]
hostname=ambari1.example.com
url_port=8440
secured_url_port=8441
connect_retry_delay=10
max_reconnect_retry_delay=30
  1. hostname 是否可达(ping <hostname> 与 /etc/hosts 检查);
  2. 8440/8441 双端口是否放行(仅通 8440 会出现"能注册不能执行");
  3. tail -f /var/log/ambari-agent/ambari-agent.log 观察心跳(正常为周期性 Event to server at /heartbeat 行);
  4. 两端口令一致性:Server 侧 AMBARI_PASSPHRASE 与 Agent 侧 [security] 段配对(见 5.4、5.5)。

八、参考链接