Flink单机和集群环境部署教程

目录

    • [一、Flink 单机环境部署](#一、Flink 单机环境部署)
      • [1. 环境准备](#1. 环境准备)
      • [2. 安装 Java](#2. 安装 Java)
      • [3. 下载并安装 Flink](#3. 下载并安装 Flink)
      • [4. 配置环境变量](#4. 配置环境变量)
      • [5. 配置 Flink](#5. 配置 Flink)
        • [配置 `flink-conf.yaml`](#配置 flink-conf.yaml)
        • [配置 `masters` 文件](#配置 masters 文件)
        • [配置 `workers` 文件](#配置 workers 文件)
      • [6. 启动 Flink](#6. 启动 Flink)
      • [7. 验证 Flink](#7. 验证 Flink)
      • 注意事项
    • [二、Flink 集群环境部署](#二、Flink 集群环境部署)
      • [1. 环境准备](#1. 环境准备)
      • [2. 配置 SSH 免密码登录](#2. 配置 SSH 免密码登录)
      • [3. 安装 Flink](#3. 安装 Flink)
      • [4. 配置 Flink 集群](#4. 配置 Flink 集群)
        • [配置 `flink-conf.yaml`](#配置 flink-conf.yaml)
        • [配置 `masters` 文件](#配置 masters 文件)
        • [配置 `workers` 文件](#配置 workers 文件)
      • [5. 启动 Flink 集群](#5. 启动 Flink 集群)
      • [6. 验证集群状态](#6. 验证集群状态)
      • 注意事项
    • [三、Flink 使用案例:Word Count](#三、Flink 使用案例:Word Count)
      • [使用 Java 实现 Flink Word Count](#使用 Java 实现 Flink Word Count)
        • [1. 编写 Java 程序](#1. 编写 Java 程序)
        • [2. 编译并打包 Java 程序](#2. 编译并打包 Java 程序)
        • [3. 运行 Java 程序](#3. 运行 Java 程序)
        • [4. 查看结果](#4. 查看结果)
      • [使用 Python 实现 Flink Word Count](#使用 Python 实现 Flink Word Count)
        • [1. 安装 Apache Beam](#1. 安装 Apache Beam)
        • [2. 编写 Python 程序](#2. 编写 Python 程序)
        • [3. 运行 Python 程序](#3. 运行 Python 程序)
        • [4. 查看结果](#4. 查看结果)
    • 总结

下面是 Apache Flink 的单机和集群环境部署教程,包含部署过程中的注意事项和一个使用案例。Apache Flink 是一个开源的流处理框架,用于处理实时数据流。

1. 环境准备

  • 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7)
  • Java:Flink 需要 Java 环境,推荐使用 OpenJDK 8 或 11。
  • Flink:下载并安装 Flink。

2. 安装 Java

在 Ubuntu 中:

bash 复制代码
sudo apt update
sudo apt install openjdk-11-jdk

在 CentOS 中:

bash 复制代码
sudo yum install java-11-openjdk

验证 Java 安装:

bash 复制代码
java -version

访问 Flink 官网 下载最新版本的 Flink。

bash 复制代码
wget https://downloads.apache.org/flink/flink-1.16.2/flink-1.16.2-bin-scala_2.12.tgz
tar -xzvf flink-1.16.2-bin-scala_2.12.tgz
mv flink-1.16.2 /usr/local/flink

4. 配置环境变量

编辑 ~/.bashrc 文件,添加以下内容:

bash 复制代码
export FLINK_HOME=/usr/local/flink
export PATH=$PATH:$FLINK_HOME/bin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

应用更改:

bash 复制代码
source ~/.bashrc

编辑 Flink 的配置文件,位于 $FLINK_HOME/conf

  • taskmanager.memory.process.size:任务管理器的内存配置。
  • jobmanager.rpc.address:JobManager 的主机地址。
yaml 复制代码
jobmanager.rpc.address: localhost
taskmanager.memory.process.size: 1024m
配置 masters 文件

在单机模式下,默认配置即可,无需修改。

配置 workers 文件

在单机模式下,默认配置即可,无需修改。

bash 复制代码
start-cluster.sh

访问 Flink Dashboard,确保 Flink 正常运行:

注意事项

  • 确保 Java 和 Flink 环境配置正确
  • 检查防火墙设置,确保 Flink 的端口可访问。
  • 内存配置 :根据实际需求调整 flink-conf.yaml 中的内存配置。

1. 环境准备

  • 多台服务器:至少 3 台(1 个 JobManager,2 个 TaskManager)。
  • 网络:确保各节点之间可以互相访问。
  • 操作系统:Linux(Ubuntu 或 CentOS)。
  • Java:在所有节点上安装 Java。
  • Flink:在所有节点上安装 Flink。

2. 配置 SSH 免密码登录

在 JobManager 节点上生成 SSH 密钥:

bash 复制代码
ssh-keygen -t rsa

将公钥复制到所有 TaskManager 节点:

bash 复制代码
ssh-copy-id user@taskmanager1
ssh-copy-id user@taskmanager2

在所有节点上安装 Flink,步骤与单机安装相同。

在所有节点上编辑 $FLINK_HOME/conf/flink-conf.yaml,配置如下内容:

yaml 复制代码
jobmanager.rpc.address: master
taskmanager.numberOfTaskSlots: 2
parallelism.default: 1
taskmanager.memory.process.size: 1024m
  • jobmanager.rpc.address:设置为 JobManager 的主机名。
  • taskmanager.numberOfTaskSlots:每个 TaskManager 的任务槽数量。
  • parallelism.default:默认的并行度。
配置 masters 文件

在 JobManager 节点上编辑 $FLINK_HOME/conf/masters 文件,添加 JobManager 的主机名:

plaintext 复制代码
master:8081
配置 workers 文件

在 JobManager 节点上编辑 $FLINK_HOME/conf/workers 文件,添加所有 TaskManager 节点的主机名:

plaintext 复制代码
taskmanager1
taskmanager2

在 JobManager 节点上启动 Flink 集群:

bash 复制代码
start-cluster.sh

6. 验证集群状态

访问 Flink Dashboard,确保所有节点正常运行:

注意事项

  • 确保 SSH 配置正确,JobManager 节点需要通过 SSH 无密码访问 TaskManager 节点。
  • 内存和资源配置 :根据实际需求调整 flink-conf.yaml 中的资源配置。
  • 时钟同步 :使用 ntpdchrony 确保所有节点的时钟同步。
  • 网络配置:确保各节点之间的网络连接正常。
1. 编写 Java 程序
java 复制代码
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.core.fs.FileSystem;

import java.util.Arrays;

public class WordCount {

    public static void main(String[] args) throws Exception {
        // 获取运行参数
        final ParameterTool params = ParameterTool.fromArgs(args);

        // 设置执行环境
        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        // 从输入文件中读取数据
        env.readTextFile(params.get("input"))
                // 拆分成单词
                .flatMap((String value, Collector<Tuple2<String, Integer>> out) -> {
                    Arrays.stream(value.split("\\W+"))
                          .forEach(word -> out.collect(new Tuple2<>(word, 1)));
                })
                .returns(TupleTypeInfo.getBasicTupleTypeInfo(String.class, Integer.class))
                // 按单词分组
                .groupBy(0)
                // 统计每个单词的出现次数
                .sum(1)
                // 将结果保存到输出文件
                .writeAsCsv(params.get("output"), FileSystem.WriteMode.OVERWRITE);

        // 执行程序
        env.execute("Word Count Example");
    }
}
2. 编译并打包 Java 程序

确保你已经安装了 Maven,并在 pom.xml 文件中配置了 Flink 依赖:

xml 复制代码
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
    <version>1.16.2</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.12</artifactId>
    <version>1.16.2</version>
</dependency>

编译并打包:

bash 复制代码
mvn clean package
3. 运行 Java 程序

将输入文件上传到 HDFS 或本地文件系统:

bash 复制代码
hdfs dfs -put localfile.txt /user/flink/input

运行 Flink 应用:

bash 复制代码
flink run -c com.example.WordCount target/wordcount-1.0-SNAPSHOT.jar --input /user/flink/input --output /user/flink/output
4. 查看结果
bash 复制代码
hdfs dfs -cat /user/flink/output/part-00000

可以使用 Apache Beam 的 Python API 来实现 Flink 版的 Word Count。

1. 安装 Apache Beam
bash 复制代码
pip install apache-beam
2. 编写 Python 程序

创建 wordcount.py

python 复制代码
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

def run():
    # 创建 PipelineOptions
    options = PipelineOptions(
        runner='FlinkRunner',
        flink_master='localhost:8081',
        environment_type='LOOPBACK'
    )

    # 创建管道
    with beam.Pipeline(options=options) as p:
        # 读取输入文件
        (p
         | 'Read' >> beam.io.ReadFromText('input.txt')
         | 'Split' >> beam.FlatMap(lambda x: x.split())
         | 'PairWithOne' >> beam.Map(lambda x: (x, 1))
         | 'GroupAndSum' >> beam.CombinePerKey(sum)
         | 'Write' >> beam.io.WriteToText('output.txt')
        )

if __name__ == '__main__':
    run()
3. 运行 Python 程序
bash 复制代码
python wordcount.py
4. 查看结果
bash 复制代码
cat output.txt-00000-of-00001

总结

通过以上步骤,我们成功部署了 Flink 单机和集群环境,并实现了一个简单的 Word Count 应用。Flink 提供了强大的流处理和批处理能力,可以在多种场景下处理实时数据。

部署过程中的注意事项

  • 确保 Java 和 Flink 环境配置正确
  • 检查网络配置,确保各节点之间的通信正常。
  • 合理分配资源,根据集群规模和任务需求调整 Flink 的资源配置。
  • 时钟同步 :使用 ntpdchrony 确保所有节点的时钟同步。
  • 监控集群状态,定期检查节点状态和资源使用情况,及时处理故障节点。

通过合理配置和优化,Flink 可以在多种场景下提供高效的流处理和批处理能力,为大规模数据处理提供强有力的支持。

相关推荐
TDengine (老段)15 分钟前
TDengine 窗口预聚集
大数据·数据库·物联网·时序数据库·tdengine·iotdb
TDengine (老段)15 分钟前
TDengine JAVA 语言连接器
java·大数据·数据库·物联网·时序数据库·iot·tdengine
工作中的程序员8 小时前
flink Shuffle的总结
大数据·flink
EasyGBS12 小时前
如何实现两个视频融合EasyCVR平台的数据同步?详细步骤指南
大数据·网络·人工智能·安全·音视频
理智的煎蛋13 小时前
es 原生linux部署集群
大数据·linux·服务器·elasticsearch
谬了个大也13 小时前
es --- 集群数据迁移
大数据·elasticsearch
張萠飛15 小时前
flink cdc的source数据流如何配置事件时间,如何设置时间语义,分配时间戳并生成水位线
大数据·flink
一只专注api接口开发的技术猿15 小时前
京东API智能风控引擎:基于行为分析识别恶意爬虫与异常调用
大数据·开发语言·前端·爬虫
三品PLM系统17 小时前
三品PLM研发管理软件如何构筑制造企业全产品生命周期管理?
大数据·运维·人工智能·安全·制造
viperrrrrrrrrr720 小时前
大数据学习(100)-kafka详解
大数据·学习·kafka