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

<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集群。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容