Voldemort应用

标签: 数据库 | 发表时间:2013-10-08 17:16 | 作者:bicloud
出处:http://blog.sina.com.cn/bicloud

    互联网数据应用产品涉及到到大数据存储,譬如推荐系统,精准营销,个性化搜索这样的产品,后台离线计算的海量数据需要展示给用户。在电子商务应用中,譬如将User作为key,给用户挖掘的结果作为value;或者以商品id作为key,商品挖掘的知识作为value,这些数据可以通过KV存储,从而满足实际需求。个人根据阅读一些工业界papers,阅读一些企业的kv存储代码发现,很多公司实现的kv存储,借鉴了Voldemort的实现。Voldemort是linkedin公司实现的开源kv存储,理论基于amazon的dynamo。

1 理论

参考:Dynamo: Amazon’s Highly Available Key-value Store

Dynamo综合了一些著名的技术来实现可伸缩性和可用性:数据划分(data partitioned)和使用一致性哈希的复制(replicated),并通过对象版本(object versioning)提供一致性。在更新时,副本之间的一致性是由仲裁般(quorum-like)的技术和去中心化的副本同步协议来维持的。Dynamo采用了基于gossip的分布式故障检测及成员(membership)协议。Dynamo是一个只需要很少的人工管理,去中心化的系统。存储节点可以添加和删除,而不需要任何手动划分

或重新分配(redistribution)。

Voldemort


2 实验

2.1 Windows下安装voldemort,配置文件

Cluster.xml

 


Store.xml

 

 


2.2 启动单节点 cluster

 

bin\voldemort-server.bat config\single_node_cluster


2.3 客户端操作

 

bin\voldemort-shell.bat test tcp://localhost:6666


2.4 基于python的客户端操作

from voldemort import StoreClient, VoldemortException

s = StoreClient('test', [('localhost', 6666)])

value = s.get('hello')

 

print value


from voldemort import StoreClient, VoldemortException

s = StoreClient('test', [('localhost', 6666)])

value = s.get('b')

print value

 

3  hadoop离线批处理计算,数据存储到voldemort

3.1准备输入数据,将数据组织成kv

3.2 实现hadoop mapper

public class HadoopStoreMapper extends AbstractHadoopStoreBuilderMapper@Override

public Object makeKey(LongWritable key, Text value) {

return value.toString().split("\t")[0];

}

@Override

public Object makeValue(LongWritable key, Text value) {

return Integer.parseInt(value.toString().split("\t")[1]);

}

}

3.3 构建只读存储

 

HadoopStoreBuilder

 

从输入数据,创建hadoop Job,构建只读voldemort存储


$VOLDEMORT_HOME/bin/hadoop-build-readonly-store.sh --input \

--output wordcounts --tmpdir tmp-build --mapper com.lookery.HadoopStoreMapper \

--jar lib/wordcount-mapper.jar --cluster config/cluster.xml \

--storename wordcounts --storedefinitions config/stores.xml \

--chunksize 1073741824 --replication 2







  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [voldemort 应用] 推荐:

Voldemort应用

- - 冰火岛
    互联网数据应用产品涉及到到大数据存储,譬如推荐系统,精准营销,个性化搜索这样的产品,后台离线计算的海量数据需要展示给用户. 在电子商务应用中,譬如将User作为key,给用户挖掘的结果作为value;或者以商品id作为key,商品挖掘的知识作为value,这些数据可以通过KV存储,从而满足实际需求.

GetEd2k (Android应用)

- 某牢 - eMule Fans 电骡爱好者
GetEd2k是一个Android应用程序,作者是anacletus. 此应用可以帮助你把网页中的电驴(eDonkey) 链接添加到你个人电脑的电驴客户端里,不过前提是你的客户端开启了用于远程控制的Web interface(Web服务器,网页接口,Web界面),当然,eMule(电骡), MLDonkey 和 aMule 都支持该功能,所以这三种主流电驴客户端的用户都可以使用GetEd2k.

fixed应用

- - ITeye博客
今天在逛人人网时,发现人人网首页左侧的“应用动态”,随着我页面向下滚动,一直固定在网站的左侧. 但这效果存在一点瑕疵,在拖动过程中存在一点抖动(ie下),不是非常平滑. 我尝试使用jquey实现了该效果,也解决了抖动的问题. 创建一个ID为sideBar的div,将它的position设置为absolute.

httpclient4的应用

- - 编程语言 - ITeye博客
httpclient一个实现了HTTP协议的客户端编程工具包. 一个使用的背景:登录需要验证,需要压力测试一下,用webdriver等工具搞不定. 就用到了他,有ocr开源的工具,结合httpclient完美的处理了. 网上的例子主要是3的版本,这里主要是总结一下4的版本. 本身带的例子也不错:下载地址,api的参考.

Solr SpellCheck 应用

- - 开源软件 - ITeye博客
通过对各类型的SpellCheck组件学习,完成项目拼写检查功能. 本文使用基于拼写词典的实现方式,solr版本为5.3.0. SpellCheck 简述. 拼写检查是对用户错误输入,响应正确的检查建议. 比如输入:周杰轮,响应:你是不是想找 周杰伦. Solr的拼写检查大致可分为两类,基于词典与基于Solr索引.

当应用不仅仅是应用

- HACK21 - 爱范儿 · Beats of Bits
(Ankit Gupta 和 Akshay Kothari 是 Pulse 的创始人,他们的应用在 iOS/Android 平台获得极高的下载量,曾获得乔布斯的赞赏. 他们的公司 Alphonso Labs 获得了 100 万风投和天使投资). by  ankit gupta from posterous blog |  积木 译,转载请注明 ifanr 译文链接.

JMS - JMS​应​用​领​域 应用场景

- - 企业架构 - ITeye博客
Java的JMS消息类型有文本类型,对象类型,字节类型,流类型,XML类型,实际项目中,用的最多的是文本类型,对象类型和xml类型的消息.建议最好不用对象类型,因为如果用对象类型的话,调试的时候是很麻烦的,. 首先你必须要写专门的测试代码用来发送消息,. 第二,必须要管理对象所属的类的不同版本,. 第三,不方便查看queue或者topic中的消息内容..

Java应用运维

- - BlueDavy之技术blog
对于互联网产品或长期运行的产品而言,运维工作非常重要,尤其是在产品复杂了以后,在这篇blog中就来说下Java应用的运维工作(ps:虽然看起来各种语言做的系统的运维工作都差不多,但细节上还是会有很多不同,so本文还是只讲Java的). 苦逼的码农按照需求开发好了一个全新的Java Web应用,该发布上线给用户用了,要把一个Java Web应用发布上线,首先需要搭建运行的环境,运行的环境需要有JDK、APPServer,在已经装好了os的机器上装上JDK和APPServer,开发好的Java Web应用可以用maven直接打成war或ear,将这个打好的包scp或其他方式到目标机器上,准备妥当,就差启动了.

Redis应用场景

- - CSDN博客架构设计推荐文章
Redis最为常用的数据类型主要有以下:. 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:.          首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.