flink入门学习
Flink学习笔记
一.简介
1.定义:
针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。。
2.应用场景:
流数据:把所有任务当成流来处理,处理观察和分析连续事件产生的数据。
3.重要角色:
①Client :用来提交任务给JobManager。
②JobManager:分发任务给 TaskManager 去执行。
③TaskManager:通过心跳的汇报任务状态。
4.接口:
面向流处理和面向批处理2种接口。
5.flink基石:
Checkpoint:Chandy-Lamport 算法实现 了分布式一致性的快照来提供exactly-once 的语义。
State:托管状态(managed state)并提供了 API 接口;像java集合类一样来管理状态。
Time:watermark 的机制,解决了基于事件时间处理时的数据乱序和数据迟到的问题;
Window:提供了窗口操作来进行流计算,滚动窗口、滑动窗口、会话窗口等。
二.与storm对比
storm | flink | |
---|---|---|
状态管理 | 无状态,需用户自行进行状态管理 | 有状态 |
窗口支持 | 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 | 窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态。 |
消息投递 | At Most Once At Least Once | At Most Once At Least Once Exactly Once |
容错方式 | ACK 机制:对每个消息进行全链路跟踪,失败或超时进行重发。 | 检查点机制:通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。 |
三.开发环境:window下配置jdk1.8和maven环境
四.案例
1.统计单词数
package flinkDemo
import org.apache.flink.api.scala._
import org.apache.flink.core.fs.FileSystem.WriteMode
/**
* @Description * @Author <613024710@qq.com>
* @Version V1.0
* @Since 1.0
* @Date 2019/6/13 0013 14:53
* @Description * @ClassName WordCount
*/
object WordCount {
def main(args: Array[String]) {
val env = ExecutionEnvironment.createLocalEnvironment(1)
//从本地读取文件
val text = env.readTextFile("D:\\data\\words.txt")
//单词统计
val counts = text.flatMap { _.toLowerCase.split(" ") filter { _.nonEmpty } }
.map { (_, 1) }
.groupBy(0)
.sum(1)
//输出结果
counts.print()
//保存结果到txt文件
counts.writeAsText("D:\\data\\output.txt", WriteMode.OVERWRITE)
env.execute("Scala WordCount Example")
}
}
结果:
(administered,1)
(allow,1)
(along,1)
(an,1)
(and,5)
(both,1)
(by,1)
(code,1)
(collaborates,1)
(commercial,1)
(community,2)
(conferences,1)
(contributed,1)
(developed,1)
(distributable,1)
(documentation,1)
(endless,1)
(even,1)
(for,3)
(foundation,1)
(freely,1)
(help,1)
(hosts,2)
(in,1)
(index,1)
(is,2)
(it,1)
(keep,1)
(library,1)
(license,2)
(lists,1)
(mailing,1)
(making,1)
(meetups,1)
(modules,2)
(more,1)
(much,1)
(of,1)
(on,1)
(open,1)
(osi-approved,1)
(package,1)
(party,1)
(possibilities,1)
(python,4)
(python's,3)
(software,1)
(source,1)
(standard,1)
(the,6)
(third,1)
(thousands,1)
(touch,1)
(under,1)
(usable,1)
(use,1)
(way,1)
(will,2)
(you,2)
flink入门学习的更多相关文章
- 记一次flink入门学习笔记
团队有几个系统数据量偏大,且每天以几万条的数量累增.有一个系统每天需要定时读取数据库,并进行相关的业务逻辑计算,从而获取最新的用户信息,定时任务的整个耗时需要4小时左右.由于定时任务是夜晚执行,目前看 ...
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Retrofit 入门学习
Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
随机推荐
- Springboot:thymeleaf模板(八)
存放位置:resources\templates 访问方式:通过Controller请求访问,不可直接访问(相当于web项目的WEB-INF目录) 环境依赖: <!--thymeleaf模板支持 ...
- tensorflow1.0 构建卷积神经网络
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import os os.envi ...
- Ubuntu下的eclipse配置MapReduce
下载配置文件: 链接:https://pan.baidu.com/s/13vatPHpDP5HaW0mKuHydUA提取码:pjxi 1)启动hadoop cd /usr/local/hadoop . ...
- Ubuntu安装Python3.8及新特性
Ubuntu安装Python3.8.0a4 如果你想体验一下,请用虚拟机(感受一下就行,别当真). 新特性(整体来说,有三点特别需要注意一下) 海象运算符 # python3.7 a = '123' ...
- DBeaver数据表的拷贝过程
通过DBeaver工具链接数据库后,我们就可以通过菜单或者命令功能来实现我们想要的目的. (一)创建数据库 新建数据库,如下图所示: ——> 在点击“确定”按钮后,可能会遇到失败,此时,我们可 ...
- 笔记-VUE滚动加载更多数据
来源:https://blog.csdn.net/qq_17281881/article/details/87342403 VUE滚动加载更多数据 data() { return { loading: ...
- kubernetes (一)使用Rancher搭建集群
目录 如何快速高效部署K8s集群 Rancher是什么 为什么是Rancher 1.0.安装Rancher 1.1.环境 1.2.选择Rancher版本 1.3.拉取镜像 2.0.容器启动高级选项 2 ...
- js 实现图片瀑布流效果,可更改配置参数 带完整版解析代码[waterFall.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片瀑布流效果 页面需求 1 ...
- certutil 导入 CA 证书
2019独角兽企业重金招聘Python工程师标准>>> 在linux下使用GoAgent客户端的时候,需要导入CA.cer证书. 安装证书管理工具 apt-get install l ...
- mybatis源码学习(四):动态SQL的解析
之前的一片文章中我们已经了解了MappedStatement中有一个SqlSource字段,而SqlSource又有一个getBoundSql方法来获得BoundSql对象.而BoundSql中的sq ...