您的位置:首页 > 数据库 > Redis

基于redis和R语言构建并行计算平台(yiyou)

2015-05-10 23:28 459 查看
最近研究gearman时发现不少问题,关于队列持久化的问题搞了半个月还是没能解决,并且国内可以参考的资料太少,所以考虑换一种方案试试。如下贴出gearman集群的架构:



可以看到该架构存在的问题,当持久化不起作用时,只能通过多台JobServer同时运行的方式保证集群的正常运作。另外client和worker这间的数据传输需要通过JobServer,不能一步到位。这个在数据量大时不能突显优势。

本人搞R语言有些时间了,并且该语言近几年比较火,用于统计、分析、建模、可视化,效率很高。为了承接前期研究的成果,最理想的方式就是基于现有的R语言实现分布式调度和并行计算。基于对gearman框架的理解,分析了其实现机制,如图:



Gearman是基于TCP/IP协议进行连接的,并且client不知道worker的信息,通过jobserver的中介作用,完成调度。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。使用Redis数据库既可以用来实现进行间通信,又能够对数据进行快速读写,基于保存的信息,实现client和worker信息的透明,与gearman相比有很多优势。

基于以上想法,结合Redis和R语言,对gearman的实现机制进行优化,实现了支持R语言和NOSQL数据库的并行计算框架yiyou。代码结构如下:



Watch用于查看队列信息;yiyou-server类似于jobserver,主要用于任务的分配和NOSQL数据库的管理;yiyou-stop关闭整个并行集群;yiyou-client-lib为客户端程序依赖库,可基于此定制客户端程序;yiyou-worker-lib为工作端程序依赖库,可基于此定制工作端程序;yiyou-dlib为并行计算的依赖库,可基于它,对单线程的可拆分R代码平滑移植到集群上,不需要改动之前的代码,例子如下:



可以看到,基于 yiyou框架实现的并行计算,依赖于集群的计算能力,为R语言大数据分析提供了一种可行的方案。

目前该框架尚不成熟,只提供了任务的并行分解,可基于此写出类似于MapReduce的逻辑,期待后续更多精彩内容。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: