欢迎光临
我们一直在努力

生产环境开箱即用的“Flink + Iceberg 数据湖容器搭建”(Docker)

说明:生产环境预制的、开箱即用的“Flink + Iceberg 数据湖运行时容器”

流程图

方式一(挂载)“注意

提示!使用挂载会存在jar冲突,需要取解决jar冲突的问题。

创建文件夹存放JAR包文件:

新增Jar包挂载配置:

修改的是“docker-compose.yml”

version: "3.8"
services:
jobmanager:
image: flink:1.19.1-scala_2.12
container_name: jobmanager
hostname: jobmanager
ports:
– "8081:8081"
– "6123:6123"
command: jobmanager
environment:
– |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
parallelism.default: 1
volumes:
– ./data/jobmanager:/opt/flink/data
– ./logs/jobmanager:/opt/flink/log
# +++ 新增的Jar包挂载配置 +++
– D:/Docker/jar/iceberg:/opt/flink/lib/iceberg

taskmanager:
image: flink:1.19.1-scala_2.12
container_name: taskmanager
hostname: taskmanager
depends_on:
– jobmanager
command: taskmanager
environment:
– |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 2
ports:
– "6121:6121"
– "6122:6122"
volumes:
– ./data/taskmanager:/opt/flink/data
– ./logs/taskmanager:/opt/flink/log
# +++ 新增的Jar包挂载配置 +++
– D:/Docker/jar/iceberg:/opt/flink/lib/iceberg

Docker执行命令:

停止服务运行(执行以下命令,Docker Desptop镜像也会被删除)

docker-compose down

运行docker-compose up -d启动服务

docker-compose up -d

验证:

验证挂载是否成功启动后,可以通过以下命令验证 JAR 包是否已成功挂载到容器内的指定路径:

# 进入jobmanager容器
docker exec -it jobmanager bash
# 查看/opt/flink/lib/iceberg目录下的文件
ls /opt/flink/lib/iceberg/

应该能看到 iceberg-flink-runtime-2.0-1.10.1.jar 这个文件,说明以及挂载成功!!!

使用Apache Flink+Apache Iceberg 执行SQL出现的错误!(解决方案)

因为是jar冲突或缺失依赖导致,选择方案二:运行时添加,打造“生产环境预制的” 数据湖容器。

统一挂载整个jar目录

将你本地的 D:/Docker/jar 整个目录挂载到容器内的一个统一路径下(例如 /opt/flink/lib/user_libs),这样你可以自由管理所有JAR包,无需反复修改yml文件

修改后的 docker-compose.yml:

version: "3.8"
services:
jobmanager:
image: flink:1.19.1-scala_2.12
container_name: jobmanager
hostname: jobmanager
ports:
– "8081:8081"
– "6123:6123"
command: jobmanager
environment:
– |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
parallelism.default: 1
volumes:
– ./data/jobmanager:/opt/flink/data
– ./logs/jobmanager:/opt/flink/log
# +++ 挂载整个jar目录到容器的统一路径 +++
– D:/Docker/jar:/opt/flink/lib/user_libs

taskmanager:
image: flink:1.19.1-scala_2.12
container_name: taskmanager
hostname: taskmanager
depends_on:
– jobmanager
command: taskmanager
environment:
– |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 2
ports:
– "6121:6121"
– "6122:6122"
volumes:
– ./data/taskmanager:/opt/flink/data
– ./logs/taskmanager:/opt/flink/log
# +++ 挂载整个jar目录到容器的统一路径 +++
– D:/Docker/jar:/opt/flink/lib/user_libs

下一步需要:

  • 整理你的JAR包:确保 iceberg-flink-runtime-1.19-1.10.1.jar 和 hadoop-common-3.3.6.jar 都直接放在 D:\\Docker\\jar 目录下,或者在其子目录中。Flink的类加载器会递归扫描 lib/ 下的所有JAR。目录结构与类加载原理如下图:

  • 重启服务:

    cd D:\\Docker\\flink
    docker-compose down
    docker-compose up -d

  • 验证:进入容器查看文件是否挂载成功。

    docker exec jobmanager find /opt/flink/lib/user_libs -name "*.jar"

  • 方式二(运行时添加)“推荐

    创建文件命名为“Dockerfile” 

    FROM apache/flink:1.19.1-scala_2.12-java11 # 将准备好的JAR包复制到镜像的 lib 目录 COPY ./jar/iceberg/iceberg-flink-runtime-1.19-1.9.1.jar /opt/flink/lib/ COPY ./jar/hive/flink-shaded-hadoop-2-uber-2.8.3-10.0.jar /opt/flink/lib/

    创建文件命名为“docker-compose.yml” 

    version: "3.8"
    services:
    jobmanager:
    image: my-flink-iceberg:1.19.1 # 自定义镜像
    container_name: jobmanager
    hostname: jobmanager
    ports:
    – "8081:8081"
    – "6123:6123"
    command: jobmanager
    environment:
    – |
    FLINK_PROPERTIES=
    jobmanager.rpc.address: jobmanager
    parallelism.default: 1
    volumes:
    – ./data/jobmanager:/opt/flink/data
    – ./logs/jobmanager:/opt/flink/log

    taskmanager:
    image: my-flink-iceberg:1.19.1 # 自定义镜像
    container_name: taskmanager
    hostname: taskmanager
    depends_on:
    – jobmanager
    command: taskmanager
    environment:
    – |
    FLINK_PROPERTIES=
    jobmanager.rpc.address: jobmanager
    taskmanager.numberOfTaskSlots: 2
    ports:
    – "6121:6121"
    – "6122:6122"
    volumes:
    – ./data/taskmanager:/opt/flink/data
    – ./logs/taskmanager:/opt/flink/log

    jar存放

    执行命令:

    — 进入 Flink 根目录
    cd D:\\Docker\\flink

    — 清理旧的 Flink 集群容器,为新配置生效做准备
    docker-compose down

    — 后台启动基于最新配置的 Flink 集群
    docker-compose up -d

    — 进入 JobManager 容器的交互式终端
    docker exec -it jobmanager bash

    — 在容器内启动 Flink SQL 客户端,开始交互式 SQL 操作
    ./bin/sql-client.sh

    访问地址为:http://127.0.0.1:8081/

    其它

    退出 Flink SQL Client:

    — 在 Flink SQL> 提示符下,输入以下命令并按 Enter 键

    EXIT;

    这条命令会关闭 SQL 客户端,并返回到容器内的命令行(你之前看到的 root@jobmanager:/opt/flink#

    退出 Docker 容器:

    — 退出SQL客户端后,你仍处于 jobmanager 容器的内部。要完全返回到 Windows PowerShell,在容器内的命令行输入如下

    exit

    或者按快捷键 Ctrl + D。之后,你将回到 Windows 的命令行环境(如 PS D:\\docker\\flink>

    操作流程图:

    赞(0)
    未经允许不得转载:171主机测评 » 生产环境开箱即用的“Flink + Iceberg 数据湖容器搭建”(Docker)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址