分享

Zeppelin: 让大数据插上机器学习的翅膀

 昵称42427018 2019-06-21

导语:在数字化、智能化的时代,通过机器学习(Machine Learning)能够强有力的补充 Hadoop 大数据系统的数据处理能力,充分挖掘大数据的核心价值,一款好的算法开发平台能够让企业事半功倍,快速的进行算法实验和生产使用,Apache Zeppelin 就是这样一个兼具了 Hadoop 大数据处理和 机器学习/深度学习算法交互式开发的开源系统。

Apache Zeppelin 是一个可以进行大数据可视化分析的交互式开发系统,在 Zeppelin 中还可以完成机器学习的数据预处理、算法开发和调试、算法作业调度的工作,同时,Zeppelin 还提供了单机 Docker、分布式、K8s、Yarn 四种系统运行模式,以适应各类团队的需求。本文主要从作者工作经验出发,总结 Zeppelin 的相关实践经验。

网易杭州研究院数据科学中心机器学习开发组负责人 刘勋

Apache Zeppelin Committer,Apache Hadoop Contributor,多年商业软件和大数据领域开发工作经验,现从事网易猛犸大数据平台Hadoop和机器学习平台相关开发工作。

刘勋在PinCAP Infra Meetup的演讲

(以下文字约3000字,预计阅读需5分钟)

1
初识Zeppelin

Apache Zeppelin 是一个可以进行大数据可视化分析的交互式开发系统,可以承担数据接入、数据发现、数据分析、数据可视化、数据协作等任务,其前端提供丰富的可视化图形库,不限于SparkSQL,后端支持HBase、Flink 等大数据系统以插件扩展的方式,并支持Spark、Python、JDBC、Markdown、Shell 等各种常用Interpreter,这使得开发者可以方便地使用SQL 在 Zeppelin 中做数据开发。

对于机器学习算法工程师来说,他们可以在 Zeppelin 中可以完成机器学习的数据预处理、算法开发和调试、算法作业调度的工作,包括当前在各类任务中表现突出的深度学习算法,因为 Zeppelin 的最新的版本中增加了对TensorFlow、PyTorch 等主流深度学习框架的支持,此外,Zeppelin将来还会提供算法的模型 Serving 服务Workflow 工作流编排等新特性,使得 Zeppelin可以完全覆盖机器学习的全流程工作。

而在平台部署和运维方面,Zeppelin还提供了单机 Docker、分布式、K8s、Yarn 四种系统运行模式,无论你是小规模的开发团队,还是 Hadoop 技术栈的大数据团队、K8s 技术栈的云计算团队,Zeppelin 都可以让数据科学团队轻松的进行部署和使用 Zeppelin丰富的数据和算法的开发能力。

2
Zeppelin在机器学习领域的应用

Zeppelin 整体架构如图所示,底层基础设施支持HDFS、S3、Docker、CPU、GPU 等;分布式资源管理支持Kubernetes、YARN 和Zeppelin 物理集群的运行模式,分别对应各种场景的不同需求;计算引擎层支持,支持TensorFlow、PyTorch 深度学习开发及Python、R、Scala 传统算法开发,可接入大数据的批处理/流计算框架;最上面的交互开发层支持通过可视化的方式使用大数据引擎和开发各种算法。

对于机器学习任务,最核心的毋庸置疑是 ML 库,然而从整个机器学习平台处理流程来看,ML 库所占的比重其实不大,其余的部分,包括配置、数据收集、数据校验、特征抽取、分析工具、流程管理工具、资源管理、监控等环节,也都是这个综合性系统应当解决的问题。

此外,在机器学习算法运行之前,我们需要做数据预处理、特征工程、数据清洗,然后才能做(通过机器学习框架)训练模型,而训练出来的模型需要存储,然后对外提供在线服务,完成预测分析。同时,模型的数据库管理、服务的监控、动态扩缩容等,是其稳定运行的保障。从整个工作流来看,工程量非常庞大。好消息是,Zeppelin 社区逐步完成了对机器学习平台工作流的渗透,提供了较为完整的可视化交互的支持。

首先,在数据预处理和特征工程方面,从数据导入、数据处理、数据探索、数据抽样到数据训练,Zeppelin 已经实现了全覆盖:数据导入支持 HDFS、S3和RDNMS,数据聚合加工处理支持 Hive、Spark,数据探索是 Zeppelin 的强项之一,数据抽样、模型训练和A/B测试则支持Spark。

其次,在模型训练方面,包括逻辑回归(LR)、梯度提升树(GDBT)等传统机器学习模型,以及等卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)等常用于图像、语音、视频的深度学习模型,Zeppelin 都支持各种主流的库,针对前者如Python 库、Spark MLlib、XGBoost,针对后者包括TensorFlow、PyTorch、MXNet等。由于机器学习从业者常用语言包括Python、Scala、R 等,各种环境、版本的冲突是一个很大的挑战,Zeppelin 采用 Docker 的部署解决了这个问题。

再次,在模型在线服务方面,模型的管理支持 Hadoop,模型部署支持 Hadoop 和 Kubernetes,模型库的批处理采用 Spark,增量更新则采用性能更好的 Flink 流计算(以保持模型与时俱进)。

此外,在生态方面,Zeppelin还和 Hadoop Submarine 做了集成,后者是 Hadoop 社区开发的一款机器学习引擎,旨在解决机器学习算法在Kubernetes / YARN 平台上的批量作业处理。二者的集成,可以将 Zeppelin 从支持单任务开发扩展到了支持分布式任务调度的场景。

3
Zeppelin的新特性

为了支持机器学习工作负载,Zeppelin社区开发出了很多相关的特性,包括Zeppelin 集群模式(Cluster Mode)、Zeppelin Cluster Docker、Zeppelin On Yarn、多集群支持、动态配置、模型预测与增量训练、可视化调参和 Zeppelin WorkFlow 等重要特性。

Zeppelin 集群模式(Cluster Mode)。非集群模式,即只有一个 ZeppelinServer,解释器可以运行在这个Server 上,但若算法工程师数量很多,用户对服务可用性的要求可能无法满足。集群模式下,我们可以同时启动多个Zeppelin Server,基于Raft 算法选主(Master)、同步,共同对外提供服务。用户通过 Nginx 反向代理域名访问这些 Zeppelin 服务。同时,集群模式还提供了 Cluster 元数据管理的能力,集群中所有的 Zeppelin Server 的运行状况,以及所有的解释器进程,都会记录在元数据中,用户可以通过Nginx 配置访问不同的 Server,创建不同的解释器。解释器进程可以在集群中自动寻找资源最为富余的 Server 来运行,而当某个 Server 挂了且难以恢复,用户仍然可以通过元数据启动另外一个 Server,继续未完成的工作。Zeppelin 集群模式只需在参数中配置3个服务器的列表,并将其启动,即可自动组建 Zeppelin 集群,不需要借助 ZooKeeper。通过专门的集群管理页面,用户可以清晰看到集群中的服务器、解释器的数量和运行状态。

本机 Docker。无论是单机模式还是集群模式,用户都可以在本机 Docker 上创建解释器进程。通过集群模式 Docker,用户不需要 Yarn 或者 Kubernetes,即可创建 Zeppelin 集群,提供高可用服务,核心功能和Zeppelin On Yarn/ Kubernetes 并无二致,而且部署和维护也很简单,无需复杂的网络配置。

Zeppelin On Yarn。Zeppelin 的解释器可以创建在 Yarn 的运行环境中,支持Yarn 2.7及以上的版本。Zeppelin 容器的维护需要模拟终端,Zeppelin 支持通过shell 命令进入 Docker 进行维护,如安装所需的 Python 库、修改环境变量等。

多 Hadoop 集群。Zeppelin 支持通过配置,即指定不同的 Hadoop / Spark Conf 文件,即可用一个 Zeppelin 集群,去连接所有的 Hadoop 集群,而无需为所有 Hadoop 集群分别创建多个 Zeppelin 服务,从而简化管理和维护的复杂度,同时保证服务的可靠性。

动态配置。Zeppelin 提供服务接口,用户可以连接到自己的 KDC 或者 LDAP 认证系统,获取所需的信息,以便完成在不同的 Hadoop 集群上的操作。

模型预测与增量训练。Zeppelin 支持通过 Spark 或者 Flink 的解释器,使用批处理或者流处理的方式,把用户新产生的数据结合后台的模型训练服务进行增量训练,并把训练出来的新模型保存到模型库中。

可视化调参。不同的机器学习框架有不同的参数配置,甚至不同的算法参数都不同,传统命令行的方式容易配置出错,Zeppelin 基于其前端可视化展示能力,将支持针对每个算法自行设置一个参数调整界面,和模型一起发布,模型使用者可以使用该可视化界面,根据需要动态地调整参数。

Zeppelin WorkFlow。用户可以在按照 Zeppelin 提供的一种类似 Azkaban 的数据格式,编写 Node 之间的依赖,下方形成一个可视化的 WorkFlow 图,通过拖拽的方式可以编排整个工作流,设置每个节点的动作。结合参数的配置,用户可以编写一个复杂的 Zeppelin 工作流,在右边设置触发的条件,如按时间点、Rest 接口手动触发,或者按照周期性时间、数据变化来设置。

4
总结

Apache Zeppelin 覆盖机器学习全流程,让数据科学工作者能够以可视化的方式,方便地编写机器学习算法、调参和进行机器学习任务管理。针对大数据任务的特点,Zeppelin 也做了分布式的优化。同时,Zeppelin 还能与其他 Apache 大数据生态项目也能很好地集成,可以更好地满足不同团队的需求。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多