1、今天看了一下riak的mapred/3/4/5方法,以下几处要留意的地方。
Equivalent to mapred(Inputs, Query, default_timeout(mapred)).
mapred_inputs() = [{bucket(), key()} | {bucket(), key(), term()}] | {modfun, Module::atom(), Function::atom(), [term()]} | bucket() | {index, bucket(), Index::binary(), key()} | {index,bucket(), Index::binary(), StartKey::key(), EndKey::key()}
mapred_queryterm() = {map, mapred_funterm(), Arg::term(), Accumulate::boolean()} | {reduce, mapred_funterm(), Arg::term(), Accumulate::boolean()} | {link, Bucket::riakc_obj:bucket(), Tag::term(), Accumulate::boolean()}
这个参数理解需要花些 时间
{map, mapred_funterm(), Arg::term(), Accumulate::boolean()}
mapred_funterm() = {modfun, Module::atom(), Function::atom()} | {qfun, function()} | {strfun, list() | binary()}
以这个简单说明{qfun, function()}
Count = fun(G, undefined, none) ->
[dict:from_list([{I, 1}
|| I <- binary_to_term(riak_object:get_value(G))])]
end.
此处的undefined 实际是输入参数{bucket(), key(), term()}中的term,默认是undefined
此处的none 实际是query参数[{map, {qfun, Count}, none, false},中的none
1> {ok, Client} = riakc_pb_socket:start("127.0.0.1", 8087).
2> Mine = riakc_obj:new(<<"groceries">>, <<"mine">>,
term_to_binary(["eggs", "bacon"])).
3> Yours = riakc_obj:new(<<"groceries">>, <<"yours">>,
term_to_binary(["bread", "bacon"])).
4> riakc_pb_socket:put(Client, Yours, [{w, 1}]).
5> riakc_pb_socket:put(Client, Mine, [{w, 1}]).
Now that we have a client and some data, let’s run a query and count how many occurances of groceries.
6> Count = fun(G, undefined, none) ->
[dict:from_list([{I, 1}
|| I <- binary_to_term(riak_object:get_value(G))])]
end.
7> Merge = fun(Gcounts, none) ->
[lists:foldl(fun(G, Acc) ->
dict:merge(fun(_, X, Y) -> X+Y end
分享到:
相关推荐
5. 查询语言:虽然主要为键值存储,但Riak还支持查询语言 Riak Search 和 Riak KV MapReduce,允许用户执行更复杂的查询操作。 安装Riak和Erlang在Linux上通常涉及以下步骤: 1. 安装依赖:确保系统安装了必要的...
- **性能优化**:利用 Riak 的 MapReduce 功能进行复杂查询,但要注意其性能开销。 - **备份与恢复**:定期备份 Riak 数据,并了解如何在需要时恢复数据。 - **监控与调优**:持续监控 Riak 集群的性能,根据需要...
Riak KV提供了键/值数据存储,并具有MapReduce,轻量级数据关系和几种不同的客户端API。快速开始您必须具有或更高版本,以及GNU风格的构建系统才能编译和运行riak_kv 。 利用riak_kv的最简单方法是安装可用的完整...
5. **搜索和 MapReduce** - Riak 支持 Lucene-based全文搜索引擎和 MapReduce 功能,允许开发者执行复杂的数据查询和分析。 通过 `nodejs-riak-rating-svc`,开发者可以学习到如何将 Node.js 与 Riak 整合,构建一...
Riak Hadoop Connector是连接这两个系统的桥梁,它允许用户将Riak作为Hadoop MapReduce作业的数据源和数据目的地,从而实现数据的导入导出。这使得在大数据处理和分析场景下,可以利用Riak的强一致性特性与Hadoop的...
Riak 支持 MapReduce 查询,适用于大规模分布式环境。与 Membase 相比,Riak 在一致性模型上有所不同,提供了多版本并发控制(MVCC)来处理冲突,适合对数据一致性和最终一致性要求不同的应用场景。 NoSQL 数据库的...
Cascading是一个Java库,用于简化MapReduce应用程序的开发,它提供了一个更高级别的抽象层,使得开发者能够更容易地构建复杂的数据管道。 **3.5 Cascalog** Cascalog是一个基于Clojure编写的Cascading应用程序,它...
1. **论文1:ACM SIGOPS Operating Systems Review - "MapReduce: Simplified Data Processing on Large Clusters"** 这篇由Google发表的论文介绍了MapReduce编程模型,它是大数据处理的里程碑。MapReduce将复杂的...
Riak是一个分布式数据库,强调简单、易于管理。ZooKeeper是用于管理分布式系统的协调服务。 MapReduce是一种编程模型,用于处理大规模数据集的并行运算,常见于大数据处理框架中。Hadoop是最著名的MapReduce框架之...
Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业Key-Value - 集成了 Redis 和 Riak ,提供多个常用场景下的...
27. NoSQL数据库指的是非关系型的数据存储系统,如Cassandra、CouchDB和Riak,而不是MySQL这类关系型数据库。 28. HBase的表由行、列族、列和时间戳等元素组成,是一种列存储的NoSQL数据库。 29. MapReduce是处理大...
Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业 Key-Value - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装 Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本...
再者,分布式数据库如Cassandra、MongoDB和Riak,它们在分布式环境中提供高可扩展性和容错性。这些数据库通常采用无中心架构,允许数据在多个节点间复制,以提高读写性能和容灾能力。 负载均衡是确保系统性能和可用...
12. **MapReduce**:MapReduce是处理大规模数据的编程模型,由Google提出,现已被许多大数据工具采用,如CouchDB、MongoDB和Riak。 13. **Oozie**:Oozie是Hadoop的工作流调度系统,用于协调各种Hadoop作业和其他...
例如,HBase、CouchDB和Riak使用REST接口;HBase、CouchDB、MongoDB和Hypertable支持MapReduce;Voldemort和Scalaris采用Get/Put;HBase、Hypertable、Cassandra等通过Thrift接口。数据模型则有键值对(如Voldemort...
例如,书中会详细介绍Redis和CouchDB之间的显著差异,挖掘Riak背后的Dynamo血统,以及如何使用MapReduce解决大数据问题。读者还将学会如何利用可扩展服务如亚马逊的EC2来构建服务器集群。 此外,本书还让读者理解...