如何为 flink docker 容器配置一些外部 jars 库 [英] how to configure some external jars library to the flink docker container

查看:110
本文介绍了如何为 flink docker 容器配置一些外部 jars 库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下配置运行 flink docker 镜像.

I am running a flink docker image with the following configuration.

version: '2.1'
services:
  jobmanager:
    build: .
    image: flink
    volumes:
      - .:/usr/local/lib/python3.7/site-packages/pyflink/lib
    hostname: "jobmanager"
    expose:
      - "6123"
    ports:
      - "8081:8081"
    command: jobmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
  taskmanager:
    image: flink
    volumes:
    - .:/usr/local/lib/python3.7/site-packages/pyflink/lib
    expose:
      - "6121"
      - "6122"
    depends_on:
      - jobmanager
    command: taskmanager
    links:
      - jobmanager:jobmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager

运行日志如下

    taskmanager_1  | 2020-10-11 10:34:03,714 INFO  org.apache.flink.runtime.taskexecutor.TaskManagerRunner      [] -  Classpath: 
  /opt/flink/lib/flink-csv-1.11.0.jar:
/opt/flink/lib/flink-json-1.11.0.jar:
/opt/flink/lib/flink-shaded-zookeeper-3.4.14.jar:
/opt/flink/lib/flink-table-blink_2.12-1.11.0.jar:
/opt/flink/lib/flink-table_2.12-1.11.0.jar:
/opt/flink/lib/log4j-1.2-api-2.12.1.jar:
/opt/flink/lib/log4j-api-2.12.1.jar:
/opt/flink/lib/log4j-core-2.12.1.jar:
/opt/flink/lib/log4j-slf4j-impl-2.12.1.jar:
/opt/flink/lib/flink-dist_2.12-1.11.0.jar:::

从日志中您可以看到一些默认库加载到系统中,但我想添加一些 jar,例如 flink-jdbc_2.11-1.9.0.jar,它在我的本地文件系统中.

from the logs you can see some default libraries loaded into the system, but I want to add some jars like flink-jdbc_2.11-1.9.0.jar, which is in my local filesystem.

我的本​​地 jar 文件夹是 /usr/local/lib/python3.7/sitepackages/pyflink/lib

my local jar folder is /usr/local/lib/python3.7/sitepackages/pyflink/lib

我试过了

volumes:
  - /opt/flink/lib/:/usr/local/lib/python3.7/site-packages/pyflink/lib

错误是

ERROR: for keras-flask-deploy-webapp-master_jobmanager_1  Cannot start service jobmanager: Mounts denied: 
The path /opt/flink/lib is not shared from the host and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing.

我试过了,但还是不行

volumes:
  - /usr/local/lib/python3.7/site-packages/pyflink/lib:/opt/flink/lib

[ERROR] Flink distribution jar not found in /opt/flink/lib.
taskmanager_1  | [ERROR] The execution result is empty.

如何将 jdbc jar 库链接到 flink 的 docker 容器?

How would I link the jdbc jar library to the flink 's docker container?

推荐答案

这种情况下的解决方法可以是将带有特定 jar 的卷附加到容器中的某个临时位置,并覆盖运行命令以将附加文件复制到/opt/flink/lib flink 类路径文件夹:

The workaround in this case can be to attach the volume with your specific jars to some temporary location in container and override the run command to copy the attached files into the /opt/flink/lib flink classpath folder:

volumes:
  - /usr/local/lib/python3.7/site-packages/pyflink/lib:/opt/flink/lib-custom
command: cp -a /opt/flink/lib-custom/. /opt/flink/lib/ && jobmanager

如果您从那里运行应用程序,我会说调整 jobmanager 容器就足够了,但如果不是 - 在 taskmanager 中也重复相同的操作.

I would say tweaking jobmanager container would be enough if you run the application from there, but if not - repeat the same in taskmanager as well.

这篇关于如何为 flink docker 容器配置一些外部 jars 库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆