Flink Python REPL(pyflink-shell)实战:本地/远程/YARN 三种启动方式 + Table API 交互开发流程

1、Python Shell 的定位与限制

  • 目前 只支持 Table API(不是 DataStream API 的交互式 REPL)

  • Shell 启动后会自动预绑定 TableEnvironment:

    • bt_env:BatchTableEnvironment
    • st_env:StreamTableEnvironment

Shell 会调用系统里的 python 命令,所以你的 Python 环境必须满足 PyFlink 运行要求(依赖、Python 版本、可能的 Java/类路径等以 Table API 安装指引为准)。

最快的本地体验方式:

bash 复制代码
# 安装 PyFlink
python -m pip install apache-flink

# 启动本地 shell(带集成 Flink 集群)
pyflink-shell.sh local

3、启动方式总览:local / remote / yarn

先记住一句话:
local (本地自带集群)适合学习/验证,remote (连已有集群)适合线上排障/临时跑作业,yarn(拉起独占集群)适合在 YARN 上做交互实验且不影响别的作业。

3.1 查看所有参数

bash 复制代码
pyflink-shell.sh --help

3.2 Local:本地集成集群

bash 复制代码
pyflink-shell.sh local

特点:

  • 自动启动一个本地 Flink 集群
  • 适合快速试 Table API/DDL/connector 配置

3.3 Remote:连接运行中的集群(Standalone/K8s 端口映射等)

bash 复制代码
pyflink-shell.sh remote <hostname> <portnumber>

这里的 <portnumber> 指 JobManager 的端口(对应你集群暴露的 JM RPC/REST 方式,按部署模式而定)。

bash 复制代码
# 例如:起 2 个 TaskManager
pyflink-shell.sh yarn -n 2

你可以额外指定:

  • -jm / --jobManagerMemory:JM 内存
  • -tm / --taskManagerMemory:TM 内存
  • -s / --slots:每个 TM slot 数
  • -nm / --name:YARN 应用名
  • -qu / --queue:YARN 队列

如果你之前已经用 Flink YARN Session 部署过集群,Shell 可以直接连接:

bash 复制代码
pyflink-shell.sh yarn

4、交互开发:Table API 一个最小闭环示例(流式)

下面示例演示:构造表 → 定义 filesystem sink → 写出 CSV → 本地读取结果。

python 复制代码
import tempfile
import os
import shutil

sink_path = tempfile.gettempdir() + '/streaming.csv'
if os.path.exists(sink_path):
    if os.path.isfile(sink_path):
        os.remove(sink_path)
    else:
        shutil.rmtree(sink_path)

s_env.set_parallelism(1)

t = st_env.from_elements(
    [(1, 'hi', 'hello'), (2, 'hi', 'hello')],
    ['a', 'b', 'c']
)

st_env.create_temporary_table(
    "stream_sink",
    TableDescriptor.for_connector("filesystem")
        .schema(
            Schema.new_builder()
                .column("a", DataTypes.BIGINT())
                .column("b", DataTypes.STRING())
                .column("c", DataTypes.STRING())
                .build()
        )
        .option("path", sink_path)
        .format(
            FormatDescriptor.for_format("csv")
                .option("field-delimiter", ",")
                .build()
        )
        .build()
)

t.select("a + 1, b, c").execute_insert("stream_sink").wait()

# 仅本地模式下:读取输出文件查看结果
with open(os.path.join(sink_path, os.listdir(sink_path)[0]), 'r') as f:
    print(f.read())

你在 shell 里最常用的操作模式就是这种:

  • from_elements 快速造数据
  • create_temporary_table 快速声明 sink/source
  • execute_insert(...).wait() 等待作业完成并查看结果

5、怎么选模式:一张"实用决策表"

  • 想快速验证 Table API/DDL、写个 demo:用 local
  • 想对接线上真实 connector、看真实数据但不想部署新集群:用 remote
  • 想在 YARN 上做实验但不影响现有 YARN Session:用 yarn -n ... 拉独占集群
  • 已经有 YARN Session 集群:用 pyflink-shell.sh yarn 直接连
相关推荐
lancyu1 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
zcmodeltech1 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
草莓橙子碗1 小时前
Claude 使用指南
开发语言·python
工具分享2 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI2 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造2 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏2 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
230万光年的思念3 小时前
分子动力学模拟参考文献
python
HongXu_CaiYi3 小时前
0103-python相关-函数、文件
python
vortex54 小时前
从Conda到UV:Python项目依赖管理的现代演进
python·conda·uv