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 真实服务器实测通过。

Apache GobblinApache Gobblin安装部署Apache大数据CentOS 82026/10/11

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 + .sha512archive.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 命令与工具详解》。