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 ...
随机推荐
- Python3使用 pytesseract 进行图片识别
一.安装Tesseract-OCR软件 参考我的前一篇文章:Windows安装Tesseract-OCR 4.00并配置环境变量 二.Python中使用 需要使用 pytesseract 库,官方使用 ...
- window 下 jmeter+ant 自动生成html报告并发送邮件
一.安装ant 1.ant 下载地址:https://ant.apache.org/bindownload.cgi 2.下载完成解压到指定目录下 3.配置ant 环境变量 新建系统变量 -ANT_HO ...
- sql查询慢 查找
SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total_physical_reads N'物理读取总次数' ,tota ...
- Django编写自定义manage.py 命令
官网文档地址:编写自定义 django-admin 命令 金句: 你所浪费的今天,正是昨天死的人所期待的明天. 开篇话: python manage.py <command> 的命令我们用 ...
- Unity 游戏框架搭建 2019 (三十六~三十八) partial与public
在上一篇,我们把菜单的顺序从头到尾整理了一遍.在整理菜单顺序的过程中,记录了一个要做的事情. 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 整理完菜单顺序后,学习新的知识,解决随着示例 ...
- 我个人常用的git命令
在还没有习惯用命令行之前,我建议用一下sourcetree这个软件熟悉一下流程. 使用 git clone 拷贝一个 Git 仓库到本地:git clone url 添加所有的文件到缓存区: git ...
- phpcms 后台分页
php 代码public function init() { $where='';//条件 $page = $_GET['page'] ? intval($_GET['page']) : '1'; $ ...
- C++-doctest-测试框架
C++-doctest-测试框架 C++UnitTestDoctest 测试框架 doctest 是用过的最简单好用的的单元测试框架, 只需要引用 一个头文件即可 无main 函数的测试样例 #def ...
- 《高性能Linux服务器构建实战》——第1章轻量级HTTP服务器Nginx
第1章 轻量级HTTP服务器Nginx本章主要介绍Nginx的配置管理和使用.作为一个轻量级的HTTP服务器,Nginx与Apache相比有以下优势:在性能上,它占用很少的系统资源,能支持更多的并发连 ...
- 码云git本地仓库链接远程仓库
原文链接: 点我 git提交时,仓库是空的,本地有源码 应该打开cmd 归到项目路径 然后输入git push -u origin master -f 是把本地的项目强制推送到空的仓库 git ...