Flink编程入门(二)

Flink 有三种部署模式,分别是 LocalStandalone Cluster Yarn Cluster

1.1. Local模式

对于 Local 模式来说,JobManager TaskManager 会公用一个 JVM 来完成 Workload。如果要验证一个简单的应用,Local 模式是最方便的。实际应用中大多使用 Standalone 或者 Yarn Cluster,而local模式只是将安装包解压启动(./bin/start-local.sh)即可,在这里不在演示。

1.2. Standalone 模式 

1.2.1. 下载

安装包下载地址:http://flink.apache.org/downloads.html

快速入门教程地址:

https://ci.apache.org/projects/flink/flink-docs-release-1.3/quickstart/setup_quickstart.html

扫描二维码关注公众号,回复: 4696093 查看本文章

1.2.2. 上传安装包到linux系统

使用rz命令

1.2.3. 解压

tar –zxvf flink-1.3.2-bin-hadoop26-scala_2.10.tgz

1.2.4. 重命名

mv flink-1.3.2 flink

1.2.5. 修改环境变量

切换到root用户配置

export FLINK_HOME=/home/hadoop/flink

export PATH=$PATH:$FLINK_HOME/bin

配置结束后切换会普通用户

source /etc/profile

1.2.6. 修改配置文件

修改flink/conf/masters

master1:8081

修改flink/conf/slaves

master1ha

master2

master2ha

修改flink/conf/flink-conf.yaml

taskmanager.numberOfTaskSlots: 2

 jobmanager.rpc.address: master1

1.2.7. 启动flink

/home/Hadoop/flink/bin/start-cluster.sh

1.2.8. Flink Rest API

Flink 和其他大多开源的框架一样,提供了很多有用的 Rest API。不过 Flink RestAPI,目前还不是很强大,只能支持一些 Monitor 的功能。Flink Dashboard 本身也是通过其 Rest 来查询各项的结果数据。在 Flink RestAPI 基础上,可以比较容易的将 Flink Monitor 功能和其他第三方工具相集成,这也是其设计的初衷。

Flink 的进程中,是由 JobManager 来提供 Rest API 的服务。因此在调用 Rest 之前,要确定 JobManager 是否处于正常的状态。正常情况下,在发送一个 Rest 请求给 JobManager 之后,Client 就会收到一个 JSON 格式的返回结果。由于目前 Rest 提供的功能还不多,需要增强这块功能的读者可以在子项目 flink-runtime-web 中找到对应的代码。其中最关键一个类 WebRuntimeMonitor,就是用来对所有的 Rest 请求做分流的,如果需要添加一个新类型的请求,就需要在这里增加对应的处理代码。下面我例举几个常用 Rest API

1.查询 Flink 集群的基本信息: /overview。示例命令行格式以及返回结果如下:

$ curl http://localhost:8081/overview

{"taskmanagers":1,"slots-total":16,

"slots-available":16,"jobs-running":0,"jobs-finished":0,"jobs-cancelled":0,"jobs-failed":0}

2.查询当前 Flink 集群中的 Job 信息:/jobs。示例命令行格式以及返回结果如下:

$ curl http://localhost:8081/jobs

{"jobs-running":[],"jobs-finished":

["f91d4dd4fdf99313d849c9c4d29f8977"],"jobs-cancelled":[],"jobs-failed":[]}

3.查询一个指定的 Job 信息: /jobs/jobid。这个查询的结果会返回特别多的详细的内容,这是我在浏览器中进行的测试,如下图:

想要了解更多 Rest 请求内容的读者,可以去 Apache Flink 的页面中查找。

1.2.9. 运行测试任务

./bin/flink run -m master1:8082 ./examples/batch/WordCount.jar --input hdfs://master1:9000/words.txt --output hdfs://master1:9000/clinkout

1.3. Flink HA

首先,我们需要知道 Flink 有两种部署的模式,分别是 Standalone 以及 Yarn Cluster 模式。对于 Standalone 来说,Flink 必须依赖于 Zookeeper 来实现 JobManager HAZookeeper 已经成为了大部分开源框架 HA 必不可少的模块)。在 Zookeeper 的帮助下,一个 Standalone Flink 集群会同时有多个活着的 JobManager,其中只有一个处于工作状态,其他处于 Standby 状态。当工作中的 JobManager 失去连接后(如宕机或 Crash),Zookeeper 会从 Standby 中选举新的 JobManager 来接管 Flink 集群。

对于 Yarn Cluaster 模式来说,Flink 就要依靠 Yarn 本身来对 JobManager HA 了。其实这里完全是 Yarn 的机制。对于 Yarn Cluster 模式来说,JobManager TaskManager 都是被 Yarn 启动在 Yarn Container 中。此时的 JobManager,其实应该称之为 Flink Application Master。也就说它的故障恢复,就完全依靠着 Yarn 中的 ResourceManager(和 MapReduce AppMaster 一样)。由于完全依赖了 Yarn,因此不同版本的 Yarn 可能会有细微的差异。这里不再做深究。

1.3.1. 修改配置文件

修改flink-conf.yaml

state.backend: filesystem

state.backend.fs.checkpointdir: hdfs://master1:9000/flink-checkpoints

high-availability: zookeeper

high-availability.storageDir: hdfs://master1:9000/flink/ha/

high-availability.zookeeper.quorum: master1ha:2181,master2:2181,master2ha:2181

high-availability.zookeeper.client.acl: open

修改conf

server.1=master1ha:2888:3888

server.2=master2:2888:3888 

server.3=master2ha:2888:3888

修改masters

master1:8082

master1ha:8082

修改slaves

master1ha

master2

master2ha

1.3.2. 启动

/home/Hadoop/flink/bin/start-cluster.sh

1.4. Yarn Cluster 模式

1.4.1. 引入

在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload。因此 Flink 也支持在 Yarn 上面运行。首先,让我们通过下图了解下 Yarn Flink 的关系。

在图中可以看出,Flink Yarn 的关系与 MapReduce Yarn 的关系是一样的。Flink 通过 Yarn 的接口实现了自己的 App Master。当在 Yarn 中部署了 FlinkYarn 就会用自己的 Container 来启动 Flink JobManager(也就是 App Master)和 TaskManager

1.4.2. 修改环境变量

export HADOOP_CONF_DIR= /home/hadoop/hadoop/etc/hadoop

1.4.3. 部署启动

yarn-session.sh -d -s 2 -tm 800 -n 2

上面的命令的意思是,同时向Yarn申请3container,其中 2 Container 启动 TaskManager-n 2),每个 TaskManager 拥有两个 Task Slot-s 2),并且向每个 TaskManager Container 申请 800M 的内存,以及一个ApplicationMasterJob Manager)。

Flink部署到Yarn Cluster后,会显示Job Manager的连接细节信息。

Flink on Yarn会覆盖下面几个参数,如果不希望改变配置文件中的参数,可以动态的通过-D选项指定,如 -Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368

jobmanager.rpc.address:因为JobManager会经常分配到不同的机器上

taskmanager.tmp.dirs:使用Yarn提供的tmp目录

parallelism.default:如果有指定slot个数的情况下

yarn-session.sh会挂起进程,所以可以通过在终端使用CTRL+C或输入stop停止yarn-session

如果不希望Flink Yarn client长期运行,Flink提供了一种detached YARN session,启动时候加上参数-d—detached

在上面的命令成功后,我们就可以在 Yarn Application 页面看到 Flink 的纪录。如下图。

如果在虚拟机中测试,可能会遇到错误。这里需要注意内存的大小,Flink Yarn 会申请多个 Container,但是 Yarn 的配置可能限制了 Container 所能申请的内存大小,甚至 Yarn 本身所管理的内存就很小。这样很可能无法正常启动 TaskManager,尤其当指定多个 TaskManager 的时候。因此,在启动 Flink 之后,需要去 Flink 的页面中检查下 Flink 的状态。这里可以从 RM 的页面中,直接跳转(点击 Tracking UI)。这时候 Flink 的页面如图

yarn-session.sh启动命令参数如下:

Usage:  

   Required  

     -n,--container <arg>   Number of YARN container to allocate (=Number of Task Managers)  

   Optional  

     -D <arg>                        Dynamic properties  

     -d,--detached                   Start detached  

     -jm,--jobManagerMemory <arg>    Memory for JobManager Container [in MB]  

     -nm,--name                      Set a custom name for the application on YARN  

     -q,--query                      Display available YARN resources (memory, cores)  

     -qu,--queue <arg>               Specify YARN queue.  

     -s,--slots <arg>                Number of slots per TaskManager  

     -st,--streaming                 Start Flink in streaming mode  

     -tm,--taskManagerMemory <arg>   Memory per TaskManager Container [in MB]  

1.4.4. 提交任务

之后,我们可以通过这种方式提交我们的任务

./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar

以上命令在参数前加上y前缀,-yn表示TaskManager个数。

在这个模式下,同样可以使用-m yarn-cluster提交一个"运行后即焚"detached yarn-yd)作业到yarn cluster

1.4.5. 停止yarn cluster

yarn application -kill application_1507603745315_0001

猜你喜欢

转载自www.cnblogs.com/advise09/p/10194917.html