Flink简介及使用
一、Flink概述
官网:https://flink.apache.org/ mapreduce-->maxcompute
HBase-->部门
quickBI
DataV
Hive-->高德地图
Storm-->Jstorm
...... 2019年1月,阿里正式开源flink-->blink Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。
Flink设 计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。 大数据计算框架 二、Flink特点
1)mapreduce
2)storm
3)spark 适用于所有企业,不同企业有不同的业务场景。处理数据量,模型都不一样。 1)随机部署应用
以其他组件集成!
flink是分布式系统,需要计算资源才可执行程序。flink可以与常见的集群资源管理器进行集成(Hadoop Yarn,Apache Mesos...)。
可以单独作为独立集群运行。
通过不同部署模式实现。
这些模式允许flink以其惯有的方式进行交互。
当我们部署flink应用程序时,Flink会根据应用程序配置的并行性自动识别所需资源。从资源管理器中请求它们。
如果发生故障,flink会请求新的资源来替换发生故障的容器。
提交或控制程序都通过REST调用进行,简化Flink在许多环境的集成。孵化... 2)以任何比例应用程序(小集群、无限集群)
Flink旨在以任何规模运行有状态流应用程序。应用程序可以并行化在集群中分布和同时执行程序。
因此,我们的应用集群可以利用无限的cpu和磁盘与网络IO。
Flink可以轻松的维护非常大的应用程序状态。
用户可拓展性报告:
1)应用程序每天可以处理万亿个事件
2)应用程序每天可以维护多个TB的状态
3)应用程序可以在数千个内核运行 3)利用内存中的性能
有状态Flink应用程序针对于对本地状态访问进行了优化。任务状态始终的保留在内存中,或者如果
大小超过了可用内存,则保存在访问高效的磁盘数据结构中(SSD 机械/固态)。
任务可以通过访问本地来执行所有计算。从来产生极小的延迟。
Flink定期和异步检查本地状态持久存储来保持出现故障时一次状态的一致性。 三、有界无界
1)无界
有开始,没有结束...
处理实时数据。
2)有界
有开始,有结束...
处理批量数据。 四、无界数据集应用场景(实时计算)
1)源源不断的日志数据
2)web应用,指标分析
3)移动设备终端(分析app状况)
4)应用在任何数据源不断产生的项目中 五、Flink运行模型
1)流计算
数据源源不断产生,我们的需求是源源不断的处理。程序需要一直保持在计算的状态。
2)批处理
计算一段完整的数据集,计算成功后释放资源,那么此时工作结束。 六、Flink的使用
1)处理结果准确:无论是有序数据还是延迟到达的数据。
2)容错机制:
有状态:保持每次的结果往下传递,实现累加。DAG(有向无环图)。
3)有很强大的吞吐量和低延迟。
计算速度快,吞吐量处理的量级大。
4)精准的维护一次的应用状态。
storm:会发生要么多计算一次,要么漏计算。
5)支持大规模的计算
可以运行在数千台节点上。
6)支持流处理和窗口化操作
7)版本化处理
8)检查点机制实现精准的一次性计算保证
checkpoint
9)支持yarn与mesos资源管理器 七、flink单节点安装部署
1)下载安装包
https://archive.apache.org/dist/flink/flink-1.6.2/flink-1.6.2-bin-hadoop28-scala_2.11.tgz
2)上传安装包到/root下 3)解压
cd /root
tar -zxvf flink-1.6.2-bin-hadoop28-scala_2.11.tgz -C hd 4)启动
cd /root/hd/flink-1.6.2
bin/start-cluster.sh 5)启动
cd /root/hd/flink-1.6.2
bin/stop-cluster.sh 6)访问ui界面
http://192.168.146.132:8081 八、flink集群安装部署
1)下载安装包
https://archive.apache.org/dist/flink/flink-1.6.2/flink-1.6.2-bin-hadoop28-scala_2.11.tgz
2)上传安装包到/root下 3)解压
cd /root
tar -zxvf flink-1.6.2-bin-hadoop28-scala_2.11.tgz -C hd 4)修改配置文件
vi flink-conf.yaml
第33行修改为:
jobmanager.rpc.address: hd09-1 5)修改slaves
vi slaves
hd09-2
hd09-3 6)分发flink到其他机器
cd /root/hd
scp -r flink-1.6.2/ hd09-2:$PWD
scp -r flink-1.6.2/ hd09-3:$PWD 7)启动集群
cd /root/hd/flink-1.6.2
bin/start-cluster.sh 8)关闭集群
cd /root/hd/flink-1.6.2
bin/stop-cluster.sh 9)访问ui界面
http://192.168.146.132:8081
九、flink结构
十、WordCount简单实现
需求:实时的wordcount
往端口中发送数据,实时的计算数据
1、SocketWordCount类
package com.demo.flink; import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector; /**
* 需求:实时的wordcount
* 往端口中发送数据,实时的计算数据
*/
public class SocketWordCount {
public static void main(String[] args) throws Exception {
//1.定义连接端口
final int port = 9999;
//2.创建执行环境对象
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//3.得到套接字对象(指定:主机、端口、分隔符)
DataStreamSource<String> text = env.socketTextStream("192.168.146.132", port, "\n"); //4.解析数据,统计数据-单词计数 hello lz hello world
DataStream<WordWithCount> windowCounts = text.flatMap(new FlatMapFunction<String, WordWithCount>() {
public void flatMap(String s, Collector<WordWithCount> collector){
//按照空白符进行切割
for (String word : s.split("\\s")) {
//<单词,1>
collector.collect(new WordWithCount(word, 1L));
}
}
})
//按照key进行分组
.keyBy("word")
//设置窗口的时间长度 5秒一次窗口 1秒计算一次
.timeWindow(Time.seconds(5), Time.seconds(1))
//聚合,聚合函数
.reduce(new ReduceFunction<WordWithCount>() {
public WordWithCount reduce(WordWithCount a, WordWithCount b) throws Exception {
//按照key聚合
return new WordWithCount(a.word, a.count + b.count);
}
}); //5.打印可以设置并发度
windowCounts.print().setParallelism(1); //6.执行程序
env.execute("Socket window WordCount");
} public static class WordWithCount {
public String word;
public long count; public WordWithCount() { } public WordWithCount(String word, long count){
this.word = word;
this.count = count;
} public String toString(){
return word + " : " + count;
}
}
}
2、flink的maven依赖
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.6.2</version>
</dependency> <dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.6.2</version>
</dependency> <dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.6.2</version>
</dependency>
3、运行SocketWordCount类的main方法
4、服务器安装netcat
// 安装netcat
yum install -y nc
// 使用nc,其中9999是SocketWordCount类中定义的端口号
nc -lk -p 9999
5、此时在服务器的nc下输入单词后,SocketWordCount的main方法会时时监控到该单词并进行计算处理。
6、也可以把SocketWordCount程序打成jar包放置到服务器上,执行
[root@hd09-1 flink-1.6.2]# bin/flink run -c com.demo.flink.SocketWordCount /root/FlinkTest-1.0-SNAPSHOT.jar
启动WordCount计算程序,此时结果会写到/root/hd/flink-1.6.2/log下的flink-root-taskexecutor-0-hd09-1.out文件中。
Flink简介及使用的更多相关文章
- (转)Flink简介
1. Flink的引入 这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop.Storm,以及后来的 Spark,他们都有着各自专注的应用场景.Spark 掀开了内存计算的先河 ...
- Flink简介
Flink简介 Flink的核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布,数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以方便用户编写分布 ...
- flink01--------1.flink简介 2.flink安装 3. flink提交任务的2种方式 4. 4flink的快速入门 5.source 6 常用算子(keyBy,max/min,maxBy/minBy,connect,union,split+select)
1. flink简介 1.1 什么是flink Apache Flink是一个分布式大数据处理引擎,可以对有限数据流(如离线数据)和无限流数据及逆行有状态计算(不太懂).可以部署在各种集群环境,对各种 ...
- Apache 流框架Flink简介
1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是原生的流处理系统,提供high level的API.Flink也提供 API来像Spark ...
- Flink学习之路(一)Flink简介
一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...
- Flink(一)Flink的入门简介
一. Flink的引入 这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop.Storm,以及后来的 Spark,他们都有着各自专注的应用场景.Spark 掀开了内存计算的先河 ...
- [转帖]Flink(一)Flink的入门简介
Flink(一)Flink的入门简介 https://www.cnblogs.com/frankdeng/p/9400622.html 一. Flink的引入 这几年大数据的飞速发展,出现了很多热门的 ...
- Flink流处理(一)- 状态流处理简介
1. Flink 简介 Flink 是一个分布式流处理器,提供直观且易于使用的API,以供实现有状态的流处理应用.它能够以fault-tolerant的方式高效地运行在大规模系统中. 流处理技术在当今 ...
- 新一代大数据处理引擎 Apache Flink
https://www.ibm.com/developerworks/cn/opensource/os-cn-apache-flink/index.html 大数据计算引擎的发展 这几年大数据的飞速发 ...
随机推荐
- erlang-百度云推送Android服务端功能实现-erlang
百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...
- C# 使用IrisSkin2.dll皮肤库C# ssk皮肤
其实皮肤就是一个第三方的控件,名字是IrisSkin2.dll只要添加到你的工具箱里就可以和其它控件一样使用了下面我说一下使用的方法,不对的地方大家多指教啊. 一.添加控件IrisSkin2.dll. ...
- javascript 高级选择器:querySelector 和 querySelectorAll
querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流 ...
- 怎么用MathType编辑带圈字母
在用word公式编辑器MathType编辑公式时,里面涉及到很多的数学物理符号等等,这些符号或者是公式其实都可以利用MathType中的模板进行组合.在这些数学公式中,有时会有一些比较特殊的符号,它们 ...
- Learning Deep CNN Denoiser Prior for Image Restoration阅读笔记
introduction 图像恢复目标函数一般形式: 前一项为保真项(fidelity),后一项为惩罚项,一般只与去噪有关. 基于模型的优化方法可以灵活地使用不同的退化矩阵H来处理不同的图像恢复问题, ...
- rac_grid自检提示缺少cvuqdisk包
原创作品,出自 "深蓝的blog" 博客,欢迎转载.转载时请务必注明下面出处.否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
- php 获取图片base64编码格式数据
$image_file = '1.jpg'; $image_info = getimagesize($image_file); $base64_image_content = "data:{ ...
- /etc/logrotate.conf
/etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root@localhost ...
- osgEarth2.8添加模型
#include <osgEarthDrivers/model_simple/SimpleModelOptions> SimpleModelOptions modelOptions; mo ...