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 直接连
相关推荐
Birdy_x13 小时前
接口自动化项目实战(1):requests请求封装
开发语言·前端·python
我爱学习好爱好爱13 小时前
Ansible 常用模块详解:lineinfile、replace、get_url实战
linux·python·ansible
一轮弯弯的明月15 小时前
Python基础-速通秘籍(下)
开发语言·笔记·python·学习
千寻girling16 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
第一程序员16 小时前
Python基础学习路径:非科班转码者的入门指南
python·github
u01368638216 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
smchaopiao17 小时前
Python中字典与列表合并的问题与解决方法
开发语言·python
卡尔特斯17 小时前
Ultralytics YOLO26 自动对指定标注文件夹区分标注素材脚本与训练脚本
python·openai
2501_9216494917 小时前
期货 Tick 级数据与基金净值历史数据 API 接口详解
开发语言·后端·python·websocket·金融·区块链
njidf17 小时前
实战:用Python开发一个简单的区块链
jvm·数据库·python