/ 中存储网

看Netflix是如何良性融合AWS和Apache Hadoop的!

2013-12-31 00:00:00 来源:中存储网

近日,Netflix大数据平台架构经理Jeff Magnusson就他们的数据平台即服务(Data Platform as a Service)做了演讲。跟随这个演讲的线索,我们试图进一步解释技术堆栈是如何存在的以及它是如何帮助Netflix处理重要的商业决策。

Netflix公司在全球拥有超过3000万用户。每个用户在访问Netflix网站时都会提供几个数据点。一系列事件如播放、对视频的搜索和评价都会被捕捉和分析。 此外,用户使用中涉及到的时间、日期、地理位置、设备和页面中的浏览或滚动行为,也将被Netflix用来提供操作事件发生的环境,并将用户划分到不同的类别中。公司使用这些数据来提高其网站的参与度并做出诸如接下来将如何分配资金。

来自第三方的或社交媒体的元数据,也有助于对平台吸引用户参与或新用户订阅。

Netflix公司自2009年以来就开始在云中运行并使用Hadoop平台,他们使用的主要基础设施大数据块有:

Amazon S3:Amazon S3技术被用来捕获各种各样的使用Ursula设备上数十亿次的事件,Ursula是一个内部数据管道工具。S3被当作运行Hadoop任务的Elastic Map Reduce(EMR)集群的可信来源。

Hadoop:Apache Hadoop被用作分布式计算基准库。Hadoop被部署在Elastic Map Reduce集群上,另外,每个节点提供的存储中并没有使用HDFS,而是利用S3桶存储。这有点奇怪因为它可能会导致数据从S3到EMR节点违反Hadoop利用的数据本地性原则,但从另一方面来说,这意味着S3可以作为单一的可信来源,而EMR集群被作为消耗品,而且几乎可以被实时调整为合适的大小。

Hive:Hive在Netflix中被用来特定的查询和轻量级的聚集。Pig则用于ETL和更复杂的数据流。其数据迁移方面的特长也被用来在复杂的操作之间进行连接。

Genie:Hadoop PaaS技术产物Genie被用来在EMR提交任务。Genie提供了一个REST-FUL API,在使用它时,开发者无需处理Hadoop集群固有的启动或维护工作。开发者可以从Genie的GitHub代码库中fork它。

Franklin:Franklin是一个元数据API,可以用来从RDS、Redshift、Cassandra、Teradata 或者 S3上提取信息。自从2011年,从基于Oracle数据中心解决方案成功迁移到AWS云后,Netflix就使用 Cassandra收集在线数据。Teradata主要用于数据中心,但这将随着Teradata宣布签约Netflix 来组建他们的Teradata Cloud而改变。

Forklift:Forklift可用于在不同的数据存储区之间传输分析数据。源和目标可以是Hive、RDBMS、S3、R等。

Sting:Sting用于将Genie任务结果用特定的方式进行视觉化处理。通过将数据集保留在内存中,Sting能够以亚秒级响应时间执行常用OLAP操作,例如交叉分析。

Lipstick:Lipstick是用来让用户在Pig工作中可视化数据流和整体工作进度。这种方式可以直观的发现已停顿的任务,错误输出的数据或失败的任务,并将这些问题快速修改以便正确执行。

除了这些工具,Netflix公司已经开发了几个辅助工具例如Curator。Curator是一组Java库,使Apache Zookeeper方便使用。构建健壮客户端对于Curator是一个轻而易举的事,你能成功避免一些不安全的客户端调用和错误的假设陷阱请求。

上述的技术堆栈的所有部分中的一个非常重要的应用程序是Netflix的Recommendation。Netflix全部视频流中,大约有75%是由Recommendation结果驱动的。其中一个系统的Recommendation建议是用Markov链把电影模型化为一个状态然后计算这些状态之间转换的可能性。在RDBMS中,这将作为一个存储过程运行,一个星期一次,不过作为一个昂贵的副本,它并不具有良好的可扩展性。而使用Hadoop,这个问题得到了本质的解决,能够进行扩展而无需复制任何数据,另外使用Pig或Java Map Reduce任务,将比作为存储的规程更易于维护。

马尔科夫链描绘了一种离散时间随机过程,它依据转移概率矩阵在一系列状态间变换。将每部电影作为一个节点建模,并使用双边Map Reduce任务,Netflix能够计算从某个节点转换到另一个的可能性,而这正是Recommendation值。未来的值仅仅依赖于当前值,这决定了它非常适合Map Reduce任务--因为无需在Hadoop节点中存储状态。

转移概率并不是Netflix的Recommendation引擎考虑的唯一参数。周围的环境也是考虑的一个有趣方面。如果他是在家里或者在休假,或是在工作环境,用户也许会根据不同的设备想访问不同内容。这是一个连Netflix公司到目前为止都没有成功地解决的问题,因为要想将使用环境与观看选项关联,还需要克服若干挑战。

无论是在其他行业,还是竞争对手,Netflix的大数据架构都不容易被轻易复制。然而一些行为模块是开源的,而且被放在其GitHub账户上供人们下载。对于任何一个愿意开发大数据架构的组织,这些可以作为起点。Netflix公司已经表明,大数据战略不是一个事后的规划,而是需要预先计划和多年的不折不扣执行的。