导航
一.IDEA本地调试运行
二.使用linux命令提交任务运行
三 使用web页面提交任务
四 spark on yarn 提交任务
---------------------------------------------------------------------------------------------------------------------------------------------------------
一.IDEA本地调试运行
1.首先安装nc用于制造实时数据
下载地址 https://eternallybored.org/misc/netcat/
360会提示这个文件有病毒,会自动隔离这个文件,恢复文件后才能通过端口发送实时数据,恢复后解压文件
2.启动nc
没有配置环境可以直接指定nc.exe直接启动nc发送数据
配置过环境变量使用直接使用nc启动
3. 编写flink代码
pom坐标
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.12</artifactId>
<version>1.11.1</version>
</dependency>
</dependencies>
java代码
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.datastream.WindowedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.util.Collector;
/**
* Flink 单次统计
*/
public class SocketWindowWordCount {
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//获取端口9999的数据 需要先启动nc (执行命令 nc -l -p 9999),否则显示连接拒绝
DataStream<String> text = env.socketTextStream("localhost", 9999, "\n");
//对接收到的数据进行切割,并记录次数为1
//使用FlatMapFunction必须显示指定泛型类型,使用(FlatMapFunction<String, Tuple2>) (value, out) ->{}这一种语法会报错
SingleOutputStreamOperator<Tuple2<String, Long>> flatMap = text.flatMap(new FlatMapFunction<String, Tuple2<String, Long>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Long>> out) throws Exception {
for (String word : value.split(",")) {
out.collect(new Tuple2<>(word, 1L));//单次记录
}
}
});
// 对KV对象的word成员变量进行分区计算
KeyedStream<Tuple2<String, Long>, String> word = flatMap.keyBy(new KeySelector<Tuple2<String, Long>, String>() {
@Override
public String getKey(Tuple2<String, Long> tp2) throws Exception {
return tp2.f0;
}
});
//时间窗口长度为5秒,窗口移动为1秒进行计算
WindowedStream<Tuple2<String, Long>, String, TimeWindow> windowedStream = word.timeWindow(Time.seconds(5), Time.seconds(1));
// 统计具有相同的key
SingleOutputStreamOperator<Tuple2<String, Long>> windowCounts = windowedStream.reduce(new ReduceFunction<Tuple2<String, Long>>() {
@Override
public Tuple2<String, Long> reduce(Tuple2<String, Long> tp2_1, Tuple2<String, Long> tp2_2) throws Exception {
return new Tuple2<>(tp2_1.f0, tp2_1.f1 + tp2_2.f1);
}
});
//调试打印到控制台
windowCounts.addSink(new PrintSinkFunction<>());//添加addSink,打印到控制台
env.execute("Socket Window WordCount"); //开始执行
}
}
4.启动java的main方法后进入dos界面通过nc发送数据
控制台中实时显示通过过过nc发送的数据
二.使用linux命令提交任务运行
1. 官网安装flink (官网地址 https://flink.apache.org/zh/ 中文官网)
下载地址 https://mirror.bit.edu.cn/apache/flink/flink-1.11.1/flink-1.11.1-bin-scala_2.12.tgz
flink分为scala_2.11和scala_2.12两种类型不兼容,可以根据之前项目选择的scala版本下载保持scala版本一致
2.下载完成后解压配置环境变量
# flink
export FLINK_HOME=/home/flink/flink-1.11.1
export PATH=$PATH:$FLINK_HOME/bin
更新环境变量
source /etc/profile
3.启动flink集群
start-cluster.sh
4.检查flink角色状态
[root@yc3 flink-1.11.1]# jps
22724 Jps
10501 TaskManagerRunner
10204 StandaloneSessionClusterEntrypoint
访问默认的任务管理页面 127.0.0.1:8081
5.测试flink的计算功能
开启nc任务
nc -l -p 9999
启动flink的单词统计计算任务
flink run ../examples/streaming/SocketWindowWordCount.jar --hostname 127.0.0.1 --port 9999
查看页面的任务状态
实时查看日志
tail -f <flink_home>/log/flink-root-taskexecutor-0-localhost.out
通过nc发送数据
查看打印结果
功能正常
6.测试使用自定义java代码提交执行任务
使用一步骤中的代码打包上传服务器, 提交任务 -c 后面跟运行的main全类名
flink run -c SocketWindowWordCount ./test.jar
参数解析
-c 指定main方法的全类名
-p 指定并行度
-m 指定jobmanager的地址 默认localhost:8081
启动后使用nc发送数据,查看日志文件
日志文件
linux 提交任务完成
三 使用web页面提交任务
1.进入管理任务页面上传jar程序
2.编写参数并运行任务
参数解释
3.使用nc工具发送数据并查看日志文件
一切正常
四 spark on yarn 提交任务
使用spark on yarn 提交任务 需要依赖flink启动脚本和yarn集群,不需要启动flink集群
1.添加依赖配置
将hadoop和yarn配置环境变量,并配置HADOOP_CONF_DIR与HADOOP_CLASSPATH
#FLINK
export FLINK_HOME=/home/tools/flink/flink-1.11.2
export PATH=$FLINK_HOME/bin:$PATH
#HADOOP
export HADOOP_HOME=/home/tools/hadoop/hadoop-2.7.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`
2.刷新环境变量
3.提交任务 (yarn已经启动成功后再提交flink任务)
flink run \
-m yarn-cluster \
-ynm myapp \
-d -c com.Stream ./myapp.jar
4.查看yarn任务管理(All Applications)控制台 默认端口8088
5.跳转UI界面
6.启动参数解释
- -m 运行模式,这里使用yarn-cluster,即yarn集群模式。
- -ys slot个数。
- -ynm Yarn application的名字。
- -yjm job manager 的堆内存大小。
- -ytm task manager 的堆内存大小。
- -d detach模式。可以运行任务后无需再控制台保持连接。
- -c 指定jar包中class全名。
7.启动方式二 使用yarn session的方式
yarn session方式需要单独启动一个任务去yarn集群中申请一块资源空间,这块空间一直存在,后续所有任务都需要提交到刚才申请的空间中
1) 启动 yarn session
yarn-session.sh -n 2 -jm 1024 -tm 1024 -d -s 2
参数解释
-n 2 表示指定两个容器
-jm 1024 表示jobmanager 1024M内存
-tm 1024表示taskmanager 1024M内存
-d --detached 任务后台运行
-s 指定每一个taskmanager分配多少个slots(处理进程)。建议设置为每个机器的CPU核数
-nm, YARN上为一个自定义的应用设置一个名字
-q, 显示yarn中可用的资源 (内存, cpu核数)
-qu, 指定YARN队列.
-z,针对HA模式在zookeeper上创建NameSpace
application中出现了 任务Flink session cluster ,后续所有需要计算的任务都会提交当Flink session cluster的资源容器内部
2) 提交任务
flink run examples/batch/WordCount.jar
flink集群ui界面中出现了新任务