当前位置: 首页 > news >正文

爱站网是干嘛的怎么做废品收购网站

爱站网是干嘛的,怎么做废品收购网站,如何做求婚网站,北京网站建设收费在大数据处理领域,Apache Flink 以其卓越的流批一体化处理能力脱颖而出,成为众多企业构建实时数据应用的首选框架。本文将带领你迈出 Flink 学习的第一步,从基础概念入手,逐步引导你编写并运行第一个 Flink 程序 —— 经典的 Word…

在大数据处理领域,Apache Flink 以其卓越的流批一体化处理能力脱颖而出,成为众多企业构建实时数据应用的首选框架。本文将带领你迈出 Flink 学习的第一步,从基础概念入手,逐步引导你编写并运行第一个 Flink 程序 —— 经典的 WordCount,让你亲身感受 Flink 在实时数据流处理方面的强大魅力。

一、Flink 基础概念速览​
1.1 什么是 Flink​

Flink 是一个分布式流批一体化开源平台,旨在对无界和有界数据流进行有状态计算。无界数据流是一种持续不断产生的数据,例如网站的实时访问日志、传感器的实时监测数据等;有界数据流则是在有限时间内产生的数据,像一份固定的历史订单数据集。Flink 通过统一的编程模型和运行时引擎,无缝处理这两种类型的数据,这是它区别于其他大数据框架的显著特性。​

1.2 Flink 的核心特性​
  • 流批一体:Flink 的 DataStream API 用于处理无界数据流,DataSet API 用于处理有界数据流,但底层运行时引擎高度统一。这意味着开发者可以使用相似的编程范式处理不同性质的数据,大大降低了开发和维护成本。例如,在一个电商系统中,既可以使用 Flink 实时分析用户的实时购买行为(流处理),也可以定期分析历史订单数据(批处理),且代码逻辑有很高的复用性。​
  • 低延迟、高吞吐:Flink 通过高效的内存管理、流水线执行模型以及对分布式计算的优化,能够在保证低延迟的同时实现高吞吐量。在实时推荐系统中,需要快速响应用户的操作,根据用户实时行为推荐相关商品,Flink 能够满足这种对延迟敏感的场景需求,同时处理大规模的用户行为数据。​
  • 精确一次语义:在复杂的分布式数据处理场景中,数据可能会因为网络故障、节点故障等原因出现重复处理的情况。Flink 的精确一次(Exactly - Once)语义保证了无论发生什么故障,每个输入事件都只会被处理一次,确保了数据处理结果的准确性。例如在金融交易系统中,每一笔交易的处理结果必须准确无误,Flink 的精确一次语义就能提供坚实的保障。​
1.3 Flink 的应用场景​
  • 实时数据分析:企业需要实时了解业务运营状况,通过对实时产生的业务数据进行分析,及时做出决策。如电商平台实时分析商品的销售趋势、用户的购买偏好,以便及时调整营销策略。​
  • 实时数据集成:从多个数据源实时采集数据,并将其整合到数据仓库或其他存储系统中。例如将来自 MySQL、Kafka 等不同数据源的数据实时同步到 Hive 数据仓库,为后续的数据分析提供基础。​
  • 流上机器学习:利用实时数据流训练和更新机器学习模型,实现模型的在线学习和实时预测。在智能客服系统中,根据用户实时输入的问题,利用在线更新的机器学习模型快速给出准确回答。​
二、搭建 Flink 开发环境​

在编写 Flink 程序之前,需要搭建好开发环境。这里以 Maven 项目为例,在 Java 环境下进行开发。​

2.1 安装 Java​

确保本地安装了 Java 环境,并且配置了JAVA_HOME环境变量。可以通过在命令行中输入java -version来检查 Java 是否安装成功。​

2.2 安装 Maven​

Maven 是一个项目管理工具,用于构建和管理 Java 项目。从 Maven 官网下载并解压安装包,然后配置MAVEN_HOME环境变量,将%MAVEN_HOME%\bin添加到系统的PATH变量中。在命令行中输入mvn -version验证 Maven 安装是否成功。​

2.3 创建 Maven 项目​

打开命令行,进入到合适的目录下,执行以下命令创建一个 Maven 项目:

mvn archetype:generate -DgroupId=com.example -DartifactId=flink -example -DarchetypeArtifactId=maven -archetype -quickstart -DinteractiveMode=false

这将创建一个名为flink - example的 Maven 项目,项目结构如下:

flink - example
├── pom.xml
└── src├── main│   ├── java│   │   └── com│   │       └── example│   │           └── App.java│   └── resources└── test├── java│   └── com│       └── example│           └── AppTest.java└── resources
2.4 添加 Flink 依赖​

在项目的pom.xml文件中添加 Flink 相关依赖。这里以 Flink 1.14.2 版本为例,添加如下依赖:

<dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink - java</artifactId><version>1.14.2</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink - streaming - java_2.12</artifactId><version>1.14.2</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink - runtime_2.12</artifactId><version>1.14.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j - api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j - simple</artifactId><version>1.7.32</version></dependency>
</dependencies>

这些依赖分别包含了 Flink 的核心 Java 库、流处理库、运行时库以及日志相关库。其中flink - streaming - java_2.12中的2.12表示 Scala 的版本,因为 Flink 是基于 Scala 开发的,这里使用的是与 Scala 2.12 兼容的版本。

三、编写第一个 Flink 程序 ——WordCount​
3.1 理解 WordCount​

WordCount 是大数据领域的经典入门程序,其功能是统计一段文本中每个单词出现的次数。在 Flink 中,我们可以使用流处理的方式来实现 WordCount,实时统计源源不断输入的文本流中的单词计数。​

3.2 代码实现​

在src/main/java/com/example目录下创建一个新的 Java 类,命名为WordCount.java,编写如下代码:

import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;import java.util.Arrays;public class WordCount {public static void main(String[] args) throws Exception {// 创建流执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 从文件中读取数据作为数据源,这里假设文件名为input.txt,位于项目根目录下DataStreamSource<String> text = env.readTextFile("input.txt");// 对读取到的文本进行处理SingleOutputStreamOperator<WordWithCount> result = text.flatMap((String line, Collector<String> out) -> {Arrays.stream(line.split(" ")).forEach(out::collect);}).map(word -> new WordWithCount(word, 1)).keyBy(WordWithCount::getWord).sum("count");// 打印结果result.print();// 执行任务env.execute("WordCount Example");}// 定义一个POJO类用于存储单词及其计数public static class WordWithCount {private String word;private int count;public WordWithCount() {}public WordWithCount(String word, int count) {this.word = word;this.count = count;}public String getWord() {return word;}public void setWord(String word) {this.word = word;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic String toString() {return "WordWithCount{" +"word='" + word + '\'' +", count=" + count +'}';}}
}
3.3 代码解析​
  1. 创建流执行环境:
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    StreamExecutionEnvironment是 Flink 流处理的入口点,通过getExecutionEnvironment方法获取一个运行时环境实例,它负责管理任务的执行和资源分配。

  2. 读取数据源:

    DataStreamSource<String> text = env.readTextFile("input.txt");

    这里使用readTextFile方法从本地文件input.txt中读取数据,将文件中的每一行作为一个元素,创建一个DataStreamSource对象,它表示一个数据流的源头。

  3. 数据处理:

    .flatMap((String line, Collector<String> out) -> {Arrays.stream(line.split(" ")).forEach(out::collect);
    })

    flatMap操作将输入的每一行文本按空格分割成多个单词,并将这些单词输出到下游。这里使用 Java 8 的Arrays.stream和forEach方法实现单词分割和输出。

    .map(word -> new WordWithCount(word, 1))

    map操作将每个单词映射为一个WordWithCount对象,其中单词作为word字段,初始计数为 1。

    .keyBy(WordWithCount::getWord)

    keyBy操作根据WordWithCount对象的word字段对数据流进行分组,相同单词的数据会被分到同一个组中,以便后续进行聚合操作。

    .sum("count");

    sum操作对每个组内的count字段进行求和,统计每个单词出现的总次数。

  4. 打印结果:

    result.print();

    print操作将处理后的结果打印到控制台,方便查看。在实际生产环境中,可能会将结果输出到其他存储系统,如 Kafka、HBase 等。

  5. 执行任务:

    env.execute("WordCount Example");

    execute方法触发任务的执行,参数"WordCount Example"是任务的名称,用于在 Flink 的 Web UI 中标识该任务。

四、运行 WordCount 程序​
4.1 准备测试数据​

在项目根目录下创建一个input.txt文件,输入一些文本内容,例如:

hello world
hello flink
flink is great
4.2 运行程序​

在命令行中进入项目目录,执行以下命令运行程序:

mvn clean package
java -cp target/flink - example - 1.0 - SNAPSHOT.jar com.example.WordCount

mvn clean package命令用于清理项目并打包成一个可执行的 JAR 文件,java -cp命令用于运行打包后的 JAR 文件,指定主类为com.example.WordCount。​

运行成功后,控制台会输出每个单词及其出现的次数,类似如下结果:

WordWithCount{word='hello', count=2}
WordWithCount{word='world', count=1}
WordWithCount{word='flink', count=2}
WordWithCount{word='is', count=1}
WordWithCount{word='great', count=1}

通过这个简单的 WordCount 程序,你已经初步体验了 Flink 在实时数据流处理方面的基本操作流程。后续文章中,我们将深入探讨 Flink 的更多高级特性,如窗口操作、状态管理、Flink SQL 等,逐步提升你对 Flink 的掌握程度,构建更加复杂和强大的实时数据应用。

http://www.dtcms.com/a/536523.html

相关文章:

  • 如何从 GitHub 大仓库中只下载指定目录
  • LeetCode 22. 括号生成
  • IHR 2025 | 移远通信携Robrain AI解决方案亮相,开启机器人全感官交互新纪元
  • 淘宝客做网站自动更新写wordpress插件吗
  • 金融--------
  • 视频号AI口播:中老年赛道发力
  • 「LegionSpace Hackathon」 通付盾第六届黑客松即将开启
  • STM32外设面试速通:UART、I2C、SPI、DMA、RAM/FLASH与ADC/DAC
  • “芯”动力,净无止境:华芯微特的吸尘器控制方案详解
  • FFmpeg 基本数据结构 AVIOContext分析
  • SAP SD系统开票审批功能分享
  • 有口碑的常州网站优化wordpress发邮件慢
  • 注册中心(discovery)和配置中心(config)
  • Abaqus部件间Cohesive单元建立的共面识别技术
  • 建设网站有哪些步骤金螳螂装饰公司
  • 商城网站建设公司排行在线代理网页浏览
  • 【Linux】多线程同步与互斥机制详解:从互斥锁到条件变量与信号量
  • iOS混淆实战用多工具组合把IPA加固做成可复用的工程能力(iOS混淆 IPA加固 无源码混淆
  • RTPENGINE ISSUE 1818(silent-timeout有关)
  • LeetCode:231. 2 的幂/136. 只出现一次的数字
  • Flutter fedaora42 64位安装 避坑指南
  • Docker自动化部署与配置详解③
  • istio业务返回503问题
  • 建设服装网站的意义国内免费空间可以做什么网站
  • 餐饮商城网站制作多少钱动漫设计一年学费多少
  • Web 前端工具全流程指南 从开发到调试的完整生态体系
  • 清理谷歌浏览器垃圾文件 Chrome “User Data”
  • 科技创新的重要前沿是新网站前期seo怎么做
  • [论文笔记•(多智能体)]LLMs Can Simulate Standardized Patients via Agent Coevolution
  • CAS:2055198-03-1,PC-Biotin-PEG4-NHS carbonate在分子标记与生物分析中的应用潜力