【问题标题】:Realtime request-based recommendations with Spark - Spark JobServer?使用 Spark - Spark JobServer 的基于请求的实时推荐?
【发布时间】:2018-03-26 18:08:00
【问题描述】:

我们正在尝试找到一种方法来加载经过 Spark (2.x) ML 训练的模型,以便根据请求(通过 REST 接口)我们可以查询它并获得预测,例如http://predictor.com:8080/give/me/predictions?a=1,b=2,c=3

有一些开箱即用的库可以将模型加载到 Spark 中(假设它在使用 MLWritable 训练后存储在某个地方)然后将其用于预测,但将其包装在作业中并根据请求运行它似乎有点过头了/call 由于 SparkContext 的初始化。

但是,使用 Spark 的优势在于我们可以保存我们的 Pipeline 模型并执行相同的特征转换,而无需在 SparkContext 之外实现它。

经过一番挖掘,我们发现spark-job-server 可以通过允许我们为作业服务器初始化一个“热”火花上下文来帮助我们解决这个问题,因此,我们可以通过调用使用 spark-job-server 的 REST API 在现有上下文中预测作​​业(并获取结果)。

这是 API 化预测的最佳方法吗?由于特征空间,我们无法预测所有组合。

另外,我们正在考虑使用 Spark Streaming 并将预测保存到消息队列中。这允许我们不使用 spark-job-server,但不会简化整个流程。有没有人尝试过类似的方法?

【问题讨论】:

  • 我们最近尝试使用 jobserver 来解决按需执行 Spark 作业的类似问题。虽然它很好,但它远不是一个准备发货的生产级产品。您必须手动进行大量调整,对 Spark 2.x 的支持处于预览状态,部署它需要工作。如果您准备好投入大量工作,请继续。我们最终选择了基于 Sparks 未记录的 REST API 的解决方案。
  • 它甚至会在适当的时间内响应(低于 0.1 秒)吗?以我的经验,ML 管道真的很慢,因为它们的计算步骤很多,比如转换模式、类型检查,最重要的是至少在 NaiveBayes、W2V 和我使用过的其他一些模型/矩阵广播。 (当你有大量的预测要做时,成本会被摊销,但它们的设置在单个预测案例中是令人望而却步的)。无论如何,我看不到 spark ML 管道的性能接近亚秒级。你有其他成就吗?
  • @fritsjanb 你找到解决方案了吗?

标签: apache-spark apache-spark-ml spark-jobserver


【解决方案1】:

另一个选项可能是 cloudera 的 livy (http://livy.io/ | https://github.com/cloudera/livy#rest-api),它允许会话缓存、交互式查询、批处理作业等。我用过它,发现它很有前途。

【讨论】:

    【解决方案2】:

    场景

    • 使用 Spark Streaming 进行预测 - 支持实时评分/预测,但需要基于流的流(推送模型)。

      • 管道:score/predict on stream -> store in a realtime store -> serve data via REST or plug analytical toolkit for dashboards
      • 优点:实时评分、实时仪表板功能(如果与支持流写入的商店(例如 Druid)一起使用)。
      • 缺点:对所有事件进行评分、存储膨胀、需要进一步的数据归档策略以保持仪表板轻量级
    • 基于 REST 的预测(PredictionIO、SJS)- 支持交互级评分(请求-响应模型)。

      • 管道:deploy trained model in a SparkContext -> Predict and return scores based on REST request
      • 优点:支持交互式评分、选择性事件评分、使 WebApp 的交互智能
      • 缺点:性能不如基于流的评分,内存占用更高,Apache Spark 需要额外的框架

    答案

    这取决于用例。如果您有基于流的数据流并需要对所有事件进行评分,请使用基于 Spark Streaming 的管道。现实生活中的例子是对传入的金融交易进行评分以进行欺诈检测。如果您的要求是基于交互的,请使用基于 REST 的评分。例如,根据用户在网站/应用上的互动向用户推荐类似的商品/产品。

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      相关资源
      最近更新 更多