Flink初探wordCout
知识点
Flink介绍
1、无界数据-->数据不断产生
2、有界数据-->最终不再改变的数据
3、有界数据集是无界数据集的一个特例
4、有界数据集在flink内部是以一种终态数据集进行处理的
5、在flink中,有界和无界的差别非常小
6、使用同一套流计算引擎上的API操作两种数据类型 流计算:
数据不断产生,就一直处于计算状态
批处理:
完成一定时间段的计算任务后,就释放资源 Flink特性:
结果精准,即使是无序数据或者延迟到达的数据
有状态以及容错。
有状态,表示一直保存计算结果,以便往后传递计算值 实现精准一次计算的应用状态
大规模计算,几千台节点上运算,高吞吐和低延迟的特点
Flink通过检查点机制实现精准一次的计算保证,在故障时可以体现出来
flink支持流计算以及窗口化操作
flink支持灵活的基础时间的窗口计算
flink容错是轻量级的,保证零数据丢失。
1、下载并安装
官网安装步骤:https://ci.apache.org/projects/flink/flink-docs-release-1.8/tutorials/local_setup.html
2、本人安装版本
1、flink-1.7.2-bin-hadoop24-scala_2.11.tgz
2、tar -xzvf flink-1.7.2-bin-hadoop24-scala_2.11.tgz
3、mv flink-1.7.2 /usr/local/flink
3、运行flink
./bin/start-cluster.sh
4、web ui查看flink界面
http://ip:8081
5、查看日志信息
查看flink启动日志信息 log/flink-root-standalonesession-0-localhost.localdomain.log
查看job任务启动信息 log/flink-root-taskexecutor-0-localhost.localdomain.log
查看job任务输出信息 tail -100f flink-root-taskexecutor-0-localhost.localdomain.out
6、编写wordcout程序,这个可以查看官网
a)pom.xml , 注意将<scope>provided</scope>注释,否则找不到dataset类
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.ywj</groupId>
<artifactId>flink.test</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-core -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-core</artifactId>
<version>1.7.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.7.2</version>
<!--<scope>provided</scope>-->
</dependency> </dependencies>
</project>
b)SocketWindowWordCount.java
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.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector; public class SocketWindowWordCount { public static void main(String[] args) throws Exception { // 定义连接端口
final int port=8888;
// 得到执行环境对象
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 连接套接字socket之后,读取输入数据text
DataStream<String> text = env.socketTextStream("localhost", port, "\n"); // 解析数据:分组,窗口,聚合,计数
DataStream<WordWithCount> windowCounts = text
.flatMap(new FlatMapFunction<String, WordWithCount>() {
public void flatMap(String value, Collector<WordWithCount> out) {
//value.split("\\s") 将value按照空格或者制表符等进行切割
for (String word : value.split("\\s")) {//value为输入的一行数据
out.collect(new WordWithCount(word, 1L)); //封装成WordWithCount对象
}
}
})
.keyBy("word") //根据key进行分组 ,word和 new WordWithCount(word,1L)中的word要一致
.timeWindow(Time.seconds(5),Time.seconds(1))//5秒一窗口,1秒一计算
.reduce(new ReduceFunction<WordWithCount>() {
public WordWithCount reduce(WordWithCount a, WordWithCount b) {
return new WordWithCount(a.word, a.count + b.count); //计数
}
}); // print the results with a single thread, rather than in parallel
windowCounts.print().setParallelism(1); env.execute("Socket Window WordCount");
} // Data type for words with count
public static class WordWithCount { public String word;
public long count; public WordWithCount() {} public WordWithCount(String word, long count) {
this.word = word;
this.count = count;
} @Override
public String toString() {
return word + " : " + count;
}
}
}
c)Exception in thread "main" java.lang.VerifyError: Uninitialized object exists on backward branch 96,这种错误
请升级JDK版本,本人使用的是jdk8-211版本
7、打包运行
a) mvn package 打成jar包,放入centos中
b)查看flinks时候运行 netstat -ano | grep 8081
c) nc -l 8888 -v
d) ./bin/flink run -c SocketWindowWordCount /home/ywj/flink.test-1.0-SNAPSHOT.jar
e) 查看输出信息 tail -100f flink-root-taskexecutor-0-localhost.localdomain.out
############如果在windows进行测试,可以在win10中使用netcat#######
netcat使用
netcat测试
linux (centos)
1、nc 192.168.227.128 5000 客户端
2、 nc -l 5000 -v 服务端 windows(win10)
1、nc -L -p 8888 服务端
2、nc localhost 8888 客户端
windows调试wordcout
windows10测试:
7、cmd启动执行 nc -L -p 8888
8、运行flink代码
Flink初探wordCout的更多相关文章
- Flink初探-为什么选择Flink
本文主要记录一些关于Flink与storm,spark的区别, 优势, 劣势, 以及为什么这么多公司都转向Flink. What Is Flink 一个通俗易懂的概念: Apache Flink 是近 ...
- Flink的sink实战之一:初探
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Flink SQL Client初探
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [转]为何选择 Flink
本文转自:https://www.ituring.com.cn/book/tupubarticle/23229 第 1 章 为何选择 Flink 人们对某件事的正确理解往往来自基于有效论据的结论.要获 ...
- 入门大数据---Flink学习总括
第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...
- Flink的sink实战之二:kafka
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Flink的sink实战之三:cassandra3
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Flink的sink实战之四:自定义
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Flink SQL Client综合实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- Maven 基础概念
Project:任何你想构建的事务Maven都可以认为它们是工程,这些工程被定义为工程对象模型(project Object Model POM) 一个工程可以依赖其他的工程,一个工程也可以由多个子工 ...
- C#编程 LINQ查询
LINQ查询表达式 约束 LINQ查询表达式必须以from子句开头,以select或group子句结束 关键字 from...in...:指定要查找的数据以及范围变量,多个from子句则表示从多个数据 ...
- List.ForEach批量新增并发异常解决
批量新增操作在业务系统中十分常见,尤其是主从表中对从表的批量处理.昨天在对wms主从表进行业务操作时使用了c#中list自带的函数ForEach对从表批量新增,代码如下: 在无并发的情况下接口请求正常 ...
- windows下通过批处理脚本启动redis
三种启动方式的特点: 第一种方式 :根目录之命令窗口启动 特点:每次启动都要进入到redis的根目录,比较繁琐,并且占用一个窗口 第二种方式:bat脚本便捷启动 特点:可放在桌面便捷启动,占用窗口 第 ...
- springMVC的详解
一,springmvc注解特性 1.@Controller 控制器定义在 spring 3.0 中,通过@controller 标注即可将 class 定义为一个 controller 类.为使 sp ...
- CSS基础学习 18.CSS多列
四种常见的浏览器内核:
- NMI是什么
NMI是什么 2016/02/28 vmunix NMI(non-maskable interrupt),就是不可屏蔽的中断.根据Intel的Software Developer手册Volume 3, ...
- SpringBoot + Maven + Hibernate ( 简单实现CRUD功能 )
工具:idea.mariadb数据库 创建一个项目 ( student ) ........(使用idea创建一个springboot项目,这里我就不多说了) Maven 中的依赖 <?xml ...
- python瞎练
需求:有不规则列表 singlelist3 = [ '总计', '每吨人工:', '总人工', 1748.07, '金额'],如果当前元素为字符串且该元素的下一个相邻位置仍为字符串,那么请在该元素后面 ...
- lumen 队列处理
数据库要使用 database 队列驱动,你需要数据表保存任务信息(比如失败任务).要生成创建这些表的迁移,可以在项目目录下运行 Artisan 命令 queue:table,迁移被创建之后,可以使用 ...