python flink_Flink - 入门学习

本文简要介绍了Flink作为批流一体化数据处理框架的基础知识,并提供了安装PyFlink、设置运行环境以及开发与测试Flink作业的详细步骤。通过Docker启动Flink集群,使用Python API编写并执行Word Count示例,展示了如何在Flink上运行Python任务。
摘要由CSDN通过智能技术生成

1. 前言

Flink是批流一体化的数据处理框架,性能卓越,诸多大厂都在使用。

由于时间原因,本篇文章只简单了解一下,后续会深入分析,以及经典case分享。

2. 安装pyflink

安装虚拟环境和pyflink

$ conda create -n py36 python=3.6

$ conda activate py36

$ conda install Cython

$ python -m pip install apache-flink==1.10.1

runtime需要jdk,下载jdk 10后解压,配置env

export JAVA_HOME=/home/xxx/java/jdk-10.0.2

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

flink 1.10 最高支持python3.7,暂不支持py38

通过clone repo的方式,可以安装最新版本的pyflink

3. run server

创建一个docker-compose,启动flink单机cluster

$ cat docker-compose.yml

version: "2.1"

services:

jobmanager:

image: ${FLINK_DOCKER_IMAGE_NAME:-flink}

expose:

- "6123"

<
### 使用 Python 进行 Flink 入门 #### 创建环境设置并初始化 `TableEnvironment` 编写 Apache Flink 应用程序时,`TableEnvironment` 是核心组件之一。对于批处理模式下的应用程序来说,创建该对象的方式如下所示: ```python from pyflink.table import EnvironmentSettings, TableEnvironment settings = EnvironmentSettings.new_instance().in_batch_mode().use_blink_planner().build() t_env = TableEnvironment.create(settings) ``` 此部分代码定义了一个新的执行环境,并指定了使用 Blink Planner 来规划查询逻辑[^3]。 #### 定义数据源与转换操作 为了展示基本的数据读取和变换过程,在这里可以构建一个简单的例子来说明如何加载本地 CSV 文件作为输入源,并对其进行简单过滤: ```python # 注册表名为 'my_table' t_env.execute_sql(""" CREATE TABLE my_table ( id BIGINT, name STRING, age INT ) WITH ( 'connector' = 'filesystem', 'path' = '/path/to/csv/file.csv', 'format' = 'csv' ) """) # 查询年龄大于等于18岁的记录 result = t_env.sql_query("SELECT * FROM my_table WHERE age >= 18") ``` 上述 SQL 语句用于描述数据结构以及指定存储位置;而后续的查询则实现了基于条件的选择功能[^4]。 #### 输出结果到外部系统 当完成了所有的计算之后,通常还需要把最终的结果保存下来或者发送给其他服务端点。下面这段代码展示了怎样将之前得到的结果集写入 MySQL 数据库中去: ```python sink_ddl = """ CREATE TABLE mysql_sink ( id BIGINT, name STRING, age INT ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://localhost:3306/testdb?user=root&password=passw0rd!', 'table-name' = 'output_table' ) """ t_env.execute_sql(sink_ddl) statement_set = t_env.createStatementSet() statement_set.addInsertSql("INSERT INTO mysql_sink SELECT * FROM result").execute() ``` 这里的 DDL (Data Definition Language) 脚本负责配置 JDBC Connector 并建立目标表格;最后一步则是实际执行插入命令[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值