一、Flink介绍与环境梳理

作者: Z尽际 | 来源:发表于2019-07-22 22:28 被阅读153次

    这将是一套完整详细且持续更新的、长期维护的 原创 Flink系列教程、文档,其中会包含商用实例详解、Flink源码讲解、机制剖析、周边组件讲解等,旨在帮助开发者快速融入Flink开发,或作为工具文档参阅。也希望更多的开发者可以参与到大数据相关的技术讨论中来,共同商讨疑难杂症,丰富社区。——尽际

    本文标题: Flink介绍与环境梳理

    文章作者: 尽际

    发布时间: 2019年07月17日 - 22:27:30

    最后更新: 2019年07月22日 - 22:27:30

    原始链接: https://www.jianshu.com/p/86d0cbe2f45a

    许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。


    一、Flink介绍与环境梳理

    在这部分系列教程中,暂且略过大数据相关介绍与Flink在生态圈中的定位介绍,毕竟,读者可以通过搜索引擎查阅到大量关于这部分内容的相关说明。因此,我们将直接讲解如何使用 Flink。

    为了更好的融入Flink,以及更好的接受这个学习过程,我们将在各种实例中穿插讲解相关必要的知识点。因此,在讲解各种专业概念之前,先开始准备部署一套Flink集群吧。

    1.1 选择并下载 Flink 安装包

    本系列教程将使用 Apache 编译好的 Flink 软件包进行安装。如有需要,后期也会整理如何针对不同的需求对 Flink 源码进行修改与编译。

    1.1.1 重大 Flink 版本介绍

    下面将简单介绍几个(截止到2019年07月)最主流的、被使用的Flink版本。这部分内容暂且作为了解即可,后续会慢慢展开介绍。

    1. Apache Flink 1.6.4

    Flink 1.6.4 是 Flink 1.6.x 系列版本的第 4 次修订版,x所代表的数字一般代表小版本的变动,主要修复一些已知的重要的BUG。包括基于YARN运行Job时容器分配不均、连接器无法正常连接、监控指标异常等。

    另外还更新了部分 Maven 依赖如下:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-java</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java_2.11</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients_2.11</artifactId>
      <version>1.6.4</version>
    </dependency>
    

    Flink 1.6.4 是 Flink 1.6.x 中最稳定的版本,很多大型企业会根据1.6.4的Flink版本进行定制修改,或业务开发。

    2. Apache Flink 1.7.2

    在 Flink 1.7.x 系列相比于 Flink 1.6.x 系列,修复了420多个已知问题,并增加很多功能,其中最值得关注的几个重要内容如下:

    • 支持 Scala 2.12 API
    • 支持写入数据到亚马逊 S3 系统
    • 支持处理流式数据时,在 SQL 中使用 MATCH_RECOGNIZE 语法
    • 支持时态表(特殊的维度表)以及时态表和流式数据的 JOIN 操作
    • 支持通过文件定义 SQL 视图(通过SQL CLI),即通过类似SQL的语法生成Flink Job
    • 支持 Kafka 2.0 Connector,并能够实现 EXACTLY_ONCE 语义

    在此基础之上,Flink 1.7.2 版本相比于 Flink 1.7.0 又修复了 40 多个已知问题,并同样更新部分 Maven 依赖如下:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-java</artifactId>
      <version>1.7.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java_2.11</artifactId>
      <version>1.7.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients_2.11</artifactId>
      <version>1.7.2</version>
    </dependency>
    

    3. Apache Flink 1.8.1

    在 Flink 1.8.x 系列相比于 Flink 1.7.x 系列,增加的最值得关注的几个重要内容如下:

    • 支持连续清理数据分析过程中产生的状态数据
    • 支持过滤 Kafka 恢复的分区
    • 解绑 Flink 软件包与 Hadoop 二进制包

    其中 Flink 1.8.1 变更的 Maven 依赖如下:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-java</artifactId>
      <version>1.8.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java_2.11</artifactId>
      <version>1.8.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients_2.11</artifactId>
      <version>1.8.1</version>
    </dependency>
    

    并且,原先依赖 flink-table 的开发者需要转向于依赖 flink-table-plannerflink-table-api-java-bridge(Java API) 或 flink-table-api-scala-bridge(Scala API)。

    额外补充:Flink 1.9.0 的 snapshot 版本已经出炉,目前并非稳定版本,因此暂且不做过多介绍。

    1.1.2 下载指定的Flink版本

    下面列出了上述各个主流 Flink 版本的下载地址,读者也可自行前往官网进行下载。

    本系列教程将直接使用最新稳定版 Flink 1.8.1 版本作为实例进行演绎操作。

    下载完成后,得到名为 flink-1.8.1-bin-scala_2.11.tgz 的压缩包。

    1.1.3 下载指定的Hadoop依赖

    在使用Flink的情景中,如果涉及到对 Hadoop 组件的操作,则需要下载对应的jar包。

    以 Flink 1.8.1、Hadoop 2.7.x 为例,下载完成 Flink 压缩包后,继续 Hadoop 依赖包,链接如下:

    下载完成后,得到名为 flink-shaded-hadoop-2-uber-2.7.5-7.0.jar 的依赖包。

    1.2 确认现有的集群环境

    ​ 在开始安装 Flink 之前,先来确认一下笔者目前所使用的安装环境。

    1.2.1 Linux版本与环境筛查

    1. 虚拟机的配置项

      表1-1 列出了三台虚拟机的核心配置。这是目前最关心的几项内容,不再详述其余配置项。

    提示:3 台虚拟机的配置均为CentOS 6.8 版本,其与 CentOS 7.x 系列版本的使用方式大同小异,对于操作Flink而言并无分别。如果读者想体验更新的CentOS系统,自行切换即可。

    • 表1-1 虚拟机的核心配置项
    配置项 linux01 (第一台虚拟机) linux02 (第二台虚拟机) linux03 (第三台虚拟机)
    内存 4 GB 2 GB 2 GB
    CPU内核数 2 1 1
    硬盘 50 GB 50 GB 50 GB
    网络适配器 NAT NAT NAT
    1. 禁用SELinux

      分布式框架在进行端口通信时,SELinux 有可能阻塞其中的通信,因此暂且将其禁用。 在 CentOS 6.8 中,使用如下命令编辑 SELinux 配置文件:

      # vi /etc/sysconfig/selinux00000
      

      并将 SELINUX 选项改为: SELINUX:disable
      然后保存退出即可。

    2. 关闭防火墙

      防火墙也可以导致分布式框架之间的通信被拒绝,因此暂且关闭防火墙。

      在 CentOS 6.8 系统中,使用如下命令关闭 iptables 防火墙:

      # service iptables stop
      # chkconfig iptables off
      

      提示:在 CentOS 7.x 系统中,用 firewalld 替代了 iptables。关闭防火墙的命令如下:

      # systemctl stop firewalld.service
      # systemctl disable firewalld.service
      
    3. 配置网卡文件

      为了能够在 Windows 中通过 SSH 终端远程控制虚拟机,并实现分布式框架之间的通信,需

      要修改虚拟机的网卡文件。

      在 CentOS 6.8 中编辑网卡配置文件的命令如下:

      # vi /etc/sysconfig/network-scripts/ifcfg-eth0
      

      编辑内容如下:

      # 当前虚拟机的 IP 地址,前三段与网关地址一致 
      IPADDR=192.168.216.20
      # 固定的子网掩码地址 
      NETMASK=255.255.255.0
      # 网关地址,需要与虚拟机 NAT 设置中的网关的 IP 地址一致 
      GATEWAY=192.168.216.2
      # 首选 DNS,设置为网关的 IP 地址即可 
      DNS1=192.168.216.2
      # 备选 DNS,设置为如下即可 
      DNS2=8.8.8.8
      # 设置为静态配置 IP 地址的模式 
      BOOTPROTO=static
      # 是否开机自动启动网卡 
      ONBOOT=yes
      

      编辑完成后,执行以下命令重启网卡:

      # service network restart
      

      配置其余两台虚拟机网卡的过程与上述内容基本一致,只需要修改 IPADDR 中 IP 地址的最 后一段,使其不与其他虚拟机重复即可。

    4. 修改 IP 地址与主机名的映射关系

      在 CentOS 6.8 中编辑 network 文件的命令如下:

      # vi /etc/sysconfig/network
      

      在本例中,将其修改为如下内容:

      192.168.128.20 linux01
      192.168.128.21 linux02
      192.168.128.22 linux03
      
    5. 实现 3 台虚拟机之间的无秘钥访问

      集群中各虚拟机之间需要通过 SSH 协议进行无秘钥访问。在配置时请注意,每台虚拟机都可以通过 SSH 协议无秘钥访问本机。 读者可根据如下步骤快速实现无秘钥访问。

      下面以第 1 台虚拟机上的操作为例。 首先,执行以下命令生成秘钥:

      $ ssh-keygen -t rsa
      

      然后,分发公钥至 3 台虚拟机,执行命令如下:

      $ ssh-copy-id linux01; ssh-copy-id linux02; ssh-copy-id linux03;
      

      其他两台虚拟机重复执行上述两个步骤即可。

    6. 配置 Java 环境变量

      本教程采用的 Java 环境是 JDK 1.8 版本,如果读者使用了低于此版本的 JDK,请自行更换, 并在 Linux 的系统变量与用户变量中配置 JDK。

      配置样例如下:

      JAVA_HOME=/home/admin/modules/jdk1.8.0_121
      export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/ lib/tools.jar
      export PATH=$PATH:$JAVA_HOME/bin
      

      此处省略JDK下载与安装的步骤。

    1.2.2 已部署的 Hadoop 相关节点

    在生产环境中,大多情况会下,Flink会与Hadoop相关服务配合使用,因此在搭建Flink集群之前,最好已经完成Hadoop相关的服务部署。

    表1-2 中列举了虚拟机中已经部署的框架服务。

    • 表1-2 已部署的框架服务
    框架类别 linux01(第一台虚拟机) linux02(第二台虚拟机) linux03(第三台虚拟机)
    HDFS(Hadoop 2.7.2) NameNode、DataNode DataNode DataNode、SecondaryNameNode
    YARN-MR(Hadoop 2.7.2) NodeManager、JobHistoryServer ResourceManager、NodeManager NodeManager
    Zookeeper QuorumPeerMain QuorumPeerMain QuorumPeerMain

    读者可以参考作者简书中的Hadoop相关文章完成部署。如有需要,也可私信索取并下载 3 台已经完成上述部署配置的虚拟机进行使用。

    1.4 本章小结

    本章简单介绍了Flink多个版本之间的重要区别,并罗列了稍后搭建Flink集群需要使用的虚拟机环境。在下一章中,将详细演示如何基于不同模式搭建Flink集群。

    相关文章

      网友评论

        本文标题:一、Flink介绍与环境梳理

        本文链接:https://www.haomeiwen.com/subject/fgnxlctx.html