大数据Flink-Java学习之旅第二篇

292 阅读4分钟

「这是我参与11月更文挑战的第41天,活动详情查看:2021最后一次更文挑战」。

一、Flink 部署

1、Standalone 模式

1.1、安装

解压缩 flink-1.10.1-bin-scala_2.12.tgz,进入 conf 目录中。

  1. 修改 flink/conf/flink-conf.yaml 文件:

    jobmanager.rpc.address: hadoop102
    
  2. 修改 /conf/masters 及 /conf/slaves 文件:

    masters

    hadoop102
    

    slaves

    hadoop103
    hadoop104
    
  3. 分发给另外两台机子:

    xsync /opt/module/flume
    
  4. 启动:

    bin/start-cluster.sh
    

    访问 http://hadoop102:8081 可以对 flink 集群和任务进行监控管理。

    image.png

1.2、提交任务

**注意:flink master 机器内存尽量大些!!!,当hadoop102(flink master)配置为4G内存时,执行下边的程序一直报错!!!而且错误原因不明确,有误导作用!!!太坑人。。。当hadoop102(flink master)内存配置8G时,同样执行下边的程序就正常!!!或者在配置文件flink-conf.yaml中修改对应的内存参数!!!**

直接maven进行打包即可,不需要把依赖的jar包打进去!!!(见网上有说需要把依赖的jar包打进去。。。)

  1. 执行程序

    • 开启nc 服务

      [moe@hadoop102 ~]$ nc -lk 7777
      
    • 执行word count程序

      [moe@hadoop102 ~]$ flink run -c com.moe.wc.StreamWordCount flink_java_tutorial-1.0-SNAPSHOT.jar --host hadoop102 --port 7777
      
  2. 查看计算结果

    image.png

  3. 在 webui 控制台查看计算过程

    image.png

    image.png

2、Yarn 模式

以 Yarn 模式部署 Flink 任务时,要求 Flink 是有 Hadoop 支持的版本,Hadoop环境需要保证版本在 2.2 以上,并且集群中安装有 HDFS 服务。

2.1、Flink on Yarn

Flink 提供了两种在 yarn 上运行的模式,分别为 Session-Cluster 和 Per-Job-Cluster模式。

  1. Session-cluster 模式

    image.png

    Session-Cluster 模式需要先启动集群,然后再提交作业,接着会向 yarn 申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn 中的其中一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享 Dispatcher 和 ResourceManager;共享资源;适合规模小执行时间短的作业。

    在 yarn 中初始化一个 flink 集群,开辟指定的资源,以后提交任务都向这里提交。这个 flink 集群会常驻在 yarn 集群中,除非手工停止。

  2. Per-Job-Cluster 模式

    image.png

    一个 Job 会对应一个集群,每提交一个作业会根据自身的情况,都会单独向 yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享 Dispatcher 和 ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。

    每次提交都会创建一个新的 flink 集群,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。

2.1.1、Session Cluster

  1. 启动 hadoop 集群

    [moe@hadoop102 ~]$ myhadoop.sh start
    

    image.png

  2. 启动 yarn-session

    [moe@hadoop102 ~]$ yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm zoe -d
    

    参数说明:

    -n(--container):TaskManager 的数量。
    
    -s(--slots): 每个 TaskManager 的 slot 数量,默认一个 slot 一个 core,默认每个
    
    taskmanager 的 slot 的个数为 1,有时可以多一些 taskmanager,做冗余。
    
    -jm:JobManager 的内存(单位 MB)。
    
    -tm:每个 taskmanager 的内存(单位 MB)。
    
    -nm:yarn 的 appName(现在 yarn 的 ui 上的名字)。
    
    -d:后台执行。
    

    启动 yarn-session 哈哈,抛异常,没找到相关类异常!!!Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException

    image.png

    解决如下:

    • 方法一:

      配置 HADOOP_CLASSPATH

      修改自己的环境配置文件:

      [moe@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
      

      配置 HADOOP_CLASSPATH

      export HADOOP_CLASSPATH=`hadoop classpath`
      

      image.png

    • 方法二:

      去Flink官网下载附加组件包

      放到Flink的lib目录下 /opt/module/flink/lib 即可。

    作者采用的是方案一,集群环境版本如下:

    hadoop:hadoop-3.1.3.tar.gz
    flink:flink-1.10.1-bin-scala_2.12.tgz
    

    最后别忘了执行source及分发到其他节点

    [moe@hadoop102 ~]$ source /etc/profile
    
    [moe@hadoop102 ~]$ sudo xsync /etc/profile.d/my_env.sh
    
  3. 执行任务

    [moe@hadoop102 ~]$ flink run -c com.moe.wc.StreamWordCount /opt/module/data/flink_java_tutorial-1.0-SNAPSHOT.jar --host hadoop102 --port 7777
    
  4. 去 yarn 控制台查看任务状态

    http://hadoop103:8088/cluster

    image.png

    image.png

    image.png

  5. 取消 yarn-session

    [moe@hadoop102 ~]$ yarn application --kill application_1639200225503_0001
    

2.1.2、Per Job Cluster

  1. 启动 hadoop 集群

    [moe@hadoop102 ~]$ myhadoop.sh start
    
  2. 不启动 yarn-session,直接执行 job

    [moe@hadoop102 ~]$ flink run -m yarn-cluster -c com.moe.wc.StreamWordCount /opt/module/data/flink_java_tutorial-1.0-SNAPSHOT.jar --host hadoop102 --port 7777
    

3、Kubernetes 部署

容器化部署时目前业界很流行的一项技术,基于 Docker 镜像运行能够让用户更加 方 便地 对应 用进 行管 理 和运 维。 容器 管理 工 具中 最为 流行 的就 是 Kubernetes(k8s),而 Flink 也在最近的版本中支持了 k8s 部署模式。

  1. 搭建 Kubernetes 集群(略)

  2. 配置各组件的 yaml 文件

    在 k8s 上构建 Flink Session Cluster,需要将 Flink 集群的组件对应的 docker 镜像分别在 k8s 上启动,包括 JobManager、TaskManager、JobManagerService 三个镜像服务。每个镜像服务都可以从中央镜像仓库中获取。

  3. 启动 Flink Session Cluster

    // 启动 jobmanager-service 服务
    
    kubectl create -f jobmanager-service.yaml
    
    // 启动 jobmanager-deployment 服务
    
    kubectl create -f jobmanager-deployment.yaml
    
    // 启动 taskmanager-deployment 服务
    
    kubectl create -f taskmanager-deployment.yaml
    
  4. 访问 Flink UI 页面

    集群启动后,就可以通过 JobManagerServicers 中配置的 WebUI 端口,用浏览器输入以下 url 来访问 Flink UI 页面了:

    http://{JobManagerHost:Port}/api/v1/namespaces/default/services/flink-jobmanager:ui/proxy

二、友情链接

大数据Flink-Java学习之旅第一篇