Apache Hop 配置参数详解
Apache Hop 2.19.0 配置参数详解:hop-config.json 全局配置、project-config.json 项目配置、运行配置 local.json、环境变量与 JVM 内存参数,含参数总览表、核心键说明与生产配置模板。
Apache Hop 配置参数详解
目标:详解 Apache Hop 2.19.0 在
/opt/data/apache-hop部署下的配置体系——全局hop-config.json、项目project-config.json、本地运行配置local.json、环境变量与 JVM 内存参数,给出参数总览、核心键详解与生产配置模板,参数均来源于本机实测配置。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS |
| 软件版本 | Apache Hop 2.19.0 |
| 运行 JDK | OpenJDK 21.0.12.1 |
| 安装目录 | /opt/apache-hop/hop |
| 项目根目录(PROJECT_HOME) | /opt/data/apache-hop/project |
| 环境变量文件 | /etc/profile.d/hop-env.sh |
| 日志目录 | /opt/data/apache-hop/logs |
二、前置条件
- Apache Hop 2.19.0 已按《Ubuntu 22.04 安装 Apache Hop 2.19.0 指南》安装并配置好 JDK 21、环境变量与项目目录。
- 具备对
/opt/apache-hop/hop/config/、/opt/data/apache-hop/project/、/etc/profile.d/hop-env.sh的读写权限(root)。 - 了解 Hop 的层级:全局(hop-config.json)→ 项目(project-config.json)→ 运行配置(local.json)→ 环境变量,越靠后优先级越高。
三、参数查看与修改方式
配置均为 JSON/YAML 或 shell 环境变量文本,直接编辑对应文件并重启 Hop 进程即生效。查看各配置入口是否存在:
cat /opt/apache-hop/hop/config/hop-config.json
cat /opt/data/apache-hop/project/project-config.json
cat /etc/profile.d/hop-env.sh
查看当前生效的环境变量:
env | grep -E '^(JAVA_HOME|HOP_|PATH)'
查看运行中的 Hop 进程实际 JVM 参数:
jps -lv | grep -i hop
修改建议:优先改 /opt/data/apache-hop/project/ 下的项目级配置与环境变量文件 /etc/profile.d/hop-env.sh;不改动 Hop 安装目录内的出厂配置,便于版本升级与多项目复用。
四、参数总览
| 配置层级 | 文件/入口 | 关键键 | 作用范围 |
|---|---|---|---|
| 全局 | <安装目录>/config/hop-config.json | LocaleDefault、projectsConfig.* | 整个 Hop 实例 |
| 项目 | <PROJECT_HOME>/project-config.json | metadataBaseFolder、enforcingExecutionInHome、config.variables | 单个项目 |
| 运行配置 | <PROJECT_HOME>/metadata/pipeline-run-configuration/local.json | engineRunConfiguration.Local.*、name、defaultSelection | 本地引擎执行 |
| 环境变量 | /etc/profile.d/hop-env.sh | JAVA_HOME、HOP_HOME、HOP_OPTIONS、PATH | 当前 shell / 启动脚本 |
| 启动脚本 | <安装目录>/hop | HOP_JAVA_HOME、JAVA_HOME、HOP_OPTIONS 默认值 -Xmx2048m | Hop 进程启动 |
五、核心参数分类详解
5.1 全局配置(hop-config.json)
位于 /opt/apache-hop/hop/config/hop-config.json,本机默认内容:
{
"LocaleDefault": "en_US",
"projectsConfig": {
"enabled": true,
"projectMandatory": true,
"defaultProject": "default",
"standardParentProject": "default",
"projectConfigurations": [
{
"projectName": "default",
"projectHome": "/opt/data/apache-hop/project",
"configFilename": "project-config.json"
},
{
"projectName": "samples",
"projectHome": "config/projects/samples",
"configFilename": "project-config.json"
}
]
}
}
| 键 | 本机值 | 含义 |
|---|---|---|
LocaleDefault | en_US | 默认区域语言 |
projectsConfig.enabled | true | 是否启用项目管理模型 |
projectsConfig.projectMandatory | true | 是否强制要求指定项目 |
projectsConfig.defaultProject | default | 默认项目名 |
projectsConfig.standardParentProject | default | 标准父项目 |
projectsConfig.projectConfigurations[] | 见上 | 项目列表,每项含 projectName、projectHome、configFilename |
💡 说明:修改某项目的
projectHome指向新的数据目录后,Hop 会在该目录读取project-config.json,并据此定位元数据,实现项目级数据与安装目录解耦。
5.2 项目配置(project-config.json)
位于 /opt/data/apache-hop/project/project-config.json:
{
"metadataBaseFolder": "${PROJECT_HOME}/metadata",
"unitTestsBasePath": "${PROJECT_HOME}",
"dataSetsCsvFolder": "${PROJECT_HOME}/datasets",
"enforcingExecutionInHome": true,
"parentProjectName": "",
"config": {
"variables": []
}
}
| 键 | 本机值 | 含义 |
|---|---|---|
metadataBaseFolder | ${PROJECT_HOME}/metadata | 元数据(运行配置、数据源等)基路径,${PROJECT_HOME} 为项目根 |
unitTestsBasePath | ${PROJECT_HOME} | 单元测试基路径 |
dataSetsCsvFolder | ${PROJECT_HOME}/datasets | 数据集合 CSV 目录 |
enforcingExecutionInHome | true | 强制所有可执行文件须位于项目根内 |
parentProjectName | 空 | 父项目名(用于继承) |
config.variables | [] | 项目级变量(name/value) |
⚠️ 注意:
enforcingExecutionInHome=true时,hop run -f的路径必须是项目内相对路径,否则报「pipeline path is invalid」。
5.3 运行配置(pipeline-run-configuration/local.json)
位于 /opt/data/apache-hop/project/metadata/pipeline-run-configuration/local.json:
{
"engineRunConfiguration": {
"Local": {
"feedback_size": "50000",
"sample_size": "100",
"sample_type_in_gui": "Last",
"rowset_size": "10000",
"safe_mode": false,
"show_feedback": false,
"topo_sort": false,
"gather_metrics": false
}
},
"name": "local",
"configurationVariables": [],
"description": "",
"defaultSelection": true
}
| 键 | 值 | 含义 |
|---|---|---|
name | local | 运行配置名,hop run -r/--runconfig 按此引用 |
engineRunConfiguration.Local | 见上 | 本地引擎参数块 |
engineRunConfiguration.Local.feedback_size | 50000 | 每处理多少行输出一次反馈日志 |
engineRunConfiguration.Local.sample_size | 100 | 样本行数 |
engineRunConfiguration.Local.rowset_size | 10000 | 变换间行集缓冲大小 |
engineRunConfiguration.Local.safe_mode | false | 是否开启安全模式 |
engineRunConfiguration.Local.gather_metrics | false | 是否采集性能指标 |
defaultSelection | true | 是否为默认运行配置 |
5.4 环境变量与启动脚本(含 JVM 内存)
环境变量文件 /etc/profile.d/hop-env.sh:
# Apache Hop environment
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export HOP_HOME=/opt/apache-hop/hop
export PATH="$HOP_HOME:$PATH"
export HOP_OPTIONS="-Xms256m -Xmx512m"
启动脚本 <安装目录>/hop 中对 Java 与堆的逻辑(摘要):
- Java 定位顺序:
HOP_JAVA_HOME(最优先)→JAVA_HOME→ 系统java; - 默认堆:若未设置
HOP_OPTIONS,则使用-Xmx2048m; - 未设置
HOP_AUDIT_FOLDER时写入./audit。
| 环境变量 | 默认值 | 含义 |
|---|---|---|
JAVA_HOME | /usr/lib/jvm/java-21-openjdk-amd64 | JDK 21 根目录(2.19.0 必需) |
HOP_HOME | /opt/apache-hop/hop | Hop 安装目录 |
HOP_JAVA_HOME | 空 | 独立覆盖 Hop 使用的 JVM(优先于 JAVA_HOME) |
HOP_OPTIONS | -Xmx2048m(脚本内置) | JVM 参数,含堆大小 |
HOP_CONFIG_LOCATION | 空 | 全局配置目录覆盖 |
💡 说明:为控制服务器内存,将堆限制在 256–512MB(
-Xms256m -Xmx512m)。修改后重启依赖 Hop 的进程,并用jps -lv确认-Xmx512m生效(见三、参数查看与修改方式)。
六、生产配置模板
适用场景:16GB 内存、SSD、单机数据编排与定时 ETL 任务生产部署。
全局 hop-config.json 关键项建议:
{
"LocaleDefault": "zh_CN",
"projectsConfig": {
"enabled": true,
"projectMandatory": true,
"defaultProject": "default",
"projectConfigurations": [
{
"projectName": "default",
"projectHome": "/opt/data/apache-hop/project",
"configFilename": "project-config.json"
}
]
}
}
项目 project-config.json:
{
"metadataBaseFolder": "${PROJECT_HOME}/metadata",
"unitTestsBasePath": "${PROJECT_HOME}",
"dataSetsCsvFolder": "${PROJECT_HOME}/datasets",
"enforcingExecutionInHome": true,
"config": {
"variables": [
{ "name": "AUDIT_FOLDER", "value": "/opt/data/apache-hop/audit" }
]
}
}
运行配置 local.json(本地执行,含合理缓冲):
{
"engineRunConfiguration": {
"Local": {
"feedback_size": "100000",
"sample_size": "100",
"sample_type_in_gui": "Last",
"rowset_size": "20000",
"safe_mode": false,
"show_feedback": false,
"topo_sort": false,
"gather_metrics": true
}
},
"name": "local",
"configurationVariables": [],
"description": "production local run config",
"defaultSelection": true
}
环境变量 /etc/profile.d/hop-env.sh 生产建议值:
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export HOP_HOME=/opt/apache-hop/hop
export PATH="$HOP_HOME:$PATH"
export HOP_OPTIONS="-Xms256m -Xmx512m"
✅ 说明:
-Xms256m -Xmx512m将堆固定在 256–512MB 区间,配合gather_metrics=true采集执行指标,适合 16GB 内存场景下长期稳定运行;如单次处理行数极大(千万级),可视实际将rowset_size上调并复核堆上限。
七、常见问题
7.1 改了 projectHome 后 hop run 找不到文件
定位:enforcingExecutionInHome=true 时文件必须在项目 PROJECT_HOME 内。解决:把 .hpl/.hwf 放进对应 pipelines/、workflows/ 子目录,再用项目内相对路径运行。
7.2 HOP_OPTIONS 设置后堆没变(仍很大)
定位:可能是 HOP_OPTIONS 未被当前 shell 继承,或 hop 脚本用了 HOP_JAVA_HOME 分支。解决:确认环境变量已 export 并 source,用 env | grep HOP 与 jps -lv 复核;极端情况显式设置 HOP_JAVA_HOME 并在脚本中临时指定 HOP_OPTIONS.
7.3 改配置后不生效
定位:Hop 配置在进程启动时读取一次。解决:修改任一 *.json 或环境变量后重启对应 Hop 进程(若为常驻 hop server,重启服务)。
7.4 项目需要父项目继承功能但这里用不上
定位:parentProjectName 为空表示不继承父项目。如需复用公共元数据,在 hop-config.json 的 projectConfigurations[] 增加父项目并在 project-config.json 填 parentProjectName。
八、参考链接
- Apache Hop 官方下载站:https://dlcdn.apache.org/hop/
- Apache Hop 项目官网:https://hop.apache.org/
- Apache Hop 官方文档(项目/配置):https://hop.apache.org/manual/latest/
- Apache Hop GitHub 仓库:https://github.com/apache/hop