1 flink基础

flink基础

一、flink简介

1.flink是什么

在这里插入图片描述

2.为什么要用flink

在这里插入图片描述

3.流处理的发展和演变

第一代
在这里插入图片描述
第二代
在这里插入图片描述
第三代
在这里插入图片描述

4.flink特点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、flink快速上手

1.pom文件依赖于插件

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-scala_2.12</artifactId>
            <version>1.10.1</version> </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-scala -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.12</artifactId>
            <version>1.10.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 该插件用于将 Scala 代码编译成 class 文件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.4.0</version>
                <executions>
                <execution>
                    <!-- 声明绑定到 maven 的 compile 阶段 -->
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.批处理wordcount

package com.scy.wc

import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
import org.apache.flink.api.scala._
//批处理的word count
object WordCount {
  def main(args: Array[String]): Unit = {
    //创建一个批处理执行环境--上下文
    val env:ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    //从文件中读取数据
    val inputpath: String="E:\\FlinkTutorial\\src\\main\\resources\\hello.txt"
    val inputDataSet: DataSet[String]= env.readTextFile(inputpath)

    //对数据进行转换处理统计,先分词,再安装word进行分组,最后进行聚合统计
    val resultDataSet: DataSet[(String,Int)] = inputDataSet
      .flatMap(_.split(" "))
      .map((_,1))
      .groupBy(0)  // 以第一个元素作为key进行分组
      .sum(1)    // 对所有数据的第二个元素求和
    //打印输出
    resultDataSet.print()
  }
}

3.流处理wordcount

package com.scy.wc

//import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment 下面范围包含上面包范围,所以可以省略此行
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._
object StreamWordCount {
  def main(args: Array[String]): Unit = {
    //创建流处理的执行环境
    val env:StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //env.setParallelism(2) 设置并行度

    //从外部命令提取参数,作为socket主机名和端口号
    val paramTool:ParameterTool = ParameterTool.fromArgs(args)
    val host: String = paramTool.get("host")
    val port: Int = paramTool.getInt("port")

    //接受一个socket文本流
    val inputDataStream:DataStream[String] = env.socketTextStream(host,port) // 进行转换处理统计
    val resultDataStream:DataStream[(String,Int)] = inputDataStream
      .flatMap(_.split(" "))
      .filter(_.nonEmpty)
      .map((_,1))//.setParallelism(2)可以在每个算子后面进行并行度设置
      .keyBy(0) //根据key的hashcode进行分组
      .sum(1)

    resultDataStream.print()

    //启动任务执行
    env.execute("stream word count")
    //线程序号默认根据服务器核心数
  }
}

三、flink部署

1.standalone模式

1.1 安装
解压缩 flink-1.10.1-bin-scala_2.12.tgz,进入 conf 目录中。
1)修改 flink/conf/flink-conf.yaml 文件:
		jobmanager.rpc.address: node4  指定任务管理调度主机
2)修改 /conf/slaves 文件:node1...
3)分发给集群中的机子:
4)启动:[scy@node1 flink-1.10.1]$ bin/start-cluster.sh 
访问 http://localhost:8081 可以对 flink 集群和任务进行监控管理。

在这里插入图片描述

1.2 web页面任务提交

将流计算代码打成jar包
数据准备
然后上传至集群提交
**加粗样式**
task manager上显示真正执行的任务日期
在这里插入图片描述

1.3 命令任务提交
## 提交
[scy@node6 flink-1.10.1]$ bin/flink run -c com.scy.wc.StreamWordCount -p 2 /opt/software/FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host 10.1.59.65 --port 7777

## 取消任务
[scy@node6 flink-1.10.1]$ bin/flink list   查看运行的任务
[scy@node6 flink-1.10.1]$ bin/flink cancel  c9aaa0285d058a14a7c7fa0c0878d106  停止该任务

查看所有历史的任务 bin/flink list -a
在这里插入图片描述

2.yarn模式

以 Yarn 模式部署 Flink 任务时,要求 Flink 是有 Hadoop 支持的版本,Hadoop 环境需要保证版本在 2.2 以上,并且集群中安装有 HDFS 服务。

2.1 Session-cluster 模式:

在这里插入图片描述
在这里插入图片描述

1.启动 yarn-session
在这里插入图片描述

[scy@node6 flink-1.10.1]$ ./bin/yarn-session.sh -jm 1024m -tm 1024m -rm testflink -d```

2.执行任务

```bash
bin/flink run -c com.scy.wc.StreamWordCount -p 2 /opt/software/FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host 10.1.59.65 --port 7777

3.去 yarn 控制台查看任务状态
在这里插入图片描述

  1. 取消 yarn-session
[scy@node1 lib]$ yarn application --kill application_1638411164084_3754
2.2 Per-Job-Cluster 模式:

在这里插入图片描述
不启动 yarn-session,直接执行 job

在这里插入图片描述

3.kubernetes部署

四、flink运行架构

1.Flink 运行时的组件

在这里插入图片描述

1.1 作业管理器(JobManager)

在这里插入图片描述

1.2 任务管理器(TaskManager)

在这里插入图片描述

1.3 资源管理器(ResourceManager)

在这里插入图片描述

1.4 分发器(Dispatcher)

在这里插入图片描述

2.任务提交流程

Flink 集群部署到 YARN 上,那么就会有如下的提交流程
在这里插入图片描述
在这里插入图片描述

3.任务调度原理

在这里插入图片描述

3.1 TaskManger 与 Slots

在这里插入图片描述
在这里插入图片描述

3.2 并行度(Parallelism)

在这里插入图片描述
在这里插入图片描述

并行度案例

在这里插入图片描述
在这里插入图片描述

3.3 程序与数据流(DataFlow)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值