Lambda 架构分层
提供批处理层、速度层、服务层和数据传输层四层结构,各层可独立复用或裁剪,适配不同的实时性需求。
拖动滑块完成拼图,通过后发送验证码
独立第三方 AI 评测平台 · 只用实测数据
Oryx 2 是一个基于 Apache Spark 和 Apache Kafka 构建的 lambda 架构实现,专注于实时大规模机器学习。它由通用 lambda 架构层、ML 抽象层和端到端算法应用层三部分组成,内置协同过滤、分类、回归和聚类等算法。提供批处理层、速度层、服务层和 Kafka 数据传输层,支持逐层复用和按需裁剪。服务层通过 HTTP REST API 暴露查询接口,速度层更新延迟在秒级,批处理层周期可达数小时至一天。
Oryx 2 是 Oryx 1 项目的重新架构与延续,构建在 Apache Spark 和 Apache Kafka 之上,专为实时大规模机器学习场景设计。
它由三个层级构成:底层是通用的 lambda 架构层,提供批处理、速度和服务三层,不绑定机器学习;中间层提供超参数选择等 ML 抽象;顶层是 ALS、随机决策森林、k-means 等标准 ML 算法的端到端实现,同时包含连接各层的数据传输层。
项目支持逐层复用:可以忽略打包应用层,仅作为构建新 ML 应用的框架;也可以省略速度层以适配不需要增量更新的部署;甚至可以将协同过滤应用的批处理层替换为基于 Spark MLlib 之外新算法的自定义实现,同时保留服务和速度层。
提供批处理层、速度层、服务层和数据传输层四层结构,各层可独立复用或裁剪,适配不同的实时性需求。
内置协同过滤、分类、回归和聚类等标准算法的完整实现,可直接作为应用运行,也可作为框架参考。
基于 Spark Streaming 在 Hadoop 集群上运行,从 Kafka 读取数据并写入 HDFS,结合全部历史数据构建新结果,周期可达数小时至一天。
同样是 Spark Streaming 进程,监听 Kafka 输入主题,周期在秒级,从更新主题加载新模型并持续产出增量模型更新。
监听模型及更新,在内存中维护模型状态,通过 HTTP REST API 暴露查询操作,可多机部署以扩展服务能力。
以 Apache Kafka 主题作为数据传输机制,服务层等任何进程都可将数据写入主题,供速度层和批处理层消费。
使用单一 Typesafe Config 配置文件管理整个部署,包含关键接口类的实现,应用可打包并部署到 Hadoop 集群。
Oryx 2 适合需要在已有 Hadoop 与 Kafka 基础设施上搭建实时机器学习流水线的团队,尤其是希望直接复用协同过滤、分类等标准算法端到端实现的场景。它的分层设计允许按需裁剪速度层或替换批处理层算法,灵活性较高。但项目要求 Java 8 环境与 Hadoop 集群,且仅提供命令行脚本方式部署,对不熟悉分布式系统运维的开发者上手门槛明显。如果只是做小规模模型实验,直接使用 Spark MLlib 会更轻量;如果需要在生产环境中实现秒级模型更新与 REST 查询,Oryx 2 的架构设计有参考价值。
需要在 Kafka 与 Hadoop 上构建秒级模型更新的机器学习流水线,Oryx 2 提供完整的分层实现与 REST 服务接口。
可直接使用内置的协同过滤端到端应用,或将其批处理层替换为自定义算法,保留服务层与速度层。
项目按层与按档位复用的设计,适合用于验证批处理、速度、服务三层协同的架构模式。
需要自行搭建 Hadoop 集群、配置 Java 8 并管理多机部署,缺乏集群运维经验时上手难度较大。
单机即可完成的训练任务不需要 lambda 架构的批处理与速度层,使用 Oryx 2 会带来不必要的部署复杂度。
Oryx 2 是基于 Apache Spark 和 Apache Kafka 构建的 lambda 架构实现,专为实时大规模机器学习设计。它是 Oryx 1 的重新架构与延续,包含通用的 lambda 架构层、ML 抽象层以及 ALS、随机决策森林、k-means 等算法的端到端应用层。
包含四部分:批处理层基于 Spark Streaming 在 Hadoop 集群上运行,周期可达数小时至一天;速度层同样是 Spark Streaming 进程,周期在秒级;服务层在内存中维护模型状态并通过 HTTP REST API 提供查询;数据传输层使用 Apache Kafka 主题在层间移动数据。
顶层应用层实现了协同过滤、分类、回归和聚类等标准算法,具体包括 ALS、随机决策森林和 k-means。这些算法通过端到端应用形式提供,同时也可以忽略应用层,将其作为构建新 ML 应用的框架使用。
可以。项目支持逐层复用:如果部署不需要增量更新,可以省略速度层;可以忽略打包应用层,仅将其作为构建新 ML 应用的框架;也可以将协同过滤应用的批处理层替换为基于 Spark MLlib 之外新算法的自定义实现,同时保留服务层与速度层。
先在 Hadoop 集群上安装 Java 8 并设置 JAVA_HOME,下载或构建 Batch、Speed、Serving 层的 .jar 与 .sh 脚本,以 conf/als-example.conf 为起点创建 oryx.conf 配置文件。然后分别执行 ./oryx-run.sh batch、./oryx-run.sh speed 和 ./oryx-run.sh serving 启动三层。
可以,但需要配置指定不同的端口用于批处理层与速度层的 Spark Web UI 以及服务层的 API 端口。批处理层与速度层各自最多运行在一台机器上,服务层则可以运行在多台机器上以扩展服务能力。