热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Skynet,全新的RubyMapReduce实现

2004年,Google提出用于分布式数据处理的MapReduce设计模式,同时还提供了第一个C的实现。现在,一个名为Skynet的Rub

2004年,Google提出用于分布式数据处理的MapReduce设计模式,同时还提供了第一个C++的实现。现在,一个名为Skynet的Ruby实现已经由Adam Pisoni发布。

\u0026#xD;\n
Skynet是可适配、可容错的、可自我更新的,而且完全是分布式的系统,不存在单一的失败节点。
\u0026#xD;\n

Skynet和Google在设计上有两点重要的区别:

\u0026#xD;\n
  • Skynet无法向工作者(Worker)发送原生代码(Raw code),\u0026#xD;\n
  • Skynet利用结对恢复系统,不同的工作者会互相监控以防失败:\u0026#xD;\n
如果有一个工作者由于某种原因离开或者放弃了,就会有另一个工作者发现并接管它的任务。Skynet 也没有所谓的“主”管理进程,只有工作者,它们在任何时间都可以充当任何任务的主管理进程。
\u0026#xD;\n

Skynet的使用和设置都很容易,这也正是MapReduce这个概念的真正优势。Skynet还扩展了ActiveRecord,加入了MapReduce的特性,比如distributed_find。

\u0026#xD;\n

另一个类MapReduce的Ruby框架是Starfish,它已经一岁半了。可以读一读Peter Cooper关于Starfish的喜忧参半之情 。InfoQ采访了Adam Pisoni,谈及了Skynet的特性以及与Starfish之间的对比。

\u0026#xD;\n请你比较一下Skynet和Starfish?\u0026#xD;\n

在开发Skynet之前,我曾经研究过Starfish,觉得它达不到我需要的健壮性。Starfish只是个简单的系统,在可伸缩性、控制性上存 在着诸多限制。另外还有一些问题,比如Starfish发布任务的能力到底有多强。因为Ruby其实并不能打包并在网络上发送代码,只能传递引用。所以如 果说在机器Y上运行代码块X,机器Y将仅需要在开始时调用运行代码块X所须依赖的那些代码。既然如此,我不明白它是如何实现分布式的。

\u0026#xD;\n

关于Starfish还有一点我感到非常困惑,甚至曾经和它的作者通过email讨论过,那就是它如何解决使用DRB进行实 际代码的分发。在Starfish中,你只要提供一段代码以供map使用就行了。它会把这段代码转入到DRB对象中,并把这个对象的引用转发给工作者。这 样工作者线程就可以在本地执行这些代码了…但是Ruby DRB并不允许这样做。代码永远运行在编译它的那台机器上。因此,只要所有的工作者线程都在同一台机器上运行,那么一切都没有问题。但是一旦你试图在另一 台机器上运行工作者线程的话,尽管看起来代码好像是被发送过来的一样,但事实上代码还是在原来的机器上执行的。

\u0026#xD;\n

Starfish的另一个严重限制就是你不能异步地运行作业。例如,假设Web页面中的某个Action启动了一个Map/Reduce进程,那么在你启动了Starfish作业后,就无法任意行动了。谁启动了Starfish作业,就必须等待那个作业的完成。

\u0026#xD;\n

你要为Starfish编写一些小程序,它们的代码是你将要构建其中的。如果我没有弄错的话,你无法在同一台机器上运行多种类型的MapReduce作业。Skynet是一个更全面的MR系统,可以运行多种类型的多个作业,比如,各种不同的代码。

\u0026#xD;\n你可以谈一谈Skynet的优势么?\u0026#xD;\n

Skynet是构建于消息队列之上的。你可以根据可伸缩性的需要,选择使用哪一种消息队列。它目前支持tuplespace和mysql。Mysql的伸缩性比TS更好,因此我们选择使用mysql。

\u0026#xD;\n

你可以完全自由地创建作业,Skynet都可以发布并执行这些作业。在geni,我们通常对会异步地执行作业(这正是Starfish做不到的)。因此,一旦创建了新的MR作业后,它可以立即返回。在后端,它会把你的作业添加到队列中,并由某个工作者负责执行。然后,你可以调用作业对象,获取结果。

\u0026#xD;\n

Skynet也允许失败。工作者会互相关照。如果一个工作者失败了,无法及时完成任务,另一个工作者将会接起这个任务并尝试完成它。Skynet也支持map_data流,也就是说,即使某个数据集非常庞大,甚至无法放在一个数据结构中,Skynet也可以处理。

\u0026#xD;\n

什么是map_data流?

\u0026#xD;\n大多数时候,在你准备启动一个map_reduce作业时,必须提供一个数据的队列,这些数据已经被分离并将被并行处理。如果队列过大,以至于无法适应于内存怎么办?在这种情况下,你就要不能再用队列,而应该使用枚举(Enumerable)。Skynet知道去对象的调用:next或者:each方法,然后开始为“每一个(each)”分离出map_task来。通过这样的方式,不会有人再试图同时创建大量的数据结构。
\u0026#xD;\n

你还想谈论一下其他的特性么?

\u0026#xD;\n

还有很多特性值得一提,不过最想提醒大家的是,Skynet能够与你现有的应用非常完美地集成到一起,其中自然包括Rails应用。Skynet甚 至还提供了一个ActiveRecord的扩展,你可以在模型中以分布式的形式执行一些任务。在Geni中,我们使用这项功能来运行特别复杂的移植,它通 常涉及到在数百万的模型上执行Ruby代码。

\u0026#xD;\n
\u0026gt; Model.distributed_find(:all, :conditions =\u0026gt; \"id \u0026gt; 20\").each(:somemethod)
在你运行Skynet的时候,它将在每个模型上执行:somemethod,不过是以分布式的方式(这和你拥有多少个工作者相关)。它在向模型分发任务前不必进行初始化,甚至不必提前获取所有的id。因此它可以操作无限大的数据集。 用户的反馈如何?\u0026#xD;\n

MapReduce还处在发展的初期,只有很少的人在使用它。Release 0.9.2是一个非常关键的发布,它的很多代码得到了重写,性能得到了提升,诸多特性也获得增强。我们已经申请在Railsconf上做一次关于 Skynet的报告,但是还没有收到反馈。我们也计划创建一段视频来演示如何使用Skynet。

\u0026#xD;\n查看英文链接:Skynet, A New Ruby MapReduce

推荐阅读
  • 本文探讨了Go语言(Golang)的学习价值及其在Web开发领域的应用潜力,包括其独特的语言特性和为什么它是现代软件开发的理想选择。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • Windows 平台 Ruby on Rails 安装指南
    本文详细介绍如何在 Windows 系统上安装 Ruby 及其开发框架 Rails,包括必要的环境配置和组件安装。 ... [详细]
author-avatar
祗想抱著伱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有