Flink初识与搭建(一)

Spark生态圈

spark core 批计算  取代了MR
spark streaming 流计算  取代了storm(没有自己的生态圈,所以不火)
spark sql
spark mlib 机器学习

 

问:spark core为什么会取代MR?spark计算速度为什么比MR快?

1. spark申请资源是粗粒度的资源申请(所有task执行完毕executor才会关闭,有利有弊,有些浪费机器资源),MR是细粒度调用,每一个task都会启动一个jvm,完事就关掉
2. Spark基于内存计算 cache persist (内存计算,pipeline操作 (怕波兰))

 
申请资源细粒度和粗粒度资源调用的区别以及利弊?
1.粗粒度 缺点:后台一直占用资源,端口4040 优点:只申请资源一次,跑task任务的时候不需要重新拉取,用空间换时间
2.细粒度 缺点:每次都需要申请资源,比较耗时 优点:由JVM管理,每次跑完任务,释放资源

 

 

 

请问map和filter如何打印

val rdd = sc.textFile("path")
val rddMap = rdd.map( x=> {
    println("map" + x)
    x
})
val filterRDD = rddMap.filter(x =>{
    println("filter" + x)
    true
})
filterRDD.count();

答:map和filter交替打印
原理: filter(map(textFile)) RDD不存数据,只存计算逻辑,里面的task每次取一条数据,管道操作,所以从文件拿一条数据打印map 在打印filter,循环交替

 

 

sparkStriming流式计算缺点

批计算 无限的缩小 微批,时间足够短就成了流计算

实时性很差
流计算默认情况下无状态
batch

有状态的计算(需要我们找地方存储)
updateStateByKey

 

 

什么是flink?

分布式有状态的计算引擎,他主要能够计算*数据流和有界的数据流,简单来说也能批计算也能流计算

  1.UnBounded streams *计算 有开始时间,无结束时间,比如用户日志

  2.Bounded streams 有界,有开始时间,有结束时间(可以自己定时间)

  3.stateful compulation state可以放内存、磁盘、state状态可以关联上下文

SparkStreaming主要是批计算,认为流计算是批计算中特殊情况,无限压榨缩小时间范围

Fink主要是流计算,默认批计算是流计算中特殊情况,要卡住结束时间就可以有界批量计算

 

 

Flink特点和优势

1. 支持高吞吐、低延迟、高性能
2. 支持事件,结合watermark处理乱序数据
3. 支持有状态计算,并且支持多种状态  可以存放到内存、文件、RocksDB
4. 支持高度灵活的窗口(window)操作 time、count、session 
5. 基于轻量级分布式快照(checkpoint)实现的容错 保证exactly-once语义
6. 基于JVM实现独立的内存管理
7. Save Points(保存点) 方便代码升级

 

spark集群(master-slave架构)和 Fink集群 (master-slave架构)

Master:(master)
        管理集群中的所有worker,进而管理了集群资源
worker:(slave)
        worker管理各个节点上的资源(mem  core)
        worker_memory 1G
        worker_cores 2
Driver:任务调度
        --executor-cores 2





JobManager(master)相当于saprk的master+driver,既负责资源调度,又负责任务调度
TaskManager(slave) 

1.JobManager分发task(JobManager有多个TaskManager)
2.TaskManager向JobManager注册,通过心跳保持连接,当其中一个TaskManager挂掉,就会重试,如果连接不上,就是用下一个TaskManager
3.TaskManager有多个slot
4.JobManager会触发checkpoint (checkpoint就是那个taskManager挂掉了,就T出去,让下一个上) 5.task slot 只对内存资源进行划分隔离,对CPU没有隔离,多个task slot共享CPU,内存是平分的 假如: TaskManager 3G 3core 则 task slot 1G 没有核

 

 

 

安装standalone集群

ke01 ke02 ke03 ke04
JobManager TaskManager TaskManager TaskManager

 

1.下载链接:
https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.9.2/flink-1.9.2-bin-scala_2.11.tgz
2.解压:tar -zxf flink-1.9.2-bin-scala_2.11.tgz
3.修改flink-conf.yaml配置文件:     
    3.1 jobmanager.rpc.address: node01     JobManager地址
    3.2 jobmanager.rpc.port: 6123          JobManagerRPC通信端口
    3.3 jobmanager.heap.size: 1024m       JobManager所能使用的堆内存大小
    3.4 taskmanager.heap.size: 1024m      TaskManager所能使用的堆内存大小
    3.5 taskmanager.numberOfTaskSlots: 2 TaskManager管理的TaskSlot个数,依据当前物理机的核心数来配置,一般预留出一部分核心(25%)给系统及其他进程使用,一个slot对应一个core。如果core支持超线程,那么slot个数*2
    3.6 rest.port: 8081        指定WebUI的访问端口

4.修改slaves配置文件
    ke02 
    ke03 
    ke04
5.同步到其他节点
    scp -r flink-1.9.2 ke02:`pwd`
    scp -r flink-1.9.2 ke03:`pwd`
    scp -r flink-1.9.2 ke04:`pwd`
6.配置环境
    export FLINK_HOME=/opt/software/flink/flink-1.9.2
    export PATH=$PATH:$FLINK_HOME/bin
    source /etc/profile
7.启动集群
    node01上启动:start-cluster.sh

 

 

查看Flink WebUI

  • 访问JobManager节点的8081端口Flink初识与搭建(一)

     

     

     

常用提交Application到Flink集群运行方式

 

(1)通过命令方式提交Application
flink run -c com.msb.stream.WordCount StudyFlink-1.0-SNAPSHOT.jar
-c 指定主类
-d 独立运行、后台运行 
-p 指定并行度

(2)通过WebUI方式提交Application
在Web中指定Jar包的位置、主类路径、并行书等
web.submit.enable: true一定是true,否则不支持Web提交Application

 

上一篇:[Xamarin] 關於發出Notification 的大小事 (转帖)


下一篇:flink部署【使用k8s部署】