Apache Flink 1.9.0 为什么将支持 Python API ?

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 众所周知,Apache Flink(以下简称 Flink)的 Runtime 是用 Java 编写的,而即将发布的 Apache Flink 1.9.0 版本则会开启新的 ML 接口和新的 flink-python 模块,Flink 为什么要增加对 Python 的支持,想必大家一定好奇。

作者:孙金城(金竹)

本文目录:
1.最流行的编程语言
2.互联网最火热的领域
2.1大数据时代,数据量与日俱增
2.2数据的价值来源于数据分析
2.3数据价值最大化,时效性
3.阿尔法与人工智能
4.总结

众所周知,Apache Flink(以下简称 Flink)的 Runtime 是用 Java 编写的,而即将发布的 Apache Flink 1.9.0 版本则会开启新的 ML 接口和新的 flink-python 模块,Flink 为什么要增加对 Python 的支持,想必大家一定好奇。

也许大家都很清楚,目前很多著名的开源项目都支持 Python,比如 Beam,Spark,Kafka 等,Flink 自然也需要增加对 Python 的支持,这个角度分析也许很好,但我们想想为啥这些非常火热的项目都纷纷支持 Python 呢?Python 语言有怎样的“魔力”让这些著名的项目都青睐于他?我们看一下统计数据。

1.最流行的编程语言

行业分析公司 RedMonk 最新的最受欢迎的语言排名数据如下:

image

上图从 Github 和 StackOverflow 两个维度进行分析的前十名如下:

  • JavaScript
  • Java
  • Python
  • PHP
  • C++
  • C#
  • CSS
  • Ruby
  • C
  • TypeScript

Pytnon 名列第三,目前也非常流行的 R 和 Go 语言排在了 15 和 16 名。这个很客观的排名足以证明 Python 的受众是多么的庞大,任何项目对 Python 的支持就是在无形的扩大项目的受众用户!

2.互联网最火热的领域

就目前而言互联网最热的领域应该是大数据计算,以前单机的计算时代已经过去了,单机处理能力的提高速度远远落后于数据的与日俱增的速度,以下几方面将分析为何大数据时代最炽热的互联网领域是大数据计算。

2.1 大数据时代,数据量与日俱增

随着云计算、物联网、人工智能等信息技术的快速发展,数据量呈现几何级增长,我们先看一份预测数据,全球数据总量在短暂的 10 年时间会由 16.1 ZB增长到 163 ZB,数据量的快速增长已经远远超越单个计算机存储和处理能力,如下:

image

上图我们数据量的单位是 ZB,我们简单介绍一下数据量的统计单位,基本单位是 bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。他们之间的转换关系是:

  • 1 Byte =8 bit
  • 1 KB = 1,024 Bytes
  • 1 MB = 1,024 KB
  • 1 GB = 1,024 MB
  • 1 TB = 1,024 GB
  • 1 PB = 1,024 TB
  • 1 EB = 1,024 PB
  • 1 ZB = 1,024 EB
  • 1 YB = 1,024 ZB
  • 1 BB = 1,024 YB
  • 1 NB = 1,024 BB
  • 1 DB = 1,024 NB

看到上面的数据量也许我们会质疑全球数据真的有这么恐怖吗,数据都从何而来? 其实我看到这个数据也深表质疑,但是仔细查阅了一下资料,发现全球数据的确在快速的增长着,比如 Facebook 社交平台每天有几百亿,上千亿的照片数据,纽约证券交易每天有几 TB 的交易数据,再说说刚刚发生的阿里巴巴 2018 年双 11 数据,从交易额上创造了 2135 亿的奇迹,从数据量上看仅仅是阿里巴巴内部的监控日志处理看就达到了 162 GB/秒。所以阿里巴巴为代表的互联网行业,也促使了数据量的急速增长,同样以阿里巴巴双 11 近 10 年来的成交额来用数字证明数据的增长,如下:

image

2.2 数据的价值来源于数据分析

如何让大数据产生价值呢?毋庸置疑,对大数据进行统计分析,让统计分析的结果帮助我们进行决策。比如推荐系统,我们可以根据一个用户长期的购买习惯,购买记录来分析其兴趣爱好,进而可以准确的进行有效推荐。那么面对上面的海量数据,在一台计算机上无法处理,那么我们如何在有限的时间内对全部数据进行统计分析呢?提及这个问题,我们不得不感谢 Google 发布的三大论文:

  • GFS - 2003年,Google 发布 Google File System 论文,这是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。
  • MapReduce - 2004 年,Google 发布了 MapReduce 论文,论文描述了大数据的分布式计算方式,主要思想是将任务分解然后在多台处理能力较弱的计算节点中同时处理,然后将结果合并从而完成大数据处理。MapReduce 是针对分布式并行计算的一套编程模型,如下图所示:

image

  • BigTable - 2006 年,Google 发布了 BigTable 论文,是一款典型是 NoSQL 分布式数据库。

受益于 Google 的三大论文,Apache 开源社区迅速开发了 Hadoop 生态系统,HDFS,MapReduce 编程模型,NoSQL 数据库 HBase。并很快得到了全球学术界和工业界的普遍关注,并得到推广和普及应用。其中阿里巴巴在 2008 年就启动了基于 Hadoop 的云梯项目,Hadoop 就成为了阿里巴巴分布式计算的核心技术体系,并在 2010 年就达到了千台机器的集群,Hadoop在阿里巴巴的集群发展如下:

image

但利用 Hadoop 进行 MapReduce 的开发,需要开发人员精通 Java 语言,并要对 MapReduce 的运行原理有一定的了解,这样在一定程度上提高了 MapReduce 的开发门槛,所以在开源社区又不断涌现了一些为了简化 MapReduce 开发的开源框架,其中 Hive 就是典型的代表。HSQL 可以让用户以类 SQL 的方式描述 MapReduce 计算,比如原本需要几十行,甚至上百行才能完成的 wordCount,用户一条 SQL语句就能完成了,这样极大的降低了 MapReduce 的开发门槛。这样 Hadoop 技术生态不断发展,基于 Hadoop 的分布式的大数据计算逐渐普及在业界家喻户晓!

2.3 数据价值最大化,时效性

每一条数据都是一条信息,信息的时效性是指从信息源发送信息后经过接收、加工、传递、利用的时间间隔及其效率。时间间隔越短,时效性越强。一般时效性越强,信息所带来的价值越大,比如一个偏好推荐场景,用户在购买了一个“蒸箱”,如果能在秒级时间间隔给用户推荐一个“烤箱”的优惠产品,那么用户购买“烤箱”的概率会很高,那么在1天之后根据用户购买“蒸箱”的数据,分析出用户可能需要购买“烤箱”,那么我想这条推荐信息被用户采纳的可能性将大大降低。基于这样数据时效性问题,也暴露了 Hadoop 批量计算的弊端,就是实时性不高。基于这样的时代需求,典型的实时计算平台也应时而生,2009 年 Spark 诞生于 UCBerkeley 的 AMP 实验室, 2010 年 Storm 的核心概念 BackType 被 Nathan 提出。Flink 也以一个研究性的项目于 2010 年开始于德国柏林。

3.阿尔法与人工智能

在 2016 谷歌阿尔法围棋以 4:1 战胜围棋世界冠军、职业九段棋手李世石之后,人们逐渐用新的眼光审视让深度学习,而且掀起了人工智能的“狂热”。百度百科对人工智能(Artificial Intelligence),英文缩写为 AI 的定义是: 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新技术科学。

image

而机器学习是进行人工智能的一种方法或者工具。机器学习在以 Spark,Flink 为首的大数据技术平台中具有较高的地位,尤其 Spark 近些年在 ML 方面做了巨大的努力,同时 PySpark 集成了很多优秀的机器学习类库,如典型的 Pandas,在这方面远远超过了 Flink,所以 Flink 正面面对自己的不足,在 Flink 1.9 中开启了新的 ML 接口和新的 flink-python 模块!

那么机器学习的重要和 Python 又有什么关系?我们看一下统计数据,看什么语言是最流行的机器学习语言。

IBM 的数据科学家 Jean-Francois Puget 曾经做过一个有趣的分析。他爬取了著名的求职网站 indeed 上雇主的岗位要求变动趋势,来评估当下市场上最受欢迎的岗位语言。其中当他单独搜索”machine learning”时候,也可以得到一个近似的结果:

image

其结构发现 Python 是与热的”machine learning”,虽然这是 2016 年的调查,但是也足以证明 Python 在”machine learning”方面的地位,同时上面我们提到的 RedMonk 的统计数据也足以证明这一点!

不仅仅是各种调查,我们也可以从 Python 的特点和现有的 Python 生态来说说为什么 Python 是机器学习的最好语言。

Python 是一种面向对象的解释型程序语言,由荷兰人(Guido van Rossum)于 1989 年发明,并于 1991 年发布了第一个版。Python 作为解释型语言,虽然跑得比谁都慢,但 Python 设计者的哲学是“用一种方法并且只有一种方法来做一件事”。在开发新的 Python 语法时,如果面临多种选择,Python 开发者一般会选择明确的没有或者很少有歧义的语法。简单易学的特点促使了 Python 有庞大的用户群体,进而很多机器学习的类库也是由 Python 开发的,比如:NumPy、SciPy 和结构化数据操作可以通过 Pandas 等等。所以 Python 这种丰富的生态系统为机器学习提供了一定程度的便利性,也必然成为了最受欢迎的机器学习语言!

4.总结

本篇重点描述了 Apache Flink 为什么需要支持 Python API。以实际数字说明目前我们处于一个大数据时代,数据的价值要依靠大数据分析,而由于数据的时效性的重要性而催生了著名的 Apache Flink 流式计算平台。

目前在大数据计算时代,AI 是炙手可热的发展方向,机器学习是 AI 的重要手段之一,而恰恰由于语言的特点和生态的优势,Python 成为了机器学习最重要的语言,进而表明了 Apache Flink 着手发力 Flink API 的动机!所谓时势造英雄,Apache Flink Python API 是时代的产物,是水顺自然而得之的必然!

Tips:

本文节选自金竹的博客【Apache Flink 说道系列】,点击「阅读原文」可查看作者特色说道系列原版文章~

/ Apache Flink 极客挑战赛,10 万奖金等你拿 /

详情链接:https://tianchi.aliyun.com/markets/tianchi/flink2019

image

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
5月前
|
SQL 固态存储 Java
Apache Doris 原生C++ UDF之Coding(2)
Apache Doris 原生C++ UDF之Coding(2)
47 0
|
4月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
82 0
|
8月前
|
SQL Java Apache
Apache Doris 原生C++ UDF之Coding(2)2
Apache Doris 原生C++ UDF之Coding(2)2
98 0
|
5月前
|
API 流计算 知识图谱
Flink教程(11)- Flink高级API(Window)
Flink教程(11)- Flink高级API(Window)
45 0
|
6月前
|
SQL Java Apache
[1.2.0新功能系列:三]Apache doris 1.2.0 Java UDF 函数开发及使用
[1.2.0新功能系列:三]Apache doris 1.2.0 Java UDF 函数开发及使用
96 0
|
8月前
|
固态存储 Apache C++
Apache Doris 原生C++ UDF之Coding(2)1
Apache Doris 原生C++ UDF之Coding(2)1
145 0
|
SQL Java API
Flink Table API 编程| 学习笔记
快速学习 Flink Table API 编程。
165 0
|
缓存 分布式计算 Java
Flink入门——DataSet Api编程指南
Flink入门——DataSet Api编程指南
215 0
Flink入门——DataSet Api编程指南
|
缓存 Java 测试技术
Flink实战(四) - DataSet API编程(上)
Flink实战(四) - DataSet API编程(上)
189 0
Flink实战(四) - DataSet API编程(上)
|
Java API Scala
Flink实战(四) - DataSet API编程(中)
Flink实战(四) - DataSet API编程(中)
97 0
Flink实战(四) - DataSet API编程(中)

推荐镜像

更多