[实时计算flink]使用Python依赖

news/2024/10/30 6:30:33/

您可以在Flink Python作业中使用自定义的Python虚拟环境、第三方Python包、JAR包和数据文件等,本文为您介绍如何在Python作业中使用这些依赖。

使用自定义的Python虚拟环境

说明

VVR 4.x仅支持3.7版本的Python虚拟环境,VVR 6.x及以上的版本无此限制,您可以使用更高版本的Python虚拟环境。

Python支持构建虚拟环境,每个Python虚拟环境都有一套完整的Python运行环境,并且可以在这套虚拟环境中安装一系列的Python依赖包。关于Python虚拟环境更详细的介绍,请参见Python文档创建虚拟环境。下文为您介绍如何准备Python的虚拟环境。

  1. 准备Python的虚拟环境。

    set -e
    # 下载Python 3.10 miniconda.sh脚本。
    wget "https://repo.continuum.io/miniconda/Miniconda3-py310_24.7.1-0-Linux-x86_64.sh" -O "miniconda.sh"# 为Python 3.10 miniconda.sh脚本添加执行权限。
    chmod +x miniconda.sh# 创建Python的虚拟环境。
    ./miniconda.sh -b -p venv# 激活Conda Python虚拟环境。
    source venv/bin/activate ""# 安装PyFlink依赖。
    # update the PyFlink version if needed
    pip install "apache-flink==1.17.2"# 关闭Conda Python虚拟环境。
    conda deactivate# 删除缓存的包。
    rm -rf venv/pkgs# 将准备好的Conda Python虚拟环境打包。
    zip -r venv.zip venv

    说明

    本文以作业为VVR 8.x,Python 3.10为例为您介绍,如果您需要使用其他VVR版本或安装其他版本的Python的虚拟环境,则需要修改以下两个参数:

    • miniconda.sh脚本信息:修改为您的目标版本地址信息。

    • apache-flink:修改为您作业使用的VVR版本对应的Flink版本,Flink版本查看方法请参见控制台操作。

    1. 在本地准备setup-pyflink-virtual-env.sh脚本,其内容如下。

    2. 在本地准备build.sh脚本,其内容如下。

      #!/bin/bash
      set -e -xsed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
      sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*yum install -y zip wgetcd /root/
      bash /build/setup-pyflink-virtual-env.sh
      mv venv.zip /build/
    3. 在命令行,执行如下命令,完成python虚拟环境的安装。

      docker run -it --rm -v $PWD:/build  -w /build quay.io/pypa/manylinux2014_x86_64 ./build.sh

      执行完该命令后,会生成一个名字为venv.zip的文件,本示例为Python 3.10的虚拟环境。

      您也可以修改上述脚本,在虚拟环境中安装所需的第三方Python包。

  2. 在Python作业中使用Python虚拟环境。

    1. 登录实时计算控制台。

    2. 单击目标工作空间操作列下的控制台

    3. 在左侧导航栏,单击文件管理,上传venv.zip文件。

    4. 运维中心 > 作业运维页面,单击目标作业名称。

    5. 部署详情页签基础配置区域Python Archives,选择venv.zip文件。

      如果SQL作业在虚拟环境中使用Python UDF,需要在运行参数配置区域的其他配置项,添加如下配置信息。

      python.archives: oss://.../venv.zip
    6. 运行参数配置区域其他配置项,按照您作业的VVR版本添加对应的指定Python虚拟环境的安装路径的配置信息。

      • vvr-6.x及以上版本

        python.executable: venv.zip/venv/bin/python
        python.client.executable: venv.zip/venv/bin/python
      • vvr-6.x以下版本

        python.executable: venv.zip/venv/bin/python

使用第三方Python包

说明

下述内容中的Zip Safe、PyPI和manylinux属于第三方搭建的网站,访问时可能会存在无法打开或访问延迟的问题。

下面将从以下两个场景为您介绍如何使用第三方Python包:

  • 使用可直接Import的第三方Python包

    如果您的第三方Python包是Zip Safe的,即不需要安装即可直接在Python作业中使用。操作步骤如下:

    1. 下载可直接Import的第三方Python包。

      1. 在浏览器上打开PyPI页面。

      2. 在搜索框中输入目标第三方Python包名称,例如apache-flink 1.12.2。

      3. 在搜索结果中,单击目标结果名称。

      4. 在左侧导航栏,单击Download files。

      5. 单击文件名中包含cp37-cp37m-manylinux1的包名称进行下载。

    2. 登录实时计算控制台。

    3. 单击目标工作空间操作列下的控制台

    4. 在左侧导航栏,单击文件管理,上传第三方Python包。

    5. 运维中心 > 作业运维页面,单击部署作业 > Python作业,Python Libraries项,选择所上传的第三方Python包。

    6. 单击保存

  • 使用需要编译的第三方Python包

    如果您的第三方Python包是tar.gz格式的压缩包,或从其他地方下载的源码包,且压缩包的根目录下存在setup.py文件,则这种类型的第三方Python包通常需要先编译才能被使用。您需要先在与Flink兼容的环境下编译第三方Python包,然后才可在Python作业中调用第三方Python包。

    推荐使用quay.io/pypa/manylinux2014_x86_64镜像容器中的Python 3.7来编译第三方Python包,使用该容器编译生成的包兼容绝大多数Linux环境,关于该镜像容器的更多信息请参见manylinux。

    说明

    Python 3.7的安装路径为 /opt/python/cp37-cp37m/bin/python3。

    下面以opencv-python-headless第三方Python包为例,介绍一下如何编译和使用该第三方Python包。

    1. 编译第三方Python包。

      1. 在本地准备requirements.txt文件,其内容如下。

        opencv-python-headless
      2. 在本地准备build.sh脚本,其内容如下。

        #!/bin/bash
        set -e -xsed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
        sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*yum install -y zipPYBIN=/opt/python/cp37-cp37m/bin
        #PYBIN=/opt/python/cp38-cp38/bin
        #PYBIN=/opt/python/cp39-cp39/bin
        #PYBIN=/opt/python/cp310-cp310/bin"${PYBIN}/pip" install --target __pypackages__ -r requirements.txt
        cd __pypackages__ && zip -r deps.zip . && mv deps.zip ../ && cd ..
        rm -rf __pypackages__
      3. 在CMD命令行,执行如下命令。

        docker run -it --rm -v $PWD:/build  -w /build quay.io/pypa/manylinux2014_x86_64 /bin/bash build.sh

        该命令执行完后,会生成一个名字为deps.zip的文件,该文件为编译之后的第三方Python包。

        您也可以修改requirements.txt,安装其他所需的第三方Python包。此外,requirements.txt文件中可以指定多个Python依赖。

    2. 在Python作业中使用第三方Python包deps.zip。

      1. 登录实时计算控制台。

      2. 单击目标工作空间操作列下的控制台

      3. 在左侧导航栏,单击文件管理,上传deps.zip。

      4. 运维中心 > 作业运维页面单击目标作业名称,在部署详情页签基础配置区域,单击编辑后,在Python Libraries项,选择deps.zip。

    1. 单击保存

使用JAR包

如果您的Flink Python作业中使用了Java类,例如作业中使用了Connector或者Java自定义函数时,可以通过如下方式来指定Connector或者Java自定义函数的JAR包。

  1. 登录实时计算控制台。

  2. 单击目标工作空间操作列下的控制台

  3. 在左侧导航栏,单击文件管理,上传需要使用的JAR包。

  4. 运维中心 > 作业运维页面单击目标作业名称,在部署详情页签基础配置区域,单击编辑后,在附加依赖文件项,选择需要使用的JAR包。

  5. 运行参数配置区域其他配置项,添加配置信息。

    假如需要依赖多个JAR包,且名字分别为jar1.jar和jar2.jar,配置内容如下。

    pipeline.classpaths: 'file:///flink/usrlib/jar1.jar;file:///flink/usrlib/jar2.jar'
  6. 单击保存

使用数据文件

说明

Flink暂不支持通过上传数据文件的方式来进行python作业调试。

下面将从两个场景为您介绍如何使用数据文件:

  • 通过Python Archives选项方式

    如果您的数据文件的数量比较多时,您可以将数据文件打包成一个ZIP包,然后通过如下方式在Python作业中使用。操作步骤如下:

    1. 登录实时计算控制台。

    2. 单击目标工作空间操作列下的控制台

    3. 在左侧导航栏,单击文件管理,上传目标数据文件ZIP包。

    4. 运维中心 > 作业运维页面单击目标作业名称,在部署详情页签基础配置区域,单击编辑后,在Python Archives项,选择需要使用的数据文件ZIP包。

    5. 在Python自定义函数中,可以通过如下方式访问数据文件。假如数据文件所在压缩包名称为mydata.zip。

      def map():with open("mydata.zip/mydata/data.txt") as f:...
  • 通过附加依赖文件选项

    如果您的数据文件数量比较少时,可以通过如下方式在Python作业中使用。操作步骤如下:

    1. 登录实时计算控制台。

    2. 单击目标工作空间操作列下的控制台

    3. 在左侧导航栏,单击文件管理,上传目标数据文件。

    4. 运维中心 > 作业运维页面单击目标作业名称,在部署详情页签基础配置区域,单击编辑后,,在附加依赖文件项,选择需要的数据文件。

    5. 在Python自定义函数中,可以通过如下方式访问数据文件。以数据文件名称为data.txt为例的代码如下。

      def map():with open("/flink/usrlib/data.txt") as f:...


http://www.ppmy.cn/news/1543021.html

相关文章

【Eclipse系列】Eclipse版本与jdk对应版本

Eclipse版本和JDK版本对应关系:Eclipse/Installation - Eclipsepedia 以下为整理内容: 版本代号平台版本版本发行期需要的JDK最低版本Callisto3.22006-6-26JDK1.4Europa3.32007-6-27JDK1.5Ganymede3.42008-6-25JDK1.5Galileo3.52009-6-24JDK1.5Helios3.6…

为什么音频采样率通常是44.1kHz?

计算机中操作和存储只能是类似10101011这样的二进制数字,对于自然界中音频原始信号则为模拟信号,如下一个1kHz的音频信号,如果要转化为数字音频信号,则需要采样, 通常我们会采用44.1kHz的频率来进行采样,在…

Bash、sh 和 Shell都弄混了?

在Linux和Unix系统中,Bash、sh 和 Shell 都与命令行解释器相关,但它们各自的含义和作用略有不同。以下是它们之间的关系和区别: Shell Shell 是一个通用术语,指的是操作系统中负责解释和执行用户命令的程序。它是用户与操作系统…

ERC论文阅读(03)--SPCL论文阅读笔记(2024-10-29)

SPCL论文阅读笔记 论文中心思想 这篇论文是研究ERC任务的论文,作者提出了监督原型对比学习的方法用于ERC任务。 论文 EMNLP2022 paper “Supervised Prototypical Contrastive Learning for Emotion Recognition in Conversation” 现存问题 现存的使用监督对…

【HarmonyOS】判断应用是否已安装

【HarmonyOS】判断应用是否已安装 前言 在鸿蒙中判断应用是否已安全,只是通过包名是无法判断应用安装与否。在鸿蒙里新增了一种判断应用安装的工具方法,即:canOpenLink。 使用该工具函数的前提是,本应用配置了查询标签querySch…

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书) 文章目录 从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书)一、前言二、vue项目部署前配置1、vite.config.js 增加…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据:菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

嵌入式软件 Bug 排查与调试技巧

目录 1、准备工作 2、打印调试 实现步骤 注意事项 3、断点调试 4、观察点调试 5、远程调试 6、内存分析 内存泄漏检测 栈溢出检测 7、异常处理 8、性能分析 9、逻辑分析仪 10、示波器 11、常见bug类型 12、调试策略 1、准备工作 硬件工具准备 调试器:例如 J - …