当前位置: 首页 > news >正文

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

您可以在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:...

相关文章:

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

您可以在Flink Python作业中使用自定义的Python虚拟环境、第三方Python包、JAR包和数据文件等,本文为您介绍如何在Python作业中使用这些依赖。 使用自定义的Python虚拟环境 说明 VVR 4.x仅支持3.7版本的Python虚拟环境,VVR 6.x及以上的版本无此限制&a…...

MySql如何实现分布式锁

本篇我们使用mysql实现一个分布式锁。 环境:mysql8,navicat,maven,springboot2.3.11,mybatis-plus 分布式锁的功能 1,分布式锁使用者位于不同的机器中,锁获取成功之后,才可以对共享资源进行操作 2,锁具有重入的功能:即一个使用…...

「行内揭秘」 SQLynx数据库界的“小众宝藏”?

数据库界的“小众宝藏”?Navicat老大哥地位稳如泰山,但这位“SQLynx”小弟也不容小觑!👀 别看它小众,SQLynx在处理数据库事务上那可是丝毫不含糊,无论你是Windows Linux和Mac,甚至银河麒麟统信都…...

【已解决】【MySQL】IDEA配置数据库 报错 未配置SQL方言 无法使用SQL提示

IDEA配置数据库的步骤 下载插件 添加数据源 新建--->选择数据源MySQL 页面展示: 主机名:一般都是localhost不用改端口:填写自己的端口号用户:填写自己的用户名密码:填写自己设置的密码数据库:填写需要…...

js 通过filter 实现扁平化数据tree

...

Android 开发 调节声音 SeekBar自定义样式

效果图 xml布局 mipmap/seekbar图片随意一张图都可以&#xff0c;这里我的图就不贴出来了 <SeekBarandroid:id"id/seekBar"android:layout_marginLeft"8dp"android:layout_width"377dp"android:layout_height"8dp"android:layou…...

UART-通用异步收发器

1. UART的基本工作原理 UART通信主要有两个部分构成&#xff1a;发送器和接收器&#xff0c;也就是我们常见的&#xff08;RX接收&#xff0c;TX发送&#xff09;两个独立的线路来实现数据的双向传输&#xff0c;由于是异步的&#xff0c;UART并不需要时钟信号&#xff0c;而是…...

Linux——— 信号

文章目录 前言&#xff1a;引入信号生活中的例子信号概念见一见Linux中的信号 浅度理解信号信号处理&#xff08;浅谈&#xff09;:如何自定义捕捉 信号保存&#xff08;浅谈&#xff09; 信号产生系统调用产生异常产生&#xff1a;浅谈除0异常浅谈解引用野指针异常Core &&…...

安全见闻-web安全

web安全 一、web程序简介 1. Web程序的基本构成 2. 工作流程 3. 安全性 二、JavaScript代码库 1. 代码库的概念和用途 2. 常见的代码库 三、框架 1. 常见的前端框架 2. 常见的后端框架 四、数据库 1. 数据库的分类 2. 数据库的潜在漏洞 3. 学习数据库的重要性 五、…...

华为手机卸载系统应用的方法

摘要&#xff1a; 1.手机环境&#xff1a;手机需要开启开发者模式并使用usb连接电脑&#xff0c;并选择文件传输模式 2.电脑环境&#xff1a;使用鸿蒙工具箱进行傻瓜操作或安装adb工具进行命令卸载 3.鸿蒙工具箱和adb工具本质都是使用adb shell pm uninstall -k --user 0 xx…...

力扣算法笔记——生成随机数组

题目信息: 给两个随机数和N&#xff0c;生成M到N的随机不重复数组&#xff0c;且M<N。 示例&#xff1a;输入M 2, N5, 输出 [4,3,2,5]. 思路&#xff1a;洗牌算法&#xff0c;先遍历M到N之间所有的数字&#xff0c;将得到的结果存入一个集合中&#xff0c;将集合从后往前遍历…...

Anaconda和Pycharm超详细安装教程(2024版本+Win11)

详细安装&#xff1a;https://download.csdn.net/download/qq_40379132/89924782 一、安装Anaconda 1.1 下载Anaconda 在官方网站&#xff08;Free Download | Anaconda&#xff09;上下载适用于你的操作系统的 Anaconda 安装包。&#xff08;这里以windows为例&#xff09;…...

代码随想录:从中后/中前遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树 用分治思想&#xff0c;后序遍历是左右中&#xff0c;中序遍历是左中右&#xff0c;后序遍历的最后一个元素就是根节点&#xff0c; 在中序遍历中找到它的位置&#xff0c;它前面的为左子树&#xff0c;后面的为右子树&#xff0c;并能计…...

2-134 基于matlab的图像边缘检测

基于matlab的图像边缘检测&#xff0c;采用六种算子(分别是gabor、拉普拉斯、priwitt、robert、sobel、wallis微分算子&#xff09;&#xff0c;对图象进行边缘检测比较&#xff0c;输出边缘检测结果。可对比效果优劣。程序已调通&#xff0c;可直接运行。 下载源程序请点链接…...

【Java并发编程】线程池详解

一、简介 随着计算机行业的飞速发展&#xff0c;摩尔定律逐渐失效&#xff0c;多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池&#xff1a;ThreadPoolExecutor 类&#xff0c;帮助开发人员管理线程并方便地执行并行任务。了…...

ThingsBoard规则链节点:GPS Geofencing Events节点详解

引言 1. GPS Geofencing Events 节点简介 2. 节点配置 3. 使用场景 3.1 物流跟踪 3.2 资产管理 3.3 安全监控 3.4 农业监测 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 GPS Geofencing Events 是 ThingsBoard 规则链中的一个重要节…...

Jmeter基础篇(19)JSR223预处理器

前言 JSR223预处理器是Apache JMeter中的一个组件&#xff0c;它允许用户使用任何支持Java Scripting API (JSR 223) 的脚本语言来执行预处理任务。这个功能非常强大&#xff0c;因为它让测试人员能够利用如Groovy、JavaScript&#xff08;Nashorn引擎&#xff09;、BeanShell…...

通过js控制css变量

在JavaScript中&#xff0c;你可以通过操作CSS变量&#xff08;也称为自定义属性&#xff09;来动态改变样式。CSS变量在CSS中使用 – 前缀定义&#xff0c;例如 --main-color: red;。在JavaScript中&#xff0c;你可以使用 document.documentElement.style.setProperty 方法来…...

Docker:容器化和虚拟化

虚拟化 虚拟化是一种资源管理技术&#xff0c;它将计算机的各种实体资源&#xff08;如CPU、内存、磁盘空间、网络适配器等&#xff09;予以抽象、转换后呈现出来&#xff0c;并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或…...

OpenSSL

OpenSSL 概述 OpenSSL 是一个开源的、安全传输协议实现工具&#xff0c;广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中&#xff0c;OpenSSL 被用于构建和维护 SSL/TLS 通信&#xff0c;确保数据在传输过程中的机密性和完整性。 简单来…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...