【发布时间】:2016-01-26 22:29:23
【问题描述】:
我想了解以下是否是 Spark 的正确用例。
对应用程序的请求可以在消息队列中接收,也可以在包含一批请求的文件中接收。对于消息队列,目前每秒大约有 100 个请求,尽管这可能会增加。有些文件只包含几个请求,但更常见的是数百甚至数千个。
对每个请求的处理包括过滤请求、验证、查找参考数据和计算。一些计算引用了规则引擎。一旦这些完成,一条新消息将被发送到下游系统。
我们希望使用 Spark 将处理分布在多个节点上,以获得可扩展性、弹性和性能。
我设想它会像这样工作:
- 将一批请求作为 RDD 加载到 Spark 中(在消息队列上接收的请求可能使用 Spark Streaming)。
- 将为过滤、验证、参考数据查找和数据计算编写单独的 Scala 函数。
- 第一个函数将被传递给 RDD,并返回一个新的 RDD。
- 下一个函数将针对前一个函数的 RDD 输出运行。
- 所有函数完成后,将对最终 RDD 运行 for 循环理解,以将每个修改后的请求发送到下游系统。
以上听起来是否正确,或者这不是使用 Spark 的正确方法?
谢谢
【问题讨论】:
-
我做了一些类似的事情。主要是,我们开发了一个网络爬虫,但我们使用了 Scala Akka 框架。它是基于参与者的框架,提供开箱即用的并发性和可扩展性。系统顶部有 MainActor,它触发整个过程。创建 MasterActor,后者反过来为工人提供单元流程。单元过程是处理单个 URL,清除非英语数据,并存储在 Cassandra 中。输出是一个 Future 对象,上面有一些回调。一般来说,参与者只发送/接收不可变的消息。您的系统看起来像是基于演员的。
-
非常感谢,但我们正在专门考虑使用 Spark,并想知道它是否适合满足要求。 Spark 提供了比 Akka 更高层次的抽象,
-
我知道,但也可以同时使用它们。
标签: apache-spark spark-streaming