1、standalone模式
(1)上传发flink安装包到Linux环境中
(2)解压文件 flink-1.7.0-bin-hadoop27-scala_2.11.tgz
[root@hadoop105 hadoop]# tar -zxvf flink-1.7.0-bin-hadoop27-scala_2.11.tgz -C module/
(3)修改配置文件
[root@hadoop105 conf]# vim flink-conf.yaml
jobmanager.rpc.address: hadoop105
修改slaves
[root@hadoop105 conf]# vim slaves
hadoop106
hadoop107
(4)分发给另外两台机器
[root@hadoop105 module]# scp -r flink-1.7.0/ hadoop106:/usr/local/hadoop/module/
[root@hadoop105 module]# scp -r flink-1.7.0/ hadoop107:/usr/local/hadoop/module/
(5)启动
//先启动集群
[root@hadoop105 bin]# ./start-cluster.sh
//一个主节点,两个从节点
Starting cluster.
Starting standalonesession daemon on host hadoop105.
Starting taskexecutor daemon on host hadoop106.
Starting taskexecutor daemon on host hadoop107.
(5)访问
http://hadoop105:8081
2、代码实操
package com.study.flink1205
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.api.scala.{AggregateDataSet, DataSet, ExecutionEnvironment}
import org.apache.flink.api.scala._
//离线
object DateSetWcApp {
def main(args: Array[String]): Unit = {
//1、en 环境 2、source:数据源 3、transform 4、sink
//使用这种方式比较灵活
val tool: ParameterTool = ParameterTool.fromArgs(args)
val inputPath: String = tool.get("input")
val outputPath: String = tool.get("output")
val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
/* //这种方式:指定的目录写死了
val txtDataSet: DataSet[String] = env.readTextFile("D:\\tmp\\hello.txt")*/
val txtDataSet: DataSet[String] = env.readTextFile("inputPath")
val aggSet: AggregateDataSet[(String, Int)] = txtDataSet.flatMap(_.split(" ")).map((_, 1)).groupBy(0).sum(1)
aggSet.writeAsCsv(outputPath)
env.execute()
}
}
//编译操作
--input d:\\tmp\\hello.txt --output d:\\tmp\\output.csv
启动程序,控制台打印信息
自己的d盘文件额tmp文件就会生成文件:
不分区的话,设置代码参数即可:
//分区
//aggSet.writeAsCsv(outputPath)
//不分区
aggSet.writeAsCsv(outputPath).setParallelism(1)
自己的d盘文件额tmp文件就会生成文件:
文件夹里面的内容是:
接下来,我们对代码进行打包
打包ok,发现生成两个jar包(大包与小包),拷贝放到Linxu环境
尝试,使用Flink工具上传文件
接下来,就执行操作
注意的是:
在执行之前需要对另外两台机器分发一下(由于读取数据是从本地磁盘读取,实际任务会被分发到taskmanage的机器中,所以要把目标文件分发。)
[root@hadoop105 flink]# scp -r input.txt hadoop106:/opt/flink/
[root@hadoop105 flink]# scp -r input.txt hadoop107:/opt/flink/
执行
执行ok
在虚拟机查看,只会一台机器有数据
[root@hadoop106 flink]# ll
total 8
-rw-r--r--. 1 root root 77 Feb 22 14:19 input.txt
-rw-r--r--. 1 root root 97 Feb 22 14:21 output2020_02_22.csv
[root@hadoop106 flink]#
//查看数据
[root@hadoop106 flink]# cat output2020_02_22.csv
China!,1
China,Flink?,1
Flink!,1
Hello,1
I,1
Love,1
Really?,1
World,1
Yes,I,1
veay,1
另一种方式执行程序(命令行方式)
[root@hadoop105 bin]#./flink run -c com.study.flink1205.DateSetWcApp /opt/flink/flink1205-1.0-SNAPSHOT.jar --input /opt/flink/input.txt --output /opt/flink/output0212.csv
Starting execution of program
Program execution finished
Job with JobID 3dd85951167ff0d5bf49e0e88bb08bdc has finished.
Job Runtime: 11553 ms
[root@hadoop105 bin]#
发现,只有hadoop107机器有数据
到目标文件夹中查看计算结果
注意:计算结果根据会保存到taskmanage的机器下,不会再jobmanage下。
[root@hadoop107 flink]# ll
total 8
-rw-r--r--. 1 root root 77 Feb 22 14:20 input.txt
-rw-r--r--. 1 root root 97 Feb 22 14:38 output0212.csv
//查看数据
[root@hadoop107 flink]# cat output0212.csv
China!,1
China,Flink?,1
Flink!,1
Hello,1
I,1
Love,1
Really?,1
World,1
Yes,I,1
veay,1
在webui控制台查看计算过程
小结:
执行有两种方式:工具执行与命令行执行
2、yarn模式
(1)启动hadoop集群
[root@hadoop105 bin]# start-all.sh
(2)启动yarn-session
[root@hadoop105 bin]# pwd
/usr/local/hadoop/module/flink-1.7.0/bin
[root@hadoop105 bin]# ./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
其中:
-n(–container):TaskManager的数量。
-s(–slots): 每个TaskManager的slot数量,默认一个slot一个core,默认每个taskmanager的slot的个数为1,有时可以多一些taskmanager,做冗余。
-jm:JobManager的内存(单位MB)。
-tm:每个taskmanager的内存(单位MB)。
-nm:yarn 的appName(现在yarn的ui上的名字)。
-d:后台执行。
执行过程出错
org.apache.flink.client.deployment.ClusterDeploymentException: Couldn’t deploy Yarn session cluster
解决方案:flink启动yarn-session命令报错的解决方案
(3)执行任务
[root@hadoop105 bin]# ./flink run -m yarn-cluster -c com.study.flink1205.DateSetWcApp /opt/flink/flink1205-1.0-SNAPSHOT.jar --input /opt/flink/input.txt --output /opt/flink/output2020_21.csv
在hadoop106查看,有数据了
[root@hadoop106 flink]# ll
total 12
-rw-r--r--. 1 root root 77 Feb 22 14:19 input.txt
-rw-r--r--. 1 root root 97 Feb 22 14:21 output2020_02_22.csv
-rw-r--r--. 1 root root 97 Feb 22 15:42 output2020_21.csv
[root@hadoop106 flink]#
(4)去yarn控制台查看任务状态
hadoop的8088跳转到flink页面