`
hideto
  • 浏览: 2675044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang里实现MapReduce

阅读更多
参考: http://weblambdazero.blogspot.com/2008/08/mapreduce-in-erlang.html
MapReduce的主要原理是将一个数据集上的计算分发到许多单独的进程上(map),然后收集它们的结果(reduce)。

在Erlang里实现MapReduce非常细节也十分简单,例如Erlang的作者Joe Armstrong发表了一段代码来表示MapReduce版本的Erlang标准lists:map/2方法:
pmap.erl
-module(pmap).
-export([pmap/2]).

pmap(F, L) -> 
  S = self(),
  Pids = lists:map(fun(I) -> 
    spawn(fun() -> do_fun(S, F, I) end)
  end, L),
  gather(Pids).

gather([H|T]) ->
  receive
    {H, Result} -> [Result|gather(T)]
  end;
gather([]) ->
  [].

do_fun(Parent, F, I) ->					    
    Parent ! {self(), (catch F(I))}.

pmap的原理也很简单,对List的每项元素的Fun调用都spawn一个process来实际处理,然后再调用gather来收集结果。

如此简洁的代码就实现了基本的MapReduce,不得不服Erlang!

下面是一个fib的示例调用:
fib.erl
-module(fib).
-export([fib/1]).

fib(0) -> 0;
fib(1) -> 1;
fib(N) when N > 1 -> fib(N-1) + fib(N-2).


编译好之后比较一下lists:map/2和pmap:pmap/2的执行效率:
Eshell > L = lists:seq(0,35).
Eshell > lists:map(fun(X) -> fib:fib(X) end, L).
Eshell > pmap:pmap(fun(X) -> fib:fib(X) end, L).

测试结果lists:map执行时间大概4s,pmap:pmap执行时间大概2s,节约了一半的时间,呵呵。
分享到:
评论
3 楼 lzy.je 2009-02-01  
最近在想把map分布到多台物理机器上,以及更优化的分布到各个核上。

楼主是否了解有同类的lib,学习了解下先。
2 楼 hideto 2008-08-19  
在双核的机器上,在Windows任务管理器里查看CPU使用:
1)调用lists:map时CPU持续50%,CPU波形显示左边的居高不下而右边的一直处于低谷,说明只用了一个核
2)调用pmap:pmap时CPU持续100%,CPU波形显示两个核都居高不下,说明两个核都充分用了,调用时间减少一半
1 楼 hideto 2008-08-18  
节约一半的时间应该是因为我在双核的机器上做的测试,如果有更多核的机器或者分布计算到不同的机器,应该会快更多

相关推荐

    riak-Erlang.rar

    1. 分布式架构:Riak的数据分布在整个集群中,每个节点都存储数据的一部分,并通过一致性哈希(Consistent Hashing)进行数据分区,实现水平扩展。 2. 冗余与复制:Riak支持多副本机制,可以设置不同的复制因子以...

    Erlang中的OTP简介

    同时,采用小消息与大计算的原则,以及mapreduce来实现并行化处理。 mapreduce是一个并行高阶函数,它将一系列输入数据转换成输出结果。它由两个函数组成:F1处理数据项并将结果发送给一个或多个进程;F2则处理这些...

    gb_map_reduce:MapReduce库可在远程erlang节点上运行代码并收集答复

    一个简单的库,可在远程erlang节点上运行代码并收集结果。 它将给定的erlang源代码编译为二进制波束,并将其加载到已配置的目标节点上。 然后,对具有给定Mod,Fun和Args的目标节点执行rpc调用。 收集结果,并从...

    couchbaserl:用 Erlang 编写的 Couchbase 驱动程序

    `couchbaserl` 是一个用 Erlang 实现的 Couchbase 客户端驱动程序,它允许开发者在 Erlang 应用程序中与 Couchbase 服务器进行通信,执行诸如存储、检索和管理数据等操作。下面我们将详细探讨 `couchbaserl` 的关键...

    couchdb源码

    此外,你还可以研究CouchDB如何处理冲突、优化视图更新,以及如何通过Erlang OTP(Open Telephony Platform)框架实现高并发和容错。 对于开发者来说,熟悉CouchDB源码能提升数据库设计和管理的能力,帮助开发更...

    Hadoop总结资料Hadoop1.0.3

    3. **Erlbase**: 使用Erlang语言实现的XMPP Server,提供实时消息服务。 这种架构允许系统处理大规模并发的消息交换,同时利用Hadoop和HBase的分布式特性保证数据的持久性和可用性。 **HBase入门** HBase是一个非...

    云计算最新论文-中文

    第一篇论文《Erlang___v3.pdf》可能涉及了Erlang编程语言在云计算环境中的应用。Erlang因其并发处理和容错能力而受到青睐,常常用于构建分布式系统。在云计算中,这种特性使得Erlang成为构建高效、可靠服务的理想...

    并行计算--并发构造纵览

    7. **MapReduce**:Google提出的分布式计算框架,用于大规模数据集的并行处理,由Hadoop等开源项目实现。 8. **Actor模型**:每个Actor是独立的计算实体,通过异步消息传递进行通信,确保并发安全,如Erlang和Akka...

    开源项目研究与应用小结.pdf

    - **优点**:遵循AMQP协议,由Erlang实现,Spring社区活跃。 - **缺点**:需要掌握AMQP协议,Erlang语言可能不熟悉。 ##### 4. ZeroMQ - **优点**:轻量级、高效,提供多种常见通讯模型的抽象,几乎支持所有主流...

    riak_kv:Ripple KeyValue商店

    riak_kv概述Riak KV是使用 Erlang库分发的开源Erlang应用程序。 Riak KV提供了键/值数据存储,并具有MapReduce,轻量级数据关系和几种不同的客户端API。快速开始您必须具有或更高版本,以及GNU风格的构建系统才能...

    MongoDB数据库简单介绍

    - **MapReduce支持**:MongoDB内置了MapReduce功能,用于大规模数据集上的数据汇总操作,方便进行大数据分析工作。 - **跨平台兼容性**:MongoDB可以在多种操作系统上运行,包括但不限于OS X、Linux和Windows等,并...

    面向文档存储数据库系统Apache CouchDB入门到精通视频教程

    CouchDB 最初是用 C++ 编写的,但在 2008 年 4 月,这个项目转移到 Erlang OTP 平台进行容错测试。 CouchDB官方网站是:http://couchdb.apache.org/ 2、适应人群 有一定的Java基础,JavaWeb基础,并对数据库管理...

    Seven.Concurrency.Models.in.Seven.Weeks.2014.7.pdf

    - **现代语言的支持**:现代编程语言如Scala、Erlang、Clojure等提供了更为丰富的并发支持,如Actor模型、CSP(Communicating Sequential Processes)、数据并行计算等。 - **未来趋势**:随着摩尔定律的逐渐失效,...

    分布式系统课件(各个章节)

    除了上述知识点,分布式系统还涉及到复制、分区容错、一致性模型(如强一致性、弱一致性、最终一致性)、CAP理论、Paxos和Raft一致性算法、MapReduce编程模型等。学习分布式系统不仅需要理解这些基本概念,还需要对...

    大数据挖掘分析与管理—个性化精准营销方面的探索 当当在个性化推荐&精准营销方面的探索 共25页.pdf

    通过实时收集和分析用户行为数据,借助Kafka进行消息队列处理,MongoDB、Redis和HBase提供键值存储,以及Storm进行实时MapReduce,实现了实时推荐和统计分析。 在用户画像的构建上,通过SVM算法分析用户的购物习惯...

    MongoDB简介与实践.pdf

    MongoDB提供多语言驱动支持,包括Ruby/Ruby-on-Rails、Java、C#、JavaScript、C/C++、Erlang、Python、Perl等。 5. MongoDB的优势: MongoDB不需要额外的缓存,支持丰富的查询和数据类型,同时商业公司10gen提供...

    一线头部互联网公司技术架构设计资料合集.zip

    其使用Erlang语言构建的高性能服务器系统支持高并发交易,Memcached和Redis缓存系统确保快速响应,而MySQL和NoSQL数据库组合解决了数据存储问题。eBay还利用A/B测试和实时数据分析来优化用户体验。 四、Amazon的...

    MongoDB简介与实践

    - **MapReduce**:MongoDB利用MapReduce框架来进行大数据处理任务。 #### MongoDB数据模型 - **文档**:MongoDB中的基本单位是文档,每个文档都是一组键值对。 - **集合(Collection)**:集合是一系列文档的容器。 ...

Global site tag (gtag.js) - Google Analytics