以上实现的是单节点多线程处理文件,但只能一定限度上提升批处理的执行效率,对于千万级的数据处理还远远不够,如过能做到多节点多线程才是真正能够更好提升效率的解决方法,这就是接下来要说的远程分区。通过看完中文官方文档,发现真正想实现远程分区的代码实现,过分复杂,并非是通过少量的伪代码就能实现功能,所以本文着重在于提供远程分区的一种实现思路,并不拓展开讲。
想明白远程分区就必须以深刻理解以下几个组件为前提,为什么呢,因为本地分区可以直接使用框架自己带实现,仅仅需要去实现Partitioner接口即可,但是远程分区涉及多节点之间的通信,往往需要自定义实现:
1、远程分区处理器(PartitionHandler),PartitionHandler组件知道远程网格环境的组织结构。 它可以发送step的上下文StepExecution请求给远端Steps,采用某种具体的数据格式,通过自定义实PartitionHandler接口,实现消息的远程分发,PartitionHandler接口可以有各种结构的实现类: 如RMI远程方法调用,EJB远程调用,自定义web服务、JMS、Java Spaces, 共享内存网格(如Terracotta或Coherence)、网格执行结构(如GridGain)。不论是哪一种选型都是为了实现网络通信。
2、分割器,Partitioner,分割器在本地分区也同样会使用,上面有相关代码贴图,它的职责就是为新的step实例生成执行环境(contexts),作为输入参数
3、各个从节点接收到分区的消息,将输入数据绑定到 Steps,并立即执行,将实现多节点处理文件
原文:https://www.cnblogs.com/zxc0302/p/12740790.html