目录
1、下载文件
flink-1.9.2-bin-scala_2.12.tgz
国外镜像下载太慢,可以采用国内的镜像,例如清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/
2、安装
2.1 本地安装
2.2 集群安装
2.2.1 Standalone模式
独立部署模式,不依赖于其他平台。
2.2.2 Flink on Yarn模式
依赖于Hadoop集群
2.2.3 其他模式
Mesos
Docker
K8s
AWS
3 第一个例子
3.1pom.xml
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.9.2</version>
</dependency>
3.2 java
注意项目不要在springboot框架的基础上执行,因为springboot会运行tomcat容器等,会引起flink rn -d -c XXXXX com.steven.demo.jar 的错误。
package com.steven.flink;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.aggregation.Aggregations;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
//获取执行环境 ExecutionEnvironment (批处理用这个对象)
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//加载数据源到 DataSet
DataSet<String> text = env.readTextFile("D:\\test.txt");
DataSet<Tuple2<String, Integer>> counts =
text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
//s 即从文本中读取到一行字符串,按空格分割后得到数组tokens
String[] tokens = s.toLowerCase().split("\\s+");
for (String token : tokens) {
if (token.length() > 0) {
//初始化每一个单词,保存为元祖对象
collector.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
})
.groupBy(0) //0表示Tuple2<String, Integer> 中的第一个元素,即分割后的单词
.aggregate(Aggregations.SUM, 1); //同理,1表示Tuple2<String, Integer> 中的第二个元素,即出现次数
try {
//从DataSet 中获得集合,并遍历
List<Tuple2<String, Integer>> list = counts.collect();
for (Tuple2<String, Integer> tuple2 : list) {
System.out.println(tuple2.f0 + ":" + tuple2.f1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.3 提交-测试
在D:\\test.txt中加入数据
hello world hello
flink demo
运行代码提交:
D:\dev-tools\apache-flink-1.9.2\bin> .\flink run -d -c com.steven.flink.Demo1 .\flink-0.0.1-SNAPSHOT.jar
4.提交
4.1 可视化提交
除了运行代码提交,也可可视化提交:
运行结果如下:
flink:1
world:1
hello:2
demo:1
可视化界面看运行过程和结果:
4.2 代码远程提交
// 配置服务地址以及【当前jar所在路径】
ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("localhost",8081,"D:\\flink-steven\\target\\flink-0.0.1-SNAPSHOT.jar");
//加载数据源到 DataSet
DataSet<String> text = env.readTextFile("F:\\test.txt");
DataSet<Tuple2<String, Integer>> counts =
text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
//s 即从文本中读取到一行字符串,按空格分割后得到数组tokens
String[] tokens = s.toLowerCase().split("\\s+");
for (String token : tokens) {
if (token.length() > 0) {
//初始化每一个单词,保存为元祖对象
collector.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
})
.groupBy(0) //0表示Tuple2<String, Integer> 中的第一个元素,即分割后的单词
.aggregate(Aggregations.SUM, 1); //同理,1表示Tuple2<String, Integer> 中的第二个元素,即出现次数
counts.writeAsText("F:\\asd");
直接运行代码:
在远端集群中就能看到这个运行的Job了:
Flink知识点的学习有一部分参考: