基于服务器上,搭建的flink集群进行提交flinkjob的方式
优点:
1、不需要启动yarn,结构简单,常用于测试
缺点:
1、资源无法回收:一旦集群启动之后,taskmanager和jobmanager就启动好了,无论你替补提交job都需要占用运行资源
2、程序隔离度不够:所有个flink-job公用同一个集群环境,会相互占用slot,而且如果一个flink-job出现异常导致集群环境崩溃,正常的flink-job也会gg
适合场景:适合规模小执行时间短的作业,一般是测试的时候用。生产环境一般不用
- # 提交 standalone 模式的 job
- # -c 主类名
- # -p 并行度
- # -s 从指定 savepoint 恢复
- bin/flink run -t remote \
- -c cn.doitedu.flink.java.demos._28_ToleranceSideToSideTest \
- -p 5 \
- -s hdfs://doit01:8020/eos_savepoint1/savepoint-5f1bc3-dde7a8627fff \
- /root/flink_course-1.0.jar
-
- # 触发 standalone 模式 job 做 savepoint
- # -d : detach 模式,客户端提交完 job 即退出
- # -t remote : 表示 job 是 standalone 运行模式
-
- bin/flink savepoint -t remote 5f1bc357bfd1e686e34b6cfce6d0cda9 hdfs://doit01:8020/eos_savepoint1
- flink list
- flink cancel 74e2ce94692adc28c6f3c7a156f96694
flink on yarn,本质上就是去yarn集群上申请容器,来运行flink的 jobmanager+taskmanager 集群
flink的job,是flink集群内部的概念,它对yarn是不可见的
基于yarn上的session模式,进行提交flinkjob的方式,相当于yarn上的运行的standalone session
优点:相较于standalone模式,比本地好的一点在于 需要多少taskmanager和slot就申请多少,而不是定额,而且新版本yarn-session,job cancel之后会回收taskmanager资源,但是jobmanager会一直在。
缺点:程序隔离度不够:所有个flink-job公用同一个集群环境,会相互占用slot,而且如果一个flink-job出现异常导致集群环境崩溃,正常的flink-job也会gg
适合场景:适合规模小执行时间短的作业
- # 老版本:
- bin/yarn-session.sh -n 3 -jm 1024 -tm 1024
- # -n --> 指定需要启动多少个 Taskmanager
-
- # 新版本:
- bin/yarn-session.sh -jm 1024 -tm 1024 -s 2 -m yarn-cluster -ynm hello -qu default
-
- # -jm --> jobmanager memory
- # -tm --> taskmanager memory
- # -m yarn-cluster --> 集群模式(yarn 集群模式)
- # -s --> 规定每个 taskmanager 上的 taskSlot 数(槽位数)
- # -nm --> 自定义 appliction 名称
- # -qu --> 指定要提交到的 yarn 队列
- # 通过命令提交 job 到已运行的 yarn-session 集群
- bin/flink run -d -yid application_1550579027777_65420 -p 4 -c
- cn.flink.java.demos.test /root/flink.jar
- # 通过已运行 yarn-session 集群的 webui 上提交 job
flink stop -m yarn-cluster -yid application_1550579027777_65420 c8ee546129e8480809ee62a4ce7dd91d
一个任务会对应一个 Job,每提交一个作业会根据自身的情况,都会单独向 yarn 申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享 Dispatcher 和ResourceManager,按需接受资源申请
main方法在client上运行
优点:每个作业单独启动集群,隔离性好,JM 负载均衡,main 方法在客户端执行。
在 per-job 模式下,每个 Job 都有一个 JobManager,每个 TaskManager 只有单个 Job。
缺点:启动时间长,每次启动的时候现开辟yarn资源环境
适合场景:适合规模大长时间运行的作业
bin/flink run -m yarn-cluster -yjm 1024 -ynm test -yqu default -ys 2 -ytm 1024 -p 4 -c cn.test.test1 /root/test.jar
flink stop -m yarn-cluster -yid application_1550579027777_65420 c8ee546129e8480809ee62a4ce7dd91d
main方法在yarn集群上运行
其余相比per-job类似
- bin/flink run-application -t yarn-application \
- -yjm 1024 -ynm sea -yqu default -ys 2 \
- -ytm 1024 -p 4 \
- -c cn.doitedu.flink.java.demos._27_KafkaSinkYarn /root/flink_course-1.0.jar
flink stop -m yarn-cluster -yid application_1550579027777_65420 c8ee546129e8480809ee62a4ce7dd91d