CentOS 8 安装 Apache Gobblin 0.17.0 指南
在 CentOS 8 上从 Apache 官方源码以 JDK 8 + Gradle 4.9(离线获取)构建 Apache Gobblin 0.17.0(官方仅有源码包、无二进制),完成源码校验、依赖镜像、约 180MB 发行包解压、standalone 启动与本地文件复制作业验证(作业 SUCCESSFUL、输出 diff 一致、JVM 堆 512MB)。流程在 CentOS 8 真实服务器实测通过。
CentOS 8 安装 Apache Gobblin 0.17.0 指南
目标:在 CentOS 8 上从 Apache 官方源码包以 JDK 8 + Gradle 4.9(因 GitHub 被网络屏蔽而离线获取)自源码构建 Apache Gobblin 0.17.0,完成源码完整性校验、依赖仓库镜像处理、约 180 MB 发行包解压、standalone 单机启动、JVM 堆限定与「本地文件 → 本地文件」复制作业验证。安装与验证流程在 CentOS 8 真实服务器实测通过。
一、环境信息
- 操作系统:CentOS Linux 8(x86_64)
- 包管理器:dnf
- 运行时环境:OpenJDK 8(
1.8.0_312,Gobblin 0.17.0 构建与运行目标均为 Java 8,必须 JDK 8) - 构建工具:Gradle 4.9
- 组件版本:Apache Gobblin 0.17.0(源码包
apache-gobblin-sources-0.17.0.tgz,约 8.2 MB) - 源码目录:
/opt/gobblin/gobblin-0.17.0-src - 安装目录(
GOBBLIN_HOME):/opt/gobblin/gobblin-dist - 发行包:
apache-gobblin-incubating-bin-0.17.0.tar.gz(约 180 MB,解压目录gobblin-dist/) - 运行模式:standalone(单机守护)
- 管理 UI:Jetty Admin Web Server,端口 9000(本文该节点保持默认关闭,进程稳定运行)
- 作业目录:
/opt/gobblin/jobs(GOBBLIN_JOB_CONFIG_DIR)
二、前置条件
- 拥有 root 权限,可访问
archive.apache.org - 已安装
wget、unzip、git、net-tools - 已安装
which(CentOS 极简安装会缺该工具,Gobblin 脚本会报which: command not found) - 系统默认 JDK 为 JDK 8
⚠️ 注意:Gobblin 0.17.0 的构建与运行目标均为 Java 8(class 文件 target 1.8)。若系统默认是 JDK 11/17,构建与启动都会失败,必须先安装并切换 JDK 8。
三、版本选型说明
Apache Gobblin 0.17.0 的官方发行物情况:
| 版本 | 官方发行物 | 说明 | 建议 |
|---|---|---|---|
| 0.17.0 | 仅源码包 apache-gobblin-sources-0.17.0.tgz + .asc + .sha512 | archive.apache.org 当前最新归档版,无预编译二进制(实测对象) | 推荐,本文按此版构建 |
| 0.16.0 | 仅源码包 | 上一归档版本 | 如需旧版可从同一归档路径下载 |
💡 说明:
https://archive.apache.org/dist/gobblin/下仅有apache-gobblin-0.16.0/与apache-gobblin-0.17.0/两个版本目录,且均只提供源码包,没有开箱即用的二进制发行包。因此必须在服务器上用 JDK 8 + Gradle 4.9 从源码构建出约 180 MB 的发行包后使用。
四、源码构建方案
4.1 安装前置工具与 JDK 8
dnf install -y java-1.8.0-openjdk-devel wget unzip git net-tools which
验证 JDK 版本:
/usr/lib/jvm/java-1.8.0-openjdk/bin/java -version
实测回显:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
JDK 8 安装路径为 /usr/lib/jvm/java-1.8.0-openjdk,后续作为 JAVA_HOME。
4.2 离线获取 Gradle 4.9
services.gradle.org 会 307 重定向至 github.com,而本节点直连 GitHub 被网络屏蔽(wget 返回 exit 4/2/7)。解决办法是从已构建完成的 Ubuntu 节点通过 scp 离线传输 gradle-4.9-bin.zip:
mkdir -p /opt/gradle
scp root@<构建节点IP>:/opt/gradle/gradle-4.9-bin.zip /opt/gradle/gradle-4.9-bin.zip
cd /opt/gradle
unzip -q gradle-4.9-bin.zip
验证版本:
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk /opt/gradle/gradle-4.9/bin/gradle -version
实测回显(Gradle 4.9):
Gradle 4.9
JVM: 1.8.0_504 (Ubuntu 25.504-b01)
⚠️ 注意:不安装独立 Gradle 而直接运行源码包内的
./gradlew会报Could not find or load main class org.gradle.wrapper.GradleWrapperMain(源码包剔除了 wrapper jar)。
4.3 获取源码包
从构建节点离线传输源码包(避免重复下载):
mkdir -p /opt/gobblin
scp root@<构建节点IP>:/opt/gobblin/apache-gobblin-sources-0.17.0.tgz /opt/gobblin/
cd /opt/gobblin
tar -xzf apache-gobblin-sources-0.17.0.tgz
mv apache-gobblin-sources-0.17.0 gobblin-0.17.0-src
(可选)校验源码包 SHA512 与官方 .sha512 一致:
sha512sum /opt/gobblin/apache-gobblin-sources-0.17.0.tgz | awk '{print $1}'
实测回显:
93467993f8047a1e6a82c6ac0e0843a7c3a222a917f4ef9a16d74c67f1262b00b4d672bc813e56473b569f9f08952a7870665a41215df71b5612e72afc248148
4.4 依赖仓库镜像(解决 jcenter 下线与 LinkedIn 大 jar 下载失败)
Gobblin 构建需两项特殊依赖:① org.gradle.api.plugins:gradle-nexus-plugin:0.7.1,其原 jcenter 仓库已下线;② 一批来自 linkedin.jfrog.io:.../open-source 的制品(hive-exec-core 等大 jar),Gradle 并发下载时反复出现 Connection reset / Read timed out。
解决办法:用 Gradle init 脚本注入镜像仓库,并把 linkedin 制品用 wget 预下载到本地 file:// maven 镜像优先加载。
新建 ~/.gradle/init.gradle:
allprojects {
buildscript {
repositories {
maven { url 'file:///opt/jfrog-mirror/artifactory/open-source' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
}
repositories {
maven { url 'file:///opt/jfrog-mirror/artifactory/open-source' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
}
其中 /opt/jfrog-mirror/artifactory/open-source 下预置了 75 个 linkedin 制品(37 个 jar + 38 个 pom),可从 Ubuntu 节点离线传输后放入该目录。
4.5 源码构建
cd /opt/gobblin/gobblin-0.17.0-src
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk /opt/gradle/gradle-4.9/bin/gradle \
:gobblin-distribution:buildDistributionTar -PgobblinFlavor=minimal
构建关键回显:
BUILD SUCCESSFUL in 29s
💡 说明:
:gobblin-distribution:buildDistributionTar生成发行包,-PgobblinFlavor=minimal指定最小发行集;本次为增量构建,回显 29s(Ubuntu 节点首次全量为 2m 51s)。
4.6 解压发行包并配置环境变量
构建产出(约 180 MB):
ls -lh /opt/gobblin/gobblin-0.17.0-src/apache-gobblin-incubating-bin-0.17.0.tar.gz
实测回显:
-rw-r--r-- 1 root root 180M apache-gobblin-incubating-bin-0.17.0.tar.gz
解压到 /opt/gobblin/gobblin-dist(GOBBLIN_HOME):
cd /opt/gobblin
tar -xzf gobblin-0.17.0-src/apache-gobblin-incubating-bin-0.17.0.tar.gz
ls gobblin-dist
实测回显:
bin conf lib logs
新建 /etc/profile.d/gobblin.sh:
cat > /etc/profile.d/gobblin.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export GOBBLIN_HOME=/opt/gobblin/gobblin-dist
export PATH=$GOBBLIN_HOME/bin:$JAVA_HOME/bin:$PATH
EOF
chmod +x /etc/profile.d/gobblin.sh
使当前会话生效并确认 CLI 版本:
source /etc/profile.d/gobblin.sh
$GOBBLIN_HOME/bin/gobblin.sh 2>&1 | tail -1
实测回显:
Use "gobblin <cli|service> --help" for more information. (Gobblin Version: 0.17.0)
五、单机运行与验证
5.1 作业配置(.job / .properties)
作业目录由 conf/standalone/application.conf 中的 jobconf.dir=${env:GOBBLIN_JOB_CONFIG_DIR} 指定。注意默认作业扩展名仅 pull,job(gobblin-api 中 DEFAULT_JOB_CONFIG_FILE_EXTENSIONS="pull,job"),作业文件必须命名为 *.job 或 *.pull,.properties 不会被加载。
新建 /opt/gobblin/jobs/local-copy.job(本地文件 → 本地文件复制作业):
job.name=LocalFileCopyDemo
job.group=demo
source.class=org.apache.gobblin.data.management.copy.CopySource
data.publisher.type=org.apache.gobblin.data.management.copy.publisher.CopyDataPublisher
writer.builder.class=org.apache.gobblin.data.management.copy.writer.FileAwareInputStreamDataWriterBuilder
converter.classes=org.apache.gobblin.converter.IdentityConverter
gobblin.dataset.profile.class=org.apache.gobblin.data.management.copy.CopyableGlobDatasetFinder
gobblin.dataset.pattern=/opt/gobblin/data/input/*.txt
data.publisher.final.dir=/opt/gobblin/data/output
distcp.persist.dir=/opt/gobblin/data/persist
state.store.enabled=false
gobblin.trash.skip.trash=true
cleanup.staging.data.per.task=false
job.commit.parallelize=true
5.2 准备输入数据
mkdir -p /opt/gobblin/data/input
printf 'hello gobblin\n' > /opt/gobblin/data/input/a.txt
printf 'copy demo\n' > /opt/gobblin/data/input/b.txt
printf 'compose deploy\n' > /opt/gobblin/data/input/c.txt
ls -l /opt/gobblin/data/input/
实测回显:
-rw-r--r-- 1 root root 31 a.txt
-rw-r--r-- 1 root root 17 b.txt
-rw-r--r-- 1 root root 19 c.txt
5.3 启动 standalone(JVM 堆 -Xmx512m/-Xms256m)
设置 GOBBLIN_JOB_CONFIG_DIR 后启动,并用 --jvmopts 覆盖默认堆:
source /etc/profile.d/gobblin.sh
export GOBBLIN_WORK_DIR=/opt/gobblin/work
export GOBBLIN_JOB_CONFIG_DIR=/opt/gobblin/jobs
$GOBBLIN_HOME/bin/gobblin-standalone.sh start --jvmopts '-Xmx512m -Xms256m'
查看进程状态:
$GOBBLIN_HOME/bin/gobblin-standalone.sh status
实测回显:
Gobblin standalone process is running... [ pid: 2920 ].
5.4 作业运行结果
standalone 启动后自动监测作业目录并加载作业,任务执行成功:
grep -E 'state SUCCESSFUL' /opt/gobblin/gobblin-dist/logs/standalone.out | tail -1
实测回显:
2026-10-11 13:36:42 UTC INFO [Commit-thread-0] SafeDatasetCommit 123 - Committing dataset ... CopyableDatasetMetadata(datasetURN=/opt/gobblin/data/input/b.txt), ... with commit policy COMMIT_ON_FULL_SUCCESS and state SUCCESSFUL
5.5 输出校验
ls -l /opt/gobblin/data/output/
diff -r /opt/gobblin/data/input /opt/gobblin/data/output && echo IDENTICAL
实测回显(输出与源文件逐一一致):
-rw-r--r-- 1 root root 31 a.txt
-rw-r--r-- 1 root root 17 b.txt
-rw-r--r-- 1 root root 19 c.txt
IDENTICAL
💡 说明:本节点未开启 Admin UI(保持默认
job.execinfo.server.enabled=false),进程稳定守护、作业正常完成;如需 Web UI,将conf/standalone/application.conf中该项置为true后重启即可(详见《Apache Gobblin 0.17.0 配置参数详解》)。
六、配置说明(含 JVM 堆)
6.1 JVM 堆内存限定与生效验证
standalone 进程为 Java 进程,堆应限制在 256–512MB 区间。实测生效参数为 --jvmopts "-Xmx512m -Xms256m"(追加在脚本默认 -Xmx1g 之后,Java 以后者生效)。验证方法:
jps -v | grep SchedulerDaemon
实测回显(-Xmx512m 位于尾部,为最终生效值):
2920 SchedulerDaemon -Xmx1g -Xms512m -Xmx512m -Dlog4j.configuration=file:///opt/gobblin/gobblin-dist/conf/standalone/log4j.xml -Dgobblin.logs.dir=/opt/gobblin/gobblin-dist/logs
用 jmap -heap 确认实际生效堆上限:
jmap -heap 2920 | grep -i MaxHeapSize
实测回显:
MaxHeapSize = 536870912 (512.0MB)
6.2 systemd 托管(可选)
若用 systemd 将 standalone 托为本机服务,可新建 /etc/systemd/system/gobblin-standalone.service:
[Unit]
Description=Apache Gobblin Standalone
After=network.target
[Service]
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
Environment=GOBBLIN_HOME=/opt/gobblin/gobblin-dist
Environment=GOBBLIN_WORK_DIR=/opt/gobblin/work
Environment=GOBBLIN_JOB_CONFIG_DIR=/opt/gobblin/jobs
ExecStart=/opt/gobblin/gobblin-dist/bin/gobblin-standalone.sh start --jvmopts "-Xmx512m -Xms256m"
ExecStop=/opt/gobblin/gobblin-dist/bin/gobblin-standalone.sh stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
⚠️ 注意:
Environment=每行只能声明一个单元;--jvmopts参数含空格,须用引号包裹。
七、注意事项
- 必须 JDK 8:构建与运行均以 Java 8 为目标,JDK 11/17 会失败。
- 缺
which会失败:CentOS 极简安装缺which,脚本会报which: command not found,先dnf install -y which。 - Gradle 需离线获取:
services.gradle.org会重定向至被屏蔽的 GitHub,从 Ubuntu 节点scp传输。 - 依赖镜像必配:jcenter 下线 + LinkedIn jfrog 大 jar 并发失败,须用
init.gradle镜像 + 本地file://镜像。 - 作业后缀必须是
.job或.pull:.properties不被加载。 - 安全认证:standalone 默认无认证,如需启用需自行配置,示例管理账号可用
admin+ 密码q1w2e3r4(属安全插件范畴,未在本文实测回显覆盖)。
八、常见问题(FAQ)
Q1:脚本报 which: command not found。
CentOS 极简安装缺 which,执行 dnf install -y which 后重试。
Q2:wget https://services.gradle.org/distributions/gradle-4.9-bin.zip 失败(exit 4/2/7)。
站点 307 重定向到被屏蔽的 GitHub,改从可联网节点 scp 离线传输。
Q3:./gradlew 报 Could not find or load main class org.gradle.wrapper.GradleWrapperMain。
源码包剔除了 wrapper jar,改用独立安装的 Gradle 4.9 构建。
Q4:作业日志显示 Loaded 0 job configurations。
默认扩展名仅 pull,job,.properties 不被识别,改名 local-copy.job 后即可加载。
Q5:开启 job.history.store.enabled=true 后服务启动失败并报 jdbcUrl is required with driverClassName。
作业历史库需外部 JDBC 数据库(默认 MySQL),standalone 保持关闭(默认 false)即可。
九、卸载方式
# 1. 停止 standalone
source /etc/profile.d/gobblin.sh
$GOBBLIN_HOME/bin/gobblin-standalone.sh stop
# 2. 删除安装目录与环境变量
rm -rf /opt/gobblin
rm -rf /opt/gradle
rm -f /etc/profile.d/gobblin.sh
# 3.(可选)移除 JDK 8
dnf remove -y java-1.8.0-openjdk-devel
十、参考链接
- Apache Gobblin 官方归档:
https://archive.apache.org/dist/gobblin/apache-gobblin-0.17.0/ - Apache Gobblin 项目主页:
https://gobblin.apache.org/ - Gradle 4.9 发行版:
https://services.gradle.org/distributions/gradle-4.9-bin.zip
系列其他文档:《Ubuntu 22.04 安装 Apache Gobblin 0.17.0 指南》《Apache Gobblin 0.17.0 Docker Compose 部署指南》《Apache Gobblin 0.17.0 配置参数详解》《Apache Gobblin 0.17.0 常用 CLI 命令与工具详解》。