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 大数据计算引擎的发展 这几年大数据的飞速发 ...
随机推荐
- 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
1. Java代码实现思路 BufferedWriter writefile = new BufferedWriter(new FileWriter(file)); writefile.write( ...
- java jdk-awt.font在centos上中文乱码的问题, 安装中文字体
有需求生成一个二维码,并且有一段文本说明,但是使用awt.font来生成中文时,一直存在乱码的问题.网上的解决办法有几种,但是在centos上亲测有用的就是如下的方法. Java代码如下:new ja ...
- linux中,如何设置每隔2个小时就执行一次某个脚本?
需求描述: 今天同事问了一个linux上crontab定时任务的问题,说,如何调整一个定时任务每2个小时 执行一次,在此记录下. 操作过程: 1.通过以下的方式设置,每2个小时执行一次脚本 */ * ...
- Post方式调用wcf服务
我们平常在PC端调用WCF服务,只要知道WCF服务的地址,客户端直接添加引用服务就可以使用了,殊不知还有其他方式,其实,我们也可以 通过HTTP POST的方式调用WCF服务,这样就不用添加引用了,在 ...
- android:json解析的两个工具:Gson和Jackson的使用小样例
1.简单介绍 json是android与server通信过程中经常使用的数据格式,比如.例如以下是一个json格式的字符串: {"address":"Nanjing&qu ...
- Android开发相关
在用红米4X进行真机调试的时候,出现此问题,问题描述如下: DELETE_FAILED_INTERNAL_ERROR Error while Installing APK 一直调试不成功,百度了下,因 ...
- osgearth将视点绑定到一个节点上
_manip->getSettings()->setTetherMode(osgEarth::Util::EarthManipulator:: TETHER_CENTER ); //设置_ ...
- List转换为数组Array的方法
List<String> list = new ArrayList<String>(); list.add("str1"); list.add(" ...
- VIM 插入
不知道有多少VIM新手和我当年(去年)一样,信誓旦旦的以为只有i可以插入 唉,现在想想都觉得可笑,都是Windows下的编辑器用多了的结果 鼠标一点,妈妈再也不用担心我的文本插入了……悲剧! 好了,让 ...
- ubuntu 创建桌面快捷方式
$sudo apt-get install gnome-panel $gnome-desktop-item-edit /home/xxx/桌面 --create-new 命令行:填入程序名称,如/u ...