Flink实现WordCount

一、Flink概述

Apache Flink是一个分布式计算引擎,能够处理有限数据流和无限数据流。 它可以为Spark,Hadoop和Storm等现有框架提供替代方案,并提供更好的性能和可扩展性。

Flink提供了一种称为流处理的新型计算模式,这种计算模式可以处理事件流,并支持非常低的延迟和高的吞吐量。 Flink还提供了存储和处理批处理数据的能力。 因此,Flink可以处理所有类型的数据流,从简单的请求响应到数据挖掘和复杂的事件处理。

二、WordCount的概念

WordCount是一个可以统计文档中每个单词出现次数的程序。 它是 分布式系统的”Hello, World!”。 在分布式系统中,您需要处理文件或流,并将其划分为片段,以在多个节点上并行处理。 在WordCount示例中,文件被划分为“行”(每行文本),并且每个节点处理一部分数据(各行文本的单词计数)。

三、Flink实现WordCount

1、环境设置

首先,在您的本地机器上安装Java,然后下载并安装Flink。 flinkwordcount程序可以在本地或分布式集群上运行。

2、创建Flink项目

使用Eclipse或IntelliJ等任何一个Java IDE,创建一个Maven项目,该项目包含所需的Flink依赖项。 您可以使用以下依赖关系在POM.xml中获取所需的库:


<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-parent</artifactId>
    <version>1.14.2</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-core</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.12</artifactId>
</dependency>

3、实现Flink WordCount代码

下面展示了Flink WordCount的代码:


package com.flink.example;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.core.fs.FileSystem.WriteMode;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.FileProcessingMode;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;

public class FlinkWordCount {

    public static void main(String[] args) throws Exception {

        final ParameterTool params = ParameterTool.fromArgs(args);
        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        env.getConfig().setGlobalJobParameters(params);
        DataStream text;
        final StreamExecutionEnvironment see = StreamExecutionEnvironment.getExecutionEnvironment();

        text = see.readTextFile(params.get("input"));
        DataStream counts = text
                .flatMap(new FlatMapFunction() {
                    @Override
                    public void flatMap(String value, Collector out) {
                        for (String word : value.split("\\s")) {
                            out.collect(new WordCount(word, 1));
                        }
                    }
                })
                .keyBy("word")
                .timeWindow(Time.seconds(5))
                .sum("count");

        counts.writeAsText(params.get("output"), WriteMode.OVERWRITE);
        see.execute();
    }

    public static class WordCount {
        public String word;
        public int count;

        public WordCount() {}

        public WordCount(String word, int count) {
            this.word = word;
            this.count = count;
        }

        @Override
        public String toString() {
            return "WordCount{" +
                    "word='" + word + '\'' +
                    ", count=" + count +
                    '}';
        }
    }
}

4、代码解析

首先,我们从参数工具创建带有ParameterTool的ExecutionEnvironment对象。 然后,我们读取指定的输入文件并使用flatMap函数将其转换为键值对。 我们使用keyBy函数对WordCount(word,count)键入过的流”word”进行分组,并使累加器累加值。 该代码使用窗口运算符,它将一定量的数据视为一个数据集,并在整个数据集上应用函数计算。

5、编译和运行

编译和运行flinkwordcount程序,使用以下命令:


./bin/flink run /path/to/flinkwordcount-0.0.1.jar --input /path/to/input/file --output /path/to/output/directory

6、结果输出

运行flinkwordcount程序后,它将在指定的输出目录中生成一个文本文件,并在其中提供WordCount结果。以下是输出文件的示例:


(hello, 1)
(world, 1)
(hello, 1)

四、总结

在本文中,我们学习了Apache Flink,并看到如何使用它来实现分布式系统中的WordCount程序。 Flink提供了一种称为流处理的新型计算模式,该计算模式可以处理事件流,并支持非常低的延迟和高的吞吐量。 我们看到了如何使用flinkwordcount程序来计算文档中每个单词的出现次数。希望这篇文章对您有所帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/283656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 08:08
下一篇 2024-12-22 08:09

相关推荐

  • Flink消费Kafka

    一、Flink消费Kafka简介 Apache Flink是一个分布式流处理引擎,提供在大规模数据上实时计算的能力,同时也支持批处理模式。在结合Kafka使用时,Flink可以通过…

    编程 2025-04-25
  • Flink Github详解

    一、Flink介绍 Apache Flink是一个分布式流处理和批处理系统。它可以在同一框架中处理有限数据和无限数据,它还提供了强大的事件时间处理语义和低延迟的处理。Flink最初…

    编程 2025-04-23
  • Flink面试题及答案分析

    一、Flink简介 Flink是一个基于流处理的分布式数据处理引擎,可以进行实时数据分析、流式数据处理、批处理等多种数据处理方式,具有高性能、低延迟等特点。它可以处理不同数据源的数…

    编程 2025-04-23
  • Flink批处理详解

    一、Flink批处理性能 Flink是由Apache组织开源的大数据处理框架,支持批处理和流处理。作为一个优秀的批处理框架,Flink具有很强的性能优势。Flink的数据处理效率很…

    编程 2025-04-13
  • ScalaWordCount——Scala实现的WordCount案例

    一、概述 ScalaWordCount是一款基于Hadoop MapReduce实现的词频统计系统。它是使用Scala语言编写的开源软件,对于大规模数据处理提供了高效、简洁、可靠的…

    编程 2025-04-13
  • Flink单机部署教程

    如果您想在单机上搭建一套数据处理平台,那么Apache Flink可能是您的一个不错的选择。Flink 是一个分布式的数据流和批处理的框架。它提供了高效、分布式、容错、可伸缩的批流…

    编程 2025-04-12
  • 深入剖析Flink面试题

    一、Flink概述 Flink是一个基于流处理引擎的开源框架,可以处理无界和有界数据流。它提供了低延迟、高吞吐、高可用、高容错性的特性,具有良好的状态管理、窗口计算、以及实时流数据…

    编程 2025-03-12
  • Apache Flink Join详解

    一、背景介绍 Apache Flink是一个流式数据处理引擎,具有高效、高吞吐、低延迟和高容错性的特点。Flink的一个重要功能是join操作,它可以将两个或多个数据流中的数据进行…

    编程 2025-02-24
  • Flink Web UI: 一个强大的工具

    Apache Flink是一个流式计算引擎,用于高效处理大规模、实时和批量数据。Flink的Web用户界面(UI)是一个灵活的、可自定义的监控工具,它为Flink用户提供了一个多功…

    编程 2025-02-05
  • Flink面试指南

    一、Flink介绍 Flink是一个开源的分布式流处理引擎,支持高吞吐量、低延迟的数据流处理。Flink不仅支持无界流处理,还支持批处理。Flink提供了一套丰富的操作符,如map…

    编程 2025-01-20

发表回复

登录后才能评论