001 Flink 介绍与环境梳理

这将是一套完整详细且持续更新的、长期维护的 原创 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 依赖如下:


  org.apache.flink
  flink-java
  1.6.4


  org.apache.flink
  flink-streaming-java_2.11
  1.6.4


  org.apache.flink
  flink-clients_2.11
  1.6.4

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 依赖如下:


  org.apache.flink
  flink-java
  1.7.2


  org.apache.flink
  flink-streaming-java_2.11
  1.7.2


  org.apache.flink
  flink-clients_2.11
  1.7.2

3. Apache Flink 1.8.1

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

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

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


  org.apache.flink
  flink-java
  1.8.1


  org.apache.flink
  flink-streaming-java_2.11
  1.8.1


  org.apache.flink
  flink-clients_2.11
  1.8.1

并且,原先依赖 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.6.4-scala_2.11 with hadoop 2.7
  • Flink 1.7.2-scala_2.11 with hadoop 2.7
  • Flink 1.8.1-scala_2.11

本系列教程将直接使用最新稳定版 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-Hadoop-2.7.x依赖包

下载完成后,得到名为 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集群。


  • IT全栈公众号:
    001 Flink 介绍与环境梳理_第1张图片
    IT全栈营二维码.png
  • QQ大数据技术交流群:476966007:
    001 Flink 介绍与环境梳理_第2张图片
    大数据交流群二维码.png

你可能感兴趣的:(001 Flink 介绍与环境梳理)