应用示例


mapreduce 完成分词统计工作.

图示1

任务拆分:

Map Task:统计出句子中的单词.

Reduce Task:对map接过进行合并

Aggregate Task: 合并工作

设计如下:

    1. Master Actor :将句子发送给Map Actor
    1. Map Actor : 统计数据,将结果回传,然后Master Actor将结果发送给Reduce Actor
    1. Reduce Actor : 合并数据, 将结果回传,然后Master Actor将结果发送给Aggregate Actor
    1. Aggregate Actor : 接受数据后更新内部状态,获取完整的数据列表.
    1. Master Acotr :往 Aggregate Actor发送信息,索要结果

    图示2

MapActor

    ActorRef mapActor = getContext().actorOf(Props.create(MapActor.class,reduceActor).withRouter(new RoundRobinPool(5)),"mapActor");

rounter的作用:

上面我们创建的MapActor,是一个Rounter Actor,执行withRount方法的时候,其实创建了多个相似的一组Actor实例,called rountes,这样可以通过多个Actor分散负载。

如果Actor是有状态的,多个实例可能就会有问题。

unhandled(message)

将发布事件到Actor系统的事件流中去。(ActorSystem's EventStream.)。与死信不同,actor终止或者无人接收时会发到死信队列。

一个actor可以在事件流中订阅类akka.actor.DeadLetter。

问题

  • unhandle 后续处理,作用
  • 如何接收死信

例子


有一个基于mapreduce的例子,实现了分词统计的功能。

参阅:MapReduceApplication