作者:陈之炎
本文约5500字,建议阅读15分钟
本文对利用MADlib项目来创建一个框架,以满足大规模数据量的需求。
随着数据规模的不断扩大,目前,许多现有的分析解决方案都无法胜任大规模数据量的计算任务。利用MADlib项目来创建一个框架,以满足大规模数据量的需求,该框架旨在利用现代计算能力,提供适应业务需求的强大解决方案。
概述
MADlib实现方案来自商业实践、学术研究和开源开发社区的多方面努力,它是一个基于SQL的数据库内置的可扩展的开源机器学习库,由Pivotal与UCBerkeley合作开发。MADlib创始于2011年,当时属于EMC/Greenplum,后来Greenplum变成了pivotal的Greenplum。主要由伯克利的学者:Joe Hellerstein发起,Stanford, University of Wisconsin-MADISON和University of Florida也有参与。MAD一词来源于:MagneticAgile、Deep三个词的首字母,意为有吸引力的、快速的、精准深入的,三个单词连在一起,意思是“极好的”,旨在为数据科学家们提供一个极好的机器学习和数据分析平台。
MADlib提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN聚集,文本挖掘,数据校验等。MADlib支持Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大扩展了数据库的分析功能,充分利用MPP架构使其能够快速处理海量数据集。
本文将为大家介绍MADlib的基本架构,工作原理及特性,并为开发人员提供快速入门指南。
ADlib创始于2011年,2015年7月MADlib成为Apache软件基金会的孵化器项目,经过两年的发展,于2017年8月成为Apache顶级项目。整个项目和代码是在Apache上是开源的,已经正式发布了MADlib 1.14、MADlib 1.15、MADlib 1.15.1、MADlib 1.16 等多个正式版本。
Apache MADlib 架构
MADlib有以下三个主要组件:
Python 驱动函数
C++ 实现函数
C++ 数据库抽象层
Python 驱动函数
Python 驱动函数位于如下子目录中:
https://github.com/apache/incubator-madlib/tree/master/src/ports/postgres/modules
这些功能是用户输入的主要入口点,主要负责算法的流程控制。一般来说,实现包括验证输入参数、执行SQL语句、评估结果和潜在的循环来执行更多的SQL语句,直到达到收敛标准为止。
C++实现函数
大多数位于如下子目录中:
https://github.com/apache/incubator-madlib/tree/master/src/modules
这些函数是特定算法所需核心函数和集合的C++定义。由于性能原因,这些都是在C++而不是Python中实现的。
C++ 数据库抽象层
大多数位于如下子目录中:
https://github.com/apache/incubator-madlib/tree/master/src/dbal
和:
https://github.com/apache/incubator-madlib/tree/master/src/ports/postgres/dbconnector
这些函数试图提供一个编程接口,将所有Postgres内部细节抽象掉,并提供一种机制,使MADlib能够支持不同的后端平台,并专注于内部功能而不是平台集成逻辑。
MADlib架构的主要理念:
在本地数据库中操作数据。无需在多个运行时环境之间进行不必要的数据移动。
利用最好的breed数据库引擎,将机器学习逻辑与数据库特定的实现细节相剥离
利用MPP共享技术,如Greenplum数据库,提供并行性和可伸缩性。
开放的实施维护措施,与Apache社区和正在进行中的学术研究保持密切的联系。
开发人员快速入门指南
准备工作