写点什么

Skynet,全新的 Ruby MapReduce 实现

  • 2008-02-05
  • 本文字数:2142 字

    阅读完需:约 7 分钟

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

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

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

如果有一个工作者由于某种原因离开或者放弃了,就会有另一个工作者发现并接管它的任务。Skynet 也没有所谓的“主”管理进程,只有工作者,它们在任何时间都可以充当任何任务的主管理进程。

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

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

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

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

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

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

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

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

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

什么是 map_data 流?

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

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

Model.distributed_find(:all, :conditions => “id > 20”).each(:somemethod)

在你运行 Skynet 的时候,它将在每个模型上执行:somemethod,不过是以分布式的方式(这和你拥有多少个工作者相关)。它在向模型分发任务前不必进行初始化,甚至不必提前获取所有的 id。因此它可以操作无限大的数据集。 用户的反馈如何?MapReduce 还处在发展的初期,只有很少的人在使用它。Release 0.9.2 是一个非常关键的发布,它的很多代码得到了重写,性能得到了提升,诸多特性也获得增强。我们已经申请在 Railsconf 上做一次关于 Skynet 的报告,但是还没有收到反馈。我们也计划创建一段视频来演示如何使用 Skynet。

查看英文链接: Skynet, A New Ruby MapReduce

2008-02-05 08:241754
用户头像

发布了 53 篇内容, 共 13.7 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

极客时间运维进阶训练营第二周作业

好吃不贵

Spring Boot和Spring Cloud的关系

阿泽🧸

Spring Boot 10月月更

SQL 的查询语句

芯动大师

Python SQL语句 10月月更

千锋大连“匠心8载 感谢有你”周年庆典隆重举行

千锋IT教育

政务数据安全解决方案

前嗅大数据

政务 基础数据方案 数据方案

千锋沈阳前端怎么样?学员真实案例

千锋IT教育

一文看懂Htmx

天择

JavaScript htmx

Python中的协议有什么作用?

Jackpop

IBM Websphere实践 实验4

w010w

Java jsp 10月月更 企业级应用程序开发 实验报告

极光笔记 | 极光clickhouse千亿级数据分析实践之路

极光JIGUANG

Java | 接口

陌上

编程 Java、 10月月更

华为云智能云接入ICA,让世界距离更近

科技怪授

ica

企业上云也可以很智能,智能云接入ICA替企业搭建“上云梯”

科技怪授

ica

企业数据上云,怎能少的了华为云企业交换机ESW?

科技怪授

ESW

想在杭州学前端,千锋IT培训怎么样?学员真实案例

千锋IT教育

“程”风破浪的开发者|【模块-Java布局】十分钟挑战鸿蒙Codelab组件

liuzhen007

OpenHarmony “程”风破浪的开发者

【移动应用安全】Android文件系统

w010w

android 10月月更 安卓文件系统

【web 开发基础】PHP 中的特殊流程控制(exit) -PHP 快速入门 (22)

迷彩

调试工具 10月月更 web开发基础 PHP基础 exit

11 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

培训与认证

Java | 内部类

陌上

Java 编程 10月月更

Docker网络模式:Bridge和Host的区别,一文带你了解!

wljslmz

Docker 容器 软件 10月月更

国际移动设备识别码IMEI

Geek_古藤模根

移动设备识别 GSMA IMEI

JS事件,你真的懂吗(捕获,冒泡)?

乌龟哥哥

10月月更

首次!龙蜥社区生态用户实践精选集发布在即

OpenAnolis小助手

开源 龙蜥社区 生态伙伴 厂商 案例集

用芯弹一首《大加洛普舞曲》:从AI-ISP,透视vivo的双芯之路

脑极体

流式计算常见的开源实现

穿过生命散发芬芳

10月月更 流式计算

2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。 package main import “f

福大大架构师每日一题

golang 福大大 选择题

分布式系统快速接入pinpoint1.8.3指南

程序员欣宸

Java Pinpoint 10月月更

拒绝繁琐,华为云企业交换机ESW就是要让数据上云一步到位

科技怪授

ica

Excel做数据分析?是真的很强!

Jackpop

你用 Excel 做的最酷的事情是什么?

Jackpop

Skynet,全新的Ruby MapReduce实现_Ruby_Sebastien Auvray_InfoQ精选文章