注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Koala++'s blog

计算广告学 RTB

 
 
 

日志

 
 

计算广告学-合约广告系统-常用广告系统开源工具  

2013-01-30 00:10:36|  分类: 计算广告学 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

合约广告系统

原作者:刘鹏 @北冥乘海生

编辑:Koala++/屈伟

视频课程:师徒网

常用广告系统开源工具

常用广告系统开源工具

       是否可以用开源工具快速地搭建广告系统?可以肯定的说,基本是可以的。很多重要的模块,如上章所讲的architecture里的模块很多都可以借助开源工具实现。

计算广告学-合约广告系统-常用广告系统开源工具 - quweiprotoss - Koala++s blog

 

       在实际的广告系统中我们会用到很多的开源工具。下面我将分别讲述几个开源开具。基本上所有的大的广告系统公司都要使用Hadoop平台,除了googleHadoop是广告平台中建模的基础,Hadoop有很多子项目,有的子项目与Hadoop有密切的联系,有的子项目仅是在Hadoop框架体系下深挖出来的一些Idea。简单介绍一下,Hadoop现在核心的项目只剩下来两个,HDFSMapReduce,以前Hadoop有很多子项目,中间两列以前都是Hadoop的子项目,但很多现在都已经独立出来,成为顶级项目了。Hadoop本身是一个大数据的存储和计算的平台。

图中的工具可以分为两类,一类是离线的数据处理,另一类是在线的数据处理。离线的数据处理,常用的是HBase,它是基于Hadoop的列存储数据库,并不是关系型数据库,是NoSql型数据库。和HBase功能相似的数据库有很多,比如googleBigTable,和HBase对应的HyperTableHyperTablec语言写的工具,效率比HBase高一些,还有Facebook开源的Cassandra。它们都是解决大数据上半结构化存储的问题,在实际的系统中都可能会用到。

       oozie是把Hadoop上的流程控制工具,比如我们每天的日志处理,要等日志收到后,进行各种分析,比如有的进行CTR预测,有的进行Audience Targeting,有的交由BI系统,它们这些分析之间可能有一些依赖关系。Hadoop提供了一个管理这些依赖的工具就是oozieoozie可以认为是比较底层的,可以用API开发的一个framework,我个人感觉是很不好用,也没看到有多少用人这个工具,但它在设计上比较完善。

Hadoop上有两个很重要的脚本语言,PigHive。它们的作用有些相似,功能都是希望将Hadoop上的非结构化的数据,可以用sql语言的方式来访问和加工。这样在拉一些简单的数据报表时,就不用写MapReduce程序去得到数据,只用写pighive的脚本。PigHive的区别是:如果你的数据是用分隔符分好的数据,你就可以写Pig脚本直接访问了,所以用起来比较直接方便。而Hive需要预先加工,建立类似于Index的数据才可以操作。所以Pig更接近于程序员的习惯,Hive更适合做BI的习惯。

Mahout是一个在Hadoop上用Map/Reduce做数据挖掘,机器学习的工具,我个人感觉除了几个算法外,其它的算法并不太好用。但这也是机器学习算法的本质决定的,机器学习算法需要根据数据和实际情况做调整,加工,所以如果不了解内部实现,调整模型比较麻烦。

在线部分,最常用的是ZooKeeperZooKeeper是分布式环境下解决一致性问题的开源解决方案,它对应的是更有名的GoogleChubbyZooKeeperChubby的理论基础不完全一致。Chubby是严格按照Paxos算法来实现的,PaxosLamport是提出的解决分布式环境下的一致性问题的一个完备的算法,而ZooKeeper是这个算法的简化版,它把Paxos简化成两段式提交后实现的一个版本,无法在理论上证明它是正确的,但实践中没有问题,这个是我们在做在线服务中经常要用到的一个工具。

Avro知道的人可能并不多,因为并不常用它,常用的是FacebookThrift,它解决的是分布式环境里的跨语言通信的问题,非常好用,而Avro仅是Hadoop的作者实现的一个代替产品,GoogleProtoBuffer也是类似的工具。

S4类比于更常用的TwitterStorm,是我们上章Architecture里的流式计算平台,进行日志快速处理反馈的一个计算平台。S4是最早Yahoo!用于搜索广告系统分析目的而开发的,Storm是为了满足Twitter上一些快速的计算任务,比如快速计算Fans数,Repost数。两种有一定不同,S4主要优化的是吞吐量,它完全不用磁盘,而Storm还要用到少量的磁盘操作,因为它要保证数据的一致性,保证每一条数据至少被处理一次,但它不保证仅被处理一次。

Chuhwa对应的是FacebookScribe,它是上章Architecture里提到的Data Highway,它是分布式的日志收集工具,一个广告系统有很多的广告投放引擎,这些投放引擎,Data Highway准实时地把多个服务器的日志准实时地都收集到一起,准实时地投到Hadoop或是Storm上,现在还有一个常用的是Flume

Elephant-Bird是一个有意思的小工具,它是配合Pig使用的,如果我们的系统中大量使用Thrift或是ProtoBuffer,它的结构都是序列化的,二进制的,你用Pig无法直接访问,Twitter为了解决这个问题提供了Elephant-Bird工具,使用Elephant-Bird后,Pig就可以直接访问序列化的数据了。

图中有阴影的表示是我个人感觉好用的工具,但仅代表我个人观点。在这里我也想介绍一点我个人对开源社区的一些看法,现在开源社区已经和若干年前已经完全不同,现在不再是一个质量不能保证,内容比较芜杂的环境了。原因是有很多大公司在不遗余力地在支持开源项目,比较典型的是TwitterYahoo!Facebook。我们认为开源工具可选的原因是这些工具是在TwitterFacebook这种数据量上进行验证的,而其它公司很难有真实的环境去测试这种大规模数据的,比如Facebook在测试Scribe的时候,数据达到过每秒10T,所以开源工具的质量和可靠性非常高。

跨语言服务搭建工具

       在搭建一个广告系统的时候,遇到的第一个问题可能就是多模块的语言不统一,Facebook在这方面是比较开放的,它提供了一个工具Thrift,它允许工程师各自喜欢或是习惯的语言去开发,Thift就是一个跨语言服务快速搭建的工具。它的使用方法非常简单,第一步是用struct定义语言无关的通信数据结构,用IDL语言描述,比如下面的KV,它有两个字段一个是32int类型的key,一个是string类型的valueThrift会将IDL语言的定义转为你所需要的语言(比如c语言)的定义。

struct KV

{

1:optional i32 key=10;

2:optional string value=“x”

}

搭建服务也是在IDL文件里写,比如KVCache是存KV pair的一个服务,它有几个接口,setgetdelete,这些定义都是语言无关的,你根据定义实现自己的逻辑。

service KVCache

{

void set(1:i32 key, 2:string value);

    string get(1:32 key); void delete(1:i32 key);

}

如果不是进行特殊的协议层优化,Thrift就可以满足需求了。并且它能实现结构和接口的向后兼容(backward compatible),类型的工具有HadoopAvrogoogleProtoBuffer

  评论这张
 
阅读(2585)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017