Flink01--简介

一.Flink 简介

1. 1 Flink是什么

分布式处理引擎,用于对无界和有界数据流进行状态计算

1. 2 Flink框架解决了Spark中哪些痛点
  • Spark 数据精准一次性处理
  • 乱序数据 迟到数据
  • 低延迟 高吞吐 准确性
  • 容错性

二.Flink的特点

  • 事件驱动
  • 基于流的世界观 在Flink的世界观中,一切都是由流组成,离线的数据是有界流,实时的数据是无界流

批处理: 知晓待处理数据集的范围,程序处理完数据直接退出
流处理:对将要处理数据集的范围是不确定的,程序一致运行等待处理数据

  • 分层API
    在这里插入图片描述

  • 低延迟 高吞吐 良好的容错性:每秒处理百万级别事件,毫秒级别延迟

  • 精确消费一次

  • 支持事件时间和处理时间语义

三.Flink 流处理架构的演进

  • 传统的分析处理
    在这里插入图片描述

  • 演进1 :分析处理架构
    在这里插入图片描述

  • 演进2:Lambda架构

在这里插入图片描述

  • 演进3:Fink 架构
    在这里插入图片描述

四.Flink_Hello_World

1.编写代码

  • 批处理代码
/**
  *  批处理 hello world
  */
object WordCount1 {
  def main(args: Array[String]): Unit = {
    // 创建执行环境
    val env = ExecutionEnvironment.getExecutionEnvironment
    // 从文件中读取数据
    val inputPath = "src/resource/word.txt"
    // 1.读取文本执行环境
    val inputDS: DataSet[String] = env.readTextFile(inputPath)
    // 2.分词之后,对单词进行groupby分组,然后用sum进行聚合
    val wordCountDS: AggregateDataSet[(String, Int)] = inputDS.flatMap(_.split(" ")).map((_, 1))
      // 以第一个元素进行分组
      .groupBy(0)
      // 对当前数据的第二个元素求和
      .sum(1)
    wordCountDS.print()
  }
}

  • 流处理代码
/**
  * 流处理wordcount
  */
object wordStream {

  def main(args: Array[String]): Unit = {
    //1,获取环境 和批处理的环境不一样
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val tool: ParameterTool = ParameterTool.fromArgs(args)
    val hostname: String = tool.get("host");
    val port: Int = tool.getInt("port");
    //2 获取流
    val inputDataStream: DataStream[String] = env.socketTextStream(hostname, port);
    var resultDatastream: DataStream[(String, Int)] = inputDataStream.flatMap(_.split(" "))
      .filter(_.nonEmpty)
      .map((_, 1))
      .keyBy(0) // 按照第一个元素进行分组
      .sum(1) // 按照第二个元素进行求和
    // 设置处理任务的线程数
    resultDatastream.print().setParallelism(1)
    env.execute("启动流式wordcount")

  }

}

2.打包 上传集群 注意需要配置sacla的打包插件 否则只打包java代码 并不打包scala代码

            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <!--声明绑定到maven的compile阶段 -->
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

3.运行
         1)web界面运行
在这里插入图片描述          2)命令行提交运行

#运行
 ./flink run -c com.atguigu.wc.StreamWordCount
FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar -p 2 --host lcoalhost –port 7777
# 查看运行的job
flik list 
# 查看所有job
flink list -a
#取消job
flink cancel jobId

五.Flink部署的三种模式

  • standaalone模式
    在这里插入图片描述
    访问 http://192.168.1.100:8081/#/overview 可以对Flin集群和任务进行监控和管理
    在这里插入图片描述

  • Yarn模式

    • Session-cluster

    在这里插入图片描述

        Session-Cluster 模式需要先启动集群,然后再提交作业,接着会向yarn 申请一块空间后,资源永远保持不变,如果资源满了 下一个作业就无法提交,等其他作业释放资源后才可以提交
    所有Flink job共享一个Flink集群的资源 所有作业共享Dispatcher和ResourceManager。适合规模小执行时间短的作业

    • Per-Job-Cluster
      在这里插入图片描述

    一个Job 会对应一个集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,创建一个新的flink 集群 直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享Dispatcher 和ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。每次提交都会创建一个新的flink 集群,任务之间互相独立,互不影响,方便管理。
+ 启动两种模式

#1.启动Hadoop集群
#2.启动对应的模式
 #2.1 yarn-session模式执行以下操作
./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm testLiang -d
其中:
	-n(--container):TaskManager 的数量。
	-s(--slots): 每个TaskManager 的slot 数量,默认一个slot 一个core,默认每个taskmanager 的slot 的个数为1,有时可以多一些taskmanager,做冗余。
	-jm:JobManager 的内存(单位MB)。
	-tm:每个taskmanager 的内存(单位MB)。
	-nm:yarn 的appName(现在yarn 的ui 上的名字)。
	-d:后台执行。
#2.2 启动per-job-cluster模式时  不做任何操作 

#3.执行任务
	#3.1 yarn-session 模式 
./flink run -c com.atguigu.wc.StreamWordCount
FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host lcoalhost –port 7777
	#3.2 yarn-per job cluster 模式
	./flink run –m yarn-cluster -c com.atguigu.wc.StreamWordCount
	FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar
	--host lcoalhost –port 7777 
#4.去yarn控制台查看任务状态
	http://hadoop101:8088/cluster/apps
	#5.停止任务 
	yarn application --kill application_1577588252906_0001
		
  • k8s模式

六.Flink之 job提交流程

  • 运行时四大组件
    在这里插入图片描述

    • Dispatcher:接受应用并提交给JobManager
    • JobManager:①对每个Job生成不同的执行图 并且计算出所需要的slot数 ②向RM请求slot③分发执行图到真正的taskManager上
    • ResourceManager:管理集群slot。终止空闲的TaskManager,释放计算资源。
    • taskManager:真正执行任务的进程 ,启动后TaskManger向RM注册本身的slot数。以便于RM统一管理
  • Job的提交过程

在这里插入图片描述

  • 任务提交流程(yarn)
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值