之前我们都是基于Idea在本地进行开发,这种方式很适合开发以及测试,但是开发完之后,如何提交到服务器中运行?
Flink单机部署方式
本地开发和测试过程中非常有用,只要把代码放到服务器直接运行。
前置条件
jdk8
maven3
下载解压Flink,这里直接下载源码编译,直接从github上下载源码https://github.com/apache/flink/releases 选择1.8.1
然后解压到本地,解压后的文件夹如下:
编译
接下来我们需要编译这段源码。
mvn clean install -DskipTests -Dfast -Pvendor-repos -Dhadoop.version=2.6.0-cdh5.15.1
第一次编译需要花费很长时间,因为需要从网上下载一些依赖文件。
编译结果
编译成功后,会在当前目录下产生flink-dist/target/flink-1.8.1-bin文件夹,这个文件夹就是我们所需要的东西,把这个文件夹拷贝到服务器中就可以进行部署了。
单机模式部署
将flink-1.8.1-bin文件夹拷贝到服务器中,服务器中的目录如下:
启动服务
当前是stand-alone模式,输入jps可以查看:
可以在UI上面看到,默认ip是8081:
使用Flink跑一个WordCount程序
使用socket方式读入数据,然后统计数据wordcount
在服务器中开启socket:nc -lk 9999
然后运行命令:
./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9999
在WEB界面中可以查看任务:
测试数据
在nc终端输入数据(使用tab分割):
查看运行结果
在flink-1.8.1/log路径下,有一个flink--taskexecutor-.out文件,就是输出结果文件。
停止任务
可以在WEB界面上点击Running JOB,然后点击任务:
点击Cancel就可以取消这个任务了。这时,取消成功之后,可用slot就变为1了:
停止集群
使用命令./bin/stop-cluster.sh
就可以了
Flink分布式standalone部署方式
我们在conf/flink-conf.yaml文件中配置主节点(jobmanager.rpc.address)的ip.
在conf/slaves文件中配置从节点(taskmanager)的ip
常用配置
jobmanager.rpc.address参数用来指向master节点的地址
jobmanager.heap.size 表示jobmanager节点可用的内存
taskmanager.heap.size表示taskmanager节点可用的内存
taskmanager.numberOfTaskSlots 每一个机器可用的CPU个数,决定了并行度
paraparallelism.default 表示任务的并行度 可以在代码层面覆盖
taskmanager.tmp.dirs taskmanager的临时数据存储目录
修改配置文件
修改conf/flink-conf.yaml文件:
jobmanager.rpc.address: swarm-manager(修改为本服务器的主机名)
修改conf/slaves文件:swarm-manager
使用命令./bin/start-cluster.sh
启动集群,可以正常启动:
修改配置:
taskmanager.heap.size: 2048m
taskmanager.numberOfTaskSlots: 2
再次启动集群:
可以看到配置已经生效了。
这时再次使用命令nc -lk 9999
然后在另一个终端运行./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9999
开启一个任务。这时查看页面:
可以看到之前两个slots,现在已经用了一个,因为当前的并行度是1。
扩展和容错
现在我们输入jps
命令时:
我们现在把TaskManagerRunner给Kill掉,然后在查看:
这时在查看Web页面:
可以看到都变成0了。
这时再启动taskmanager.sh
再次查看:
yarn方式部署
搭建Hadoop
下载Hadoop 2.6.0 解压,配置环境变量:
修改配置文件etc/hadoop/hadoop-env.sh ,配置java home export JAVA_HOME=/usr/jdk1.8.0_101
修改配置文件etc/hadoop/core-site.xml,配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://swarm-manager:9000</value>
</property>
</configuration>
修改配置文件etc/hadoop/hdfs-site.xml,配置:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/iie4bu/app/tmp</value>
</property>
</configuration>
修改配置文件slave 内容:swarm-manager
接下来配置yarn-site.xml
修改mapred-site.xml.template文件名为:mapred-site.xml ,内容如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
格式化hdfs,使用命令~/app/hadoop-2.6.0/bin$ ./hdfs namenode -format
启动hadoop,使用命令~/app/hadoop-2.6.0/sbin$ ./start-all.sh
使用jps
查看启动状态:
使用WEB页面进行查看
首先查看hdfs:http://192.168.170.170:50070
然后查看yarn:http://192.168.170.170:8088
测试一下
测试HDFS :
没有问题!
Flink On Yarn
方式一:Flink初始化的时候就申请一个资源,并且作为一个服务常驻在yarn中。Flink 的job共用一个yarn session。资源不够用时,出现排队情况。
从flink1.8之后hadoop相关jar包需要额外下载:
将下载后的flink-shaded-hadoop-2-uber-2.6.5-7.0.jar文件放到 flink-1.8.1/lib
目录下,然后可以输入 ./bin/yarn-session.sh --help
./bin/yarn-session.sh
参数:
-n taskmanager的数量
-jm jobmanager的内存
-tm taskmanager的内存
方式二: 每次提交Flink job都申请一个yarn session,用完之后释放。任务之间不相互影响,任务之间是相互独立的。
使用方式一
启动一个常服务./bin/yarn-session.sh -n 1 -jm 1024m -tm 4096m
表示启动job manager是1GB的堆内存,task manager是4GB的堆内存。
使用这个命令之后,打开yarn页面,http://192.168.170.170:8088/cluster
使用方式二:./bin/flink run -m yarn-cluster -p 4 -yjm 1024m -ytm 4096m ./examples/batch/WordCount.jar