Apache Flink 确实支持 Python 开发,主要通过 PyFlink 这个模块来实现。PyFlink 允许你使用 Python 编写、提交和管理 Flink 的数据流处理和批处理任务,非常适合喜欢用 Python 进行大数据开发的人。
下面是一份详细的 PyFlink 入门教程,包括安装、环境准备、Hello World 示例和一些常见问题的解答。
1. PyFlink 安装
环境要求:
- Python 3.7--3.11(推荐 3.8+)
- Java 1.8 或以上(建议 Java 11)
- 建议使用虚拟环境,如
venv
或conda
,以避免依赖冲突。
步骤一:安装 Java 环境(Ubuntu/Linux)
bash
sudo apt-get update
sudo apt-get install openjdk-11-jdk
步骤二:新建 Python 虚拟环境并激活
bash
python3 -m venv pyflink-env
source pyflink-env/bin/activate
步骤三:用 pip 安装 PyFlink
bash
pip install apache-flink
2. 验证安装
在终端输入以下命令,确认可以正常导入和显示版本:
python
python -c "import pyflink; print(pyflink.__version__)"
3. 第一个 PyFlink Hello World
写一个简单的 WordCount 程序,熟悉基本用法。
保存为 word_count.py
python
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.common.typeinfo import Types
env = StreamExecutionEnvironment.get_execution_environment()
# 创建数据流
text = env.from_collection(
collection=["hello world", "hello PyFlink"],
type_info=Types.STRING()
)
# 转换和统计单词出现次数
counts = (
text.flat_map(lambda s: s.split(), output_type=Types.STRING())
.map(lambda w: (w, 1), output_type=Types.TUPLE([Types.STRING(), Types.INT()])))
results = counts.key_by(lambda x: x[0]).reduce(lambda a, b: (a, a + b))
results.print()
env.execute("word_count_example")
运行:
bash
python word_count.py
如果输出如下,表示环境和功能都正常:
text
('hello', 2)
('world', 1)
('PyFlink', 1)
4. 常见问题排查
- Java 环境不同步 :确保
JAVA_HOME
设置正确,且和本机 Java 版本一致。 - 端口冲突或内存不足 :可以通过设置
env.set_parallelism(1)
降低资源需求。
5. 进阶阅读
- 官方 PyFlink 文档快速入门(英文)
- 中文 PyFlink 官方文档
- 可继续学习 PyFlink Table API、连接 Kafka、与 SQL 集成等。
总结:PyFlink 提供了较完善的 Python SDK 和类 PySpark 的开发体验,非常适合 Python 用户入门分布式数据流。建议按上述步骤搭建环境,亲自运行代码,加深理解。