分享嘉宾:杨旭 阿里巴巴 资深算法专家

编辑整理:朱荣

导读: Alink是基于Flink流批一体的机器学习平台,提供一系列算法,可以帮助处理各种机器学习任务,比如统计分析、机器学习、实时预测、个性化推荐和异常检测。除了提供Java API也提供了PyAlink,可以轻松部署到单机及集群环境,通过Jupyter、Zepplin等notebook使用。Alink已在阿里巴巴内部支持了众多的应用场景,并在2019年11月的Flink Forward Asia大会上宣布开源,随后不断迭代发布新的版本,增强功能,提升易用性。

本文主要介绍基于Flink平台的机器算法的功能、性能与使用实践,帮助大家快速上手Alink机器学习平台。其中重点介绍了python语言使用的PyAlink的方法和实例,同时对FM算法进行了详细的介绍,帮助大家更好上手Alink并在实际工作中得到广泛应用。

主要围绕下面俩点展开:

  • Alink基本介绍
  • ALink快速入门

01 Alink基本介绍

首先跟大家介绍一下Alink的基本情况:

Alink是由阿里计算平台事业部研发的基于Flink的机器学习算法平台,名称由Alibaba Algorithm AI Flink Blink 单词的公共部分组成。

Alink提供了丰富的算法库并天然可以支持批式和流式的处理,帮助数据分析和应用开发人员完成从数据处理、特征工程、模型训练、预测多节点端到端整体流程。

Alink提供Java API和Python API两种方式进行调用,Java API方便工程人员快速将Alink接入到现有系统中,Python API也叫PyAlink是方便提供机器学习同学完成快速的实验。

2. Alink功能介绍

Alink作为一个重要的机器学习的平台,覆盖机器学习各阶段13大类的62项功能点,囊括了机器学习核心的分类算法、聚类算法、回归算法三类算法,并附带了4项模型评估的方法,同时还包括关联规则和协同过滤算法、相似度算法等数据挖掘方面算法。

  • 在算法完成部分后,也提供了评估模型的评估方法,包括二分类评估、多分类评估、回归评估、聚类评估。
  • 在算法应用之前Alink为使用者准备了数据预处理、异常检查、文本处理等辅助功能处理工具。
  • 在在线学习方面Alink也准备了FTRL,可以在线状态中训练,在实时场景中提供模型实时更新机制,增强学习模型调整等时效性。
  • 在机器学习中的模型选择与调试参数服务,为大家提供有效的参数调优。

3. Alink性能比对

利用加速比对Alink与Sparkml进行性能评测。具体的测试方法是使用相同的测试数据,相同的参数,用Sparkml的计算时间除以Alink的计算时间。从下图实际测试对比数据可知,Alink在大部分算法性能优于Spark,个别算法性能比Spark弱,整体是一个相当的水平。

4. Alink建设进展

2019年7月发布Alink version 1.2.0:

  • 支持Flink多版本 1.11、1.10、1.09;
  • 支持多忘记系统:本地文件系统,Hadoop文件系统,阿里云oss文件系统;
  • CSV格式读取、导出组件支持各文件系统;
  • 推出AK格式读取、导出组件,简化文件数据操作;
  • 支持模型信息摘要、输出;
  • FM分类、回归算法;

2019年6月发布Alink version 1.1.2:

  • 新增30个数据格式转化组件;
  • 支持多版本Hive数据源;
  • 在Pipline和LocalPredictor中指出SQL Select操作;

2019年4月发布Alink version 1.1.1:

  • 提升使用体验,参数检查方面更加智能;

2019年2月发布Alink version 1.1.0:

  • 支持Flink1.1.0和Flink1.9的平台部署问题,PyAlink增加兼容PyFlink的功能;
  • 改进UDF/UDTF功能;
  • 支持JAVA Maven安装和 Python PyPl安装;
  • 支持多版本的Kafka数据源;

2018年12月发布Alink version 1.0.1:

  • 重点解决windows系统上的安装问题。

2018年11月首次发布Alink version 1.0,在Flink Forword Aisa大会上开源。

02 Alink快速入门

接下来为大家详细的介绍Alink的使用方式:

1. 使用Maven构建Alink项目简介

Java使用者借助Maven中央仓库,大家只需要4步就可以很容易的构建出Alink项目。第一步:创建项目;第二步:修改pom文件,导入Alink项目jar包;第三步:拷贝修改Alink Java Demo Code;第四步:构建运行;

详细过程可以参考:

http://zhuanlan.zhilu.com/p/110059114

2. PyAlink安装实践

Python使用者借助PyPl,也可以两部构建Alink的使用环境。第一步,针对不同操作系统调整部署环境,包括MacOS、Windows、阿里云服务器。第二步,从PyPl选择最新版本的PyAlink安装,如果之前有PyAlink需要先卸载旧版本,再通过PyPl进行安装。

① PyAlink任务在notebook上运行

PyAlink的运行方式分为两种,一种是本地运行,一种是集群运行;在Alink1.1.1以后优化了运行集群运行地址指定的方式,用户可以更简洁的运行PyAlink的任务。

② 基于PyFlink的Alink

Alink Operator与PyFlink Table可以相互转化,方便串联Flink和Alink的工作流。在1.1.1新版本中还提供了getMLEnv接口,能直接使用flink的提交运行方式直接进行提交 run -py *.py 往集群提交作业。例如:直接使用 python keans.py 。

③ PyAlink使用体验的改进

为方便的使用PyAlink,最新版本也对于两个方面进行了优化。一个是Python UDF运行中将自动检测python3命令,确定运行版本。另一个优化是对DataFrame和BatchOperator互转性能做了提升,优化后性能提升了80%左右;对collectToDataFrame进行了同样的优化。

3. Alink支持的数据源

Alink支持批式和流式5种类型的数据源,其中批式数据源包括文件数据源、Hive、Mysql、内存数据;流式数据源主要是针对Kafka。

① 读写Kafka示例

以逻辑回归模型为例使用Kafka分为四步:第一步定义Kafka数据源;第二步使用json提取组件解析Kafka中的数据,完成数据类型转换;第三步加载逻辑回归模型,对流数据进行预测;第四步将预测结果再次写出到Kafka。

② 将JSON格式的字符串解析为多列

Alink也针对json格式的数据进行解析组件JsonToColumnsStreamOp,比json_parser更方便的处理json格式到表格字段列格式的数据转化。

③ 日志的字符串解析为多列

在PyPlink中可以通过分布方式进行处理,先处理【】括号内的数据,再处理CSV格式的数据,PyPlink提供了select选择组件和link管道组件。

④ Alink类型转换组件

Alink框架中常用Columns、Vector、Triple等类型的数据作为算法的输入输出,但用户可能会有多种输入输出数据类型的需求。因此Alink提供了全面的类型转换组件,作为衔接使用户数据与Alink算法数据的桥梁。

Alink共支持T