1.我集群环境是cdh5.15,hadoop2.6,Scala2.11版本的,所以下载的是:
flink-1.7.2-bin-hadoop26-scala_2.11.tgz
https://archive.apache.org/dist/flink/flink-1.7.2/
2.将该压缩包拷贝到master01,slave01,slave02的 /myflink 目录
在所有节点:mkdir /myflink
现将该压缩包拷贝到master01的 /myflink 目录,然后用scp 远程拷贝到其他节点上:
scp flink-1.7.2-bin-hadoop26-scala_2.11.tgz root@slave01:/myflink
scp flink-1.7.2-bin-hadoop26-scala_2.11.tgz root@slave02:/myflink
在3个节点执行如下命令解压:tar xzf flink-1.7.2-bin-hadoop26-scala_2.11.tgz
3.接着,在3个节点都修改Flink配置文件flink-1.7.2/conf/flink-conf.yaml,最简单的修改如下:
[root@master01 conf]# vi flink-conf.yaml
taskmanager.numberOfTaskSlots: 4
jobmanager.rpc.address: master01(This setting
# is only used in Standalone mode,Yarn/Mesos
# automatically configure the host name based on the hostname of the node where the
# JobManager runs.所以不用standalone模式的话就可以不修改,要用的话都指向master01把)
Flink on Yarn会覆盖下面几个参数,如果不希望改变配置文件中的参数,可以动态的通过-D选项指定,如 -Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368
jobmanager.rpc.address:因为JobManager会经常分配到不同的机器上
taskmanager.tmp.dirs:使用Yarn提供的tmp目录
parallelism.default:如果有指定slot个数的情况下
4.在3个节点都修改conf/master、slaves文件
[root@master01 conf]# vi masters
master01:8081
[root@master01 conf]# vi slaves
slave01
slave02
5. 启动Flink集群,执行如下命令:
5.1 启动standalone模式:
[root@master01 flink-1.7.2]# bin/start-cluster.sh
访问:http://master01:8081/#/overview
停止standalone模式:
[root@master01 flink-1.7.2]# bin/stop-cluster.sh
5.2. 启动Flink Yarn Session
5.2.1在YARN上启动长时间运行的Flink集群:
[root@master01 flink-1.7.2]# ./bin/yarn-session.sh -n 8 -jm 1024 -tm 1024 -s 4 -nm FlinkOnYarnSession -d
2019-02-20 17:06:06,471 INFO org.apache.flink.yarn.AbstractYarnClusterDescriptor - Cluster specification: ClusterSpecification{masterMemoryMB=1024, taskManagerMemoryMB=1024, numberTaskManagers=8, slotsPerTaskManager=4}
对参数说明:
-n,--container 指YARN container分配的个数(即TaskManagers的个数)
-jm,--jobManagerMemory 指JobManager Containe的内存大小,单位为MB
-tm,--taskManagerMemory 指每个TaskManagerContainer的内存大小,单位为MB
-s 指每个TaskManager的slot个数。
-nm flink appName
-d 如果不希望Flink Yarn client长期运行,Flink提供了一种detached YARN session,启动时候加上参数-d或--detached。
执行上面命令来分配 8个 TaskManager,每个都拥有 1GB 的内存和 4 个 slot(cores),同时会请求启动 8+1 个容器,因为对于 ApplicationMaster 和 JobManager 还需要一个额外的容器。默认情况下,vcores的数量等于处理slots(-s)参数。
yarn-session下提交:
[root@master01 flink-1.7.2]./bin/flink run /myflink/projects/spark2_kafka_stream.jar
访问:
yarn ui:
http://master01:8088/cluster/scheduler
flink ui:
2019-02-20 19:28:19,241 INFO org.apache.flink.runtime.rest.RestClient - Rest client endpoint started.
Flink JobManager is now running on master01:42809 with leader id 00000000-0000-0000-0000-000000000000.
JobManager Web Interface: http://master01:42809(每次启动端口号都不一样)
关闭yarn-session:
[root@master01 conf]# yarn application -kill application_1550056788069_0008
5.2.2 yarn的single job
在YARN上直接运行单个Flink作业,在yarn上不启动flink集群,就不用一直占用yarn资源:
[root@master01 flink-1.7.2]# ./bin/flink run -m yarn-cluster -yn 4 -yjm 1024m -ytm 4096m /myflink/projects/spark2_kafka_stream.jar
yarn ui:
http://master01:8088/cluster/scheduler
spark2_kafka_stream.jar-------scala code:
package com.test.flink_kafka
import org.apache.flink.api.java.ExecutionEnvironment
import org.apache.flink.api.java.aggregation.Aggregations
object Flink {
def main(args: Array[String]): Unit = {
val env = ExecutionEnvironment.getExecutionEnvironment;
val stream = env.fromElements(1, 2, 3, 4, 3, 4, 3, 3, 5)
//.map(x=>(x))
// .map { x => (x, 1) }
// .groupBy(0).aggregate(Aggregations.SUM, 1) //.sum(1)
stream.print()
// 批处理不要env.execute()
// env.execute()
}
}
flink yarn-session 与yarn的single job 的对比:
session模式保留了Standalone的优势,可以节省申请启动tm的时间,适合短小job共用资源执行;per job有更好的资源quota管理、隔离等,性能稳定性有更好保障
flink-jdbc.jar用来连接mysql等数据源
https://search.maven.org/search?q=a:flink-jdbc
Flink中的常见的报错以及解决方案
https://blog.csdn.net/xianpanjia4616/article/details/86644800
---------------------
作者:yostkevin
来源:CSDN
原文:https://blog.csdn.net/u014384314/article/details/82690524
版权声明:本文为博主原创文章,转载请附上博文链接!