Flink 安装与入门:开启流式计算新时代

ops/2024/11/30 0:51:11/

 

       在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且对实时处理需求激增,流式计算应运而生,而 Flink 作为流式计算领域的佼佼者,正散发着独特魅力,接下来就让我们深入探究 Flink 的安装与入门知识。

 

一、流式计算简介

 

(一)数据的时效性

        日常工作中,数据处理按时间粒度不同,对时效性要求各异。处理年度、月度数据做统计分析、个性化推荐时,数据最新日期滞后数月无妨;但处理天级、小时级甚至更小粒度数据,像双 11 大屏实时展示、12306 系统实时监控、语雀异常日志即时处理等场景,传统收集 - 存储 - 分析流程难以满足高时效需求,急需新的数据处理模式。

 

(二)流式计算和批量计算

批量计算

        遵循统一收集数据、存储到数据库(DB),再对数据批量处理流程,维护数据表,在表上执行各种计算逻辑,处理全部数据后输出结果,如 Map Reduce、Hive、Spark Batch 常用于此模式生成离线报表。

流式计算

        针对持续流动数据流实时处理,数据边流入边计算,计算后丢弃。需提前定义好计算逻辑并提交至流式计算系统,且运行期间不可更改,每次小批量计算结果可实时展现,像 Storm、Flink 等流式分析引擎用于实时大屏、实时报表(Spark Struct Streaming 为准实时)。

 

(三)流式计算流程和特性

流程

提交流计算作业,等待流式数据触发,持续输出计算结果。

特性

具备实时、低延迟优势,处理无界(持续输入无终止)数据,计算连续进行,数据处理后丢弃。

 

(四)实时即未来

        大数据时代,数据量暴增、来源多样、产生快速,传统批处理与早期流式框架受限于延迟、吞吐量、容错及便捷性,难以满足如实时监控报警、风控、推荐系统需求,Flink 凭借天然流式特性与先进架构崭露头角。

 

二、Flink 概述

 

(一)Flink 的引入

大数据计算引擎发展历程中,有观点将其分四代:

第 1 代 ——Hadoop MapReduce

        MapReduce将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法

第 2 代 ——DAG 框架(Tez) + MapReduce

        为克服一代弊端,支持 DAG 框架诞生,如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。

第 3 代 ——Spark

        以Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。在这里,很多人也会认为第三代计算引擎也能够很好的运行批处理的 Job。

第 4 代 ——Flink

        突出对流计算支持与更高实时性,也能承担 Batch 任务、执行 DAG 运算,自带批处理、流处理、SQL 高层 API,流式计算性能、可靠性出众。

 

(二)Flink 发展史

诞生背景

        源于 2010 - 2014 年柏林等地大学开展的 Stratosphere 项目,2014 年 4 月捐赠给 Apache 软件基金会,同年 12 月成顶级项目;2008 年其前身已是研究项目,2014 年更名 Flink,用 Java 编写,后续历经多版本迭代,2019 年被阿里巴巴以 9000 万欧元收购其母公司 Data Artisans。

官方介绍

        官网(Apache Flink Documentation | Apache Flink)宣称其是为分布式、高性能、随时可用且准确流处理程序打造的开源框架,可兼做流处理与批处理。

Flink是一款分布式的计算引擎,它可以用来做流处理;也可以用来做批处理。

编程语言

        Flink官方提供了Java、Scala、Python语言接口用以开发Flink应用程序,但是Flink的源码是使用Java语言进行开发的,且Flink被阿里收购后,未来的主要编程语言都一直会是Java(因为阿里是Java重度使用者!),且GitHub上关于Flink的项目,大多数是使用Java语言编写的。所以课程中以Java语言为主进行Flink的学习讲解。

Flink 中的批和流

        批处理有界、持久、量大,适合离线统计流处理无界、实时,逐个处理数据项,用于实时统计。Flink 视有界数据集为无界流特例,区分有界流(有明确起止,可排序后处理)与无界流(需连续按序处理)。

        无界流:意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。

        有界流:也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为批处理。

性能比较

        运行在 Hadoop YARN 上时,性能 Flink > Spark > Hadoop (MR),因 Flink 支持增量迭代与自动优化,迭代次数多优势更显著。

应用场景

可以看到,各种行业的众多公司都在使用Flink。具体来看,一些行业中的典型应用有:

  1. 电商和市场营销

举例:实时数据报表、广告投放、实时推荐

  1. 物联网(IOT)

举例:传感器实时数据采集和显示、实时报警,交通运输业

  1. 物流配送和服务业

举例:订单状态实时更新、通知信息推送。

  1. 银行和金融业

举例:实时结算和通知推送,实时检测异常行为。

其他

        Flink 是目前开源社区中唯一一套集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。

        Spark 只能兼顾高吞吐和高性能特性,无法做到低延迟保障,因为Spark是用批处理来做流处理。

        Storm 只能支持低延时和高性能特性,无法满足高吞吐的要求。

 

三、Standalone 集群模式安装部署

conda deactivate 退出 base环境

Flink支持多种安装模式。

local(本地)——本地模式

standalone——独立模式,Flink自带集群,开发测试环境使用

standaloneHA—独立集群高可用模式,Flink自带集群,开发测试环境使用

yarn——计算资源统一由Hadoop YARN管理,生产环境测试

下载链接:

官网地址:https://archive.apache.org/dist/flink/flink-1.13.1/flink-1.13.1-bin-scala_2.11.tgz

通过网盘分享的文件:flink-1.13.6-bin-scala_2.11.tgz

上传Flink安装包,解压,配置环境变量

上传至/opt/modules/下

[root@hadoop11 modules]# tar -zxf flink-1.13.6-bin-scala_2.11.tgz -C /opt/installs/
[root@hadoop11 installs]# mv flink-1.13.6/ flink
[root@hadoop11 installs]# vim /etc/profile
export FLINK_HOME=/opt/installs/flink
export PATH=$PATH:$FLINK_HOME/bin
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop记得source /etc/profile

 

修改配置文件

① /opt/installs/flink/conf/flink-conf.yaml

jobmanager.rpc.address: bigdata01
taskmanager.numberOfTaskSlots: 2
web.submit.enable: true#历史服务器  如果HDFS是高可用,则复制core-site.xml、hdfs-site.xml到flink的conf目录下   hadoop11:8020 -> hdfs-cluster
jobmanager.archive.fs.dir: hdfs://bigdata01:9820/flink/completed-jobs/
historyserver.web.address: bigdata01
historyserver.web.port: 8082
historyserver.archive.fs.dir: hdfs://bigdata01:9820/flink/completed-jobs/

② /opt/installs/flink/conf/masters

bigdata01:8081

③ /opt/installs/flink/conf/workers

bigdata01
bigdata02
bigdata03

 

上传jar包

flink-shaded-hadoop-2-uber-2.7.5-10.0.jar放到flink的lib目录下

通过网盘分享的文件:flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

分发

xsync.sh /opt/installs/flink
xsync.sh /etc/profile

大数据集群中实用的三个脚本文件解析与应用-CSDN博客 

 

启动 

#启动HDFS  
start-dfs.sh
#启动集群
start-cluster.sh
#启动历史服务器
historyserver.sh start

假如 historyserver 无法启动,也就没有办法访问 8082 服务,原因大概是你没有上传 关于 hadoop 的 jar 包到 lib 下:

观察webUI

http://bigdata01:8081   -- Flink集群管理界面    当前有效,重启后里面跑的内容就消失了
能够访问8081是因为你的集群启动着呢
http://bigdata01:8082   -- Flink历史服务器管理界面,及时服务重启,运行过的服务都还在
能够访问8082是因为你的历史服务启动着

两者的区别:首先可以先把服务都停止

然后再重启,发现8081上已经完成的任务中是空的,而8082上的历史任务都还在,原因是8082读取了hdfs上的一些数据,而8081没有。

但是从web提供的功能来看,8081提供的功能还是比8082要丰富的多。

提交官方示例

flink run  /opt/installs/flink/examples/batch/WordCount.jar
或者
flink run  /opt/installs/flink/examples/batch/WordCount.jar --input 输入数据路径 --output 输出数据路径例如:
flink run  /opt/installs/flink/examples/batch/WordCount.jar --input /home/wc.txt --output /home/result

运行以上案例时,会出现有时候运行成功,有时候运行失败的问题:

Caused by: java.io.FileNotFoundException: /home/wc.txt (没有那个文件或目录)at java.io.FileInputStream.open0(Native Method)at java.io.FileInputStream.open(FileInputStream.java:195)at java.io.FileInputStream.<init>(FileInputStream.java:138)at org.apache.flink.core.fs.local.LocalDataInputStream.<init>(LocalDataInputStream.java:50)at org.apache.flink.core.fs.local.LocalFileSystem.open(LocalFileSystem.java:134)at org.apache.flink.api.common.io.FileInputFormat$InputSplitOpenThread.run(FileInputFormat.java:1053)

原因是:你的 taskManager 有三台,你的数据只在本地存放一份,所以需要将数据分发给 bigdata02 和 bigdata03

xsync.sh /home/wc.txt

 

四、总结

        Flink 在流式计算浪潮中凭借卓越性能、丰富特性、广泛应用场景脱颖而出,掌握其安装与基础概念只是第一步,后续深入学习流处理编程模型、算子运用、优化策略等,将助我们挖掘大数据实时处理无限潜力,高效应对数字化时代数据挑战。


http://www.ppmy.cn/ops/137785.html

相关文章

windows部署基于Composio的skekit应用问题解决记录

背景 最近在探索新方向的时候,发现一个项目:Composio, 它是为AI Agent准备的生产完备的工具集,可以和一些主流的agent框架进行结合,让agent具备更加强大的能力。按之前的视角来划分,应该属于应用层的。看了下项目的介绍,感觉还是蛮有意思的,准备使用其skekit(SWE Devel…

Spring Events 最新详解(spring4.2前后变化)

事件驱动设计模式&#xff0c;也可能通过Spring来实现。 围绕事件的三个角色&#xff1a; 事件&#xff08;Event&#xff09;事件发布者&#xff08;Publisher&#xff09;事件监听者&#xff08;Listener&#xff09; 文章内容&#xff1a; Spring Event.jpg 1. Demo-01:…

LeetCode 力扣 热题 100道(十)回文链表(C++)

回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文序列&#xff1b;回文 序列是向前和向后读都相同的序列。 /*** Definition for singly-linked list.* struct…

国产FPGA+DSP 双FMC 6U VPX处理板

高性能国产化信号处理平台采用6U VPX架构&#xff0c;双FMC接口国产V7 FPGA 国产多核 DSP 的硬件架构&#xff0c;可以完成一体化电子系统、有源相控阵雷达、电子侦察、MIMO 通信、声呐等领域的高速实时信号处理。 信号处理平台的组成框图如图 1 所示&#xff0c; DSP处理器采…

【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限

未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…

【附录】Rust国内镜像设置

目录 前言 &#xff08;1&#xff09;设置环境变量 &#xff08;2&#xff09;安装Rust &#xff08;3&#xff09;设置crates镜像 前言 本节课来介绍下如何在国内高速下载安装Rust和Rust依赖&#xff0c;由于网络原因&#xff0c;我们在安装Rust和下载项目依赖时都很慢&am…

PostgreSQL 9.4 引入的一个特性生成列(Generated Columns)

Generated Columns&#xff08;生成列&#xff09;是 PostgreSQL 9.4 引入的一个特性&#xff0c;它允许你在表中定义一个列&#xff0c;其值是根据其他列的值自动计算生成的。 以下是关于 PostgreSQL 生成列的一些要点&#xff1a; 一、定义生成列 语法如下&#xff1a; CR…