目录

1.前置准备

2.搭建Standalone模式的Flink

一、集群规划

二、环境搭建

2.1 下载并解压

2.2 配置环境变量

2.3 修改配置

2.4 分发

三、启动集群

3.1 启动ha-hadoop集群

3.2 启动Flink集群和任务历史服务器

四、查看集群

4.1 jps进程查看

4.2 Web UI查看

五、提交任务


1.前置准备

CentOS7、jdk1.8、flink-1.10.1、hadoop-2.7.7

2.搭建Standalone模式的Flink

一、集群规划

Flink集群怎么关联yarn_hadoop

二、环境搭建

2.1 下载并解压

下载 Flink 安装包,这里我下载的是flink-1.10.1-bin-scala_2.11.tgz。下载地址:https://flink.apache.org/zh/downloads.html

# 解压
[xiaokang@hadoop01 ~]$ tar -zxvf flink-1.10.1-bin-scala_2.11.tgz -C /opt/software/

2.2 配置环境变量

[xiaokang@hadoop01 ~]$ sudo vim /etc/profile.d/env.sh

在原来基础上更新配置环境变量:

export FLINK_HOME=/opt/software/flink-1.10.1
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${ZOOKEEPER_HOME}/bin:${HIVE_HOME}/bin:${ZEPPELIN_HOME}/bin:${HBASE_HOME}/bin:${SQOOP_HOME}/bin:${FLUME_HOME}/bin:${PYTHON_HOME}/bin:${SCALA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${KAFKA_HOME}/bin:${SPARK_HOME}/bin:${FLINK_HOME}/bin:$PATH

使得配置的环境变量立即生效:

[xiaokang@hadoop01 ~]$ source /etc/profile.d/env.sh

2.3 修改配置

1.进入 ${FLINK_HOME}/conf 目录下,修改flink-conf.yaml文件

jobmanager.rpc.address: hadoop01
# 将已完成的作业上传到此目录中,让任务历史服务器进行监控
jobmanager.archive.fs.dir: hdfs://hacluster:8020/flink-jobhistory
historyserver.web.address: hadoop01
historyserver.web.port: 18082
# 任务历史服务器监控目录中已存档的作业
historyserver.archive.fs.dir: hdfs://hacluster:8020/flink-jobhistory
historyserver.web.refresh-interval: 10000

除了上面的配置之外,Flink 还可以使用以下可选参数来优化集群性能:

  • jobmanager.heap.size:JobManager 的 JVM 堆内存大小,默认为 1024m 。
  • taskmanager.heap.size:Taskmanager 的 JVM 堆内存大小,默认为 1024m 。
  • taskmanager.numberOfTaskSlots:Taskmanager 上 slots 的数量,通常设置为 CPU 核心的数量,或其一半。
  • parallelism.default:任务默认的并行度。
  • io.tmp.dirs:存储临时文件的路径,如果没有配置,则默认采用服务器的临时目录,如 LInux 的 /tmp 目录。

更多配置可以参考 Flink 的官方手册:https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html

2.修改 masters 文件,指定JobManager节点

hadoop01:8081

3.修改 slaves 文件,添加TaskManager节点

hadoop01
hadoop02
hadoop03

作业归档需要记录在hdfs上,但是当前版本的flink把hadoop的一些依赖删除了,需要手动将jar包放到lib目录下 ,这里我用的是flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

jar包(hadoop依赖包和wordcount依赖包)给大家提供下载地址:https://lanzous.com/b02b6wnfa,密码:2oby

2.4 分发

[xiaokang@hadoop01 ~]$ distribution.sh /opt/software/flink-1.10.1

三、启动集群

3.1 启动ha-hadoop集群

[xiaokang@hadoop01 ~]$ ha-hadoop.sh start
# 创建作业归档目录
[xiaokang@hadoop01 ~]$ hdfs dfs -mkdir /flink-jobhistory

3.2 启动Flink集群和任务历史服务器

[xiaokang@hadoop01 ~]$ start-cluster.sh
[xiaokang@hadoop01 ~]$ historyserver.sh start

四、查看集群

4.1 jps进程查看

[xiaokang@hadoop01 ~]$ call-cluster.sh jps
--------hadoop01--------
19232 DFSZKFailoverController
20722 HistoryServer
20387 TaskManagerRunner
19348 JobHistoryServer
20756 Jps
18805 DataNode
18502 QuorumPeerMain
19435 NodeManager
19980 StandaloneSessionClusterEntrypoint
19021 JournalNode
18687 NameNode
--------hadoop02--------
11890 NodeManager
11571 JournalNode
11683 DFSZKFailoverController
11300 QuorumPeerMain
12597 Jps
11801 ResourceManager
11387 NameNode
11468 DataNode
12542 TaskManagerRunner
--------hadoop03--------
10305 QuorumPeerMain
11218 TaskManagerRunner
10484 JournalNode
10612 ResourceManager
11272 Jps
10731 NodeManager
10381 DataNode

4.2 Web UI查看

JobManager 和 任务历史服务器的端口号分别为 8081 和 18082,界面应该如下:

Flink集群怎么关联yarn_Flink集群怎么关联yarn_02

Flink集群怎么关联yarn_hadoop_03

五、提交任务

流计算词频统计案例源码:

package cool.xiaokang.wordcount

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

/**
 * TODO: Flink流计算WordCount
 *
 * @author: xiaokang
 * @date: 2020/6/8 14:19
 *       
 */
object FlinkStreamingWordCount1 {
  def main(args: Array[String]): Unit = {
    if(args==null || args.length!=2){
      println("缺少参数,使用方法:flink run FlinkStreamingWordCount-1.0.jar -c cool.xiaokang.wordcount.FlinkStreamingWordCount hadoop 1124")
      System.exit(1)
    }
    val host=args(0)
    val port=args(1)
    //1.初始化流计算环境
    val streamEnv:StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //2.导入隐式转换
    import org.apache.flink.streaming.api.scala._
    //3.读取数据(Socket流)
    val lines:DataStream[String] = streamEnv.socketTextStream(host, port.toInt)
    //4.转换和处理数据并打印结果
    val result=lines.flatMap(_.split(" "))
      .map((_,1))
      .keyBy(0) //分组算子 0或1代表前面的DataStream[(String,Int)]的下标,0代表单词,1代表词频
      .sum(1) //聚合累加算子
    result.print("Result:")
    //5.启动流计算程序
    streamEnv.execute("FlinkSteamWordCount-微信公众号:小康新鲜事儿")
  }
}

提交作业:

# 1.虚拟机内开启端口
[xiaokang@hadoop01 ~]$ nc -lk 1124
# 2.提交作业
[xiaokang@hadoop01 ~]$ flink run -c cool.xiaokang.wordcount.FlinkStreamingWordCount ~/FlinkStreamingWordCount-1.0.jar hadoop01 1124

Flink集群怎么关联yarn_Flink集群怎么关联yarn_04

输入数据以及结果:

Flink集群怎么关联yarn_Flink集群怎么关联yarn_05

Flink集群怎么关联yarn_Flink集群怎么关联yarn_06

结束任务后可以在任务历史服务器WebUI中进行查看:

Flink集群怎么关联yarn_flink_07