技术开发 频道

Hadoop应用案例分析:在Yahoo的应用

  【IT168 案例】关于Hadoop技术的研究和应用,Yahoo!始终处于领先地位,它将Hadoop应用于自己的各种产品中,包括数据分析、内容优化、反垃圾邮件系统、广告的优化选择、大数据处理和ETL等;同样,在用户兴趣预测、搜索排名、广告定位等方面得到了充分的应用。

  在Yahoo!主页个性化方面,实时服务系统通过Apache从数据库中读取user到interest的映射,并且每隔5分钟生产环境中的Hadoop集群就会基于最新数据重新排列内容,每隔7分钟则在页面上更新内容。

  在邮箱方面,Yahoo!利用Hadoop集群根据垃圾邮件模式为邮件计分,并且每隔几个小时就在集群上改进反垃圾邮件模型,集群系统每天还可以推动50亿次的邮件投递。

  目前Hadoop最大的生产应用是Yahoo!的Search Webmap应用,它运行在超过10 000台机器的Linux系统集群里,Yahoo!的网页搜索查询使用的就是它产生的数据。Webmap的构建步骤如下:首先进行网页的爬取,同时产生包含所有已知网页和互联网站点的数据库,以及一个关于所有页面及站点的海量数据组;然后将这些数据传输给Yahoo!搜索中心执行排序算法。在整个过程中,索引中页面间的链接数量将会达到1TB,经过压缩的数据产出量会达到300TB,运行一个MapReduce任务就需使用超过10 000的内核,而在生产环境中使用数据的存储量超过5PB。

  Yahoo!在Hadoop中同时使用了Hive和Pig,在许多人看来,Hive和Pig大体上相似而且Pig Latin与SQL也十分相似。那么Yahoo!为什么要同时使用这些技术呢?主要是因为Yahoo!的研究人员在查看了它们的工作负载并分析了应用案例后认为不同的情况下需要使用不同的工具。

  先了解一下大规模数据的使用和处理背景。大规模的数据处理经常分为三个不同的任务:数据收集、数据准备和数据表示,这里并不打算介绍数据收集阶段,因为Pig和Hive主要用于数据准备和数据表示阶段。

  数据准备阶段通常被认为是提取、转换和加载(Extract Transform Load,ETL)数据的阶段,或者认为这个阶段是数据工厂。这里的数据工厂只是一个类比,在现实生活中的工厂接收原材料后会生产出客户所需的产品,而数据工厂与之相似,它在接收原始数据后,可以输出供客户使用的数据集。这个阶段需要装载和清洗原始数据,并让它遵守特定的数据模型,还要尽可能地让它与其他数据源结合等。这一阶段的客户一般都是程序员、数据专家或研究者。

  数据表示阶段一般指的都是数据仓库,数据仓库存储了客户所需要的产品,客户会根据需要选取合适的产品。这一阶段的客户可能是系统的数据工程师、分析师或决策者。

  根据每个阶段负载和用户情况的不同,Yahoo!在不同的阶段使用不同的工具。结合了诸如Oozie等工作流系统的Pig特别适合于数据工厂,而Hive则适合于数据仓库。下面将分别介绍数据工厂和数据仓库。

  Yahoo!的数据工厂存在三种不同的工作用途:流水线、迭代处理和科学研究。

  经典的数据流水线包括数据反馈、清洗和转换。一个常见例子是Yahoo!的网络服务器日志,这些日志需要进行清洗以去除不必要的信息,数据转换则是要找到点击之后所转到的页面。Pig 是分析大规模数据集的平台,它建立在Hadoop之上并提供了良好的编程环境、优化条件和可扩展的性能。Pig Latin是关系型数据流语言,并且是Pig核心的一部分,基于以下的原因,Pig Latin相比于SQL而言,更适合构建数据流。首先,Pig Latin是面向过程的,并且Pig Latin允许流水线开发者自定义流水线中检查点的位置;其次,Pig Latin允许开发者直接选择特定的操作实现方式而不是依赖于优化器;最后,Pig Latin支持流水线的分支,并且Pig Latin允许流水线开发者在数据流水线的任何地方插入自己的代码。Pig和诸如Oozie等的工作流工具一起使用来创建流水线,一天可以运行数以万计的Pig作业。

  迭代处理也是需要Pig的,在这种情况下通常需要维护一个大规模的数据集。数据集上的典型处理包括加入一小片数据后就会改变大规模数据集的状态。如考虑这样一个数据集,它存储了Yahoo!新闻中现有的所有新闻。我们可以把它想象成一幅巨大的图,每个新闻就是一个节点,新闻节点若有边相连则说明这些新闻指的是同一个事件。每隔几分钟就会有新的新闻加入进来,这些工具需要将这些新闻节点加到图中,并找到相似的新闻节点用边连接起来,还要删除被新节点覆盖的旧节点。这和标准流水线不同的是它不断有小变化,这就需要使用增长处理模型在合理的时间范围内处理这些数据了。例如,所有的新节点加入图中后,又有一批新的新闻节点到达,在整个图上重新执行连接操作是不现实的,这也许会花费数个小时。相反,在新增加的节点上执行连接操作并使用全连接(full join)的结果是可行的,而且这个过程只需要花费几分钟时间。标准的数据库操作可以使用Pig Latin通过上述方式实现,这时Pig就会得到很好的应用。

  Yahoo!有许多的科研人员,他们需要用网格工具处理千万亿大小的数据,还有许多研究人员希望快速地写出脚本来测试自己的理论或获得更深的理解。但是在数据工厂中,数据不是以一种友好的、标准的方式呈现的,这时Pig就可以大显身手了,因为它可以处理未知模式的数据,还有半结构化和非结构化的数据。Pig与streaming相结合使得研究者在小规模数据集上测试的Perl和Python脚本可以很方便地在大规模数据集上运行。

  在数据仓库处理阶段,有两个主要的应用:商业智能分析和特定查询(Ad-hoc query)。在第一种情况下,用户将数据连接到商业智能(BI)工具(如MicroStrategy)上来产生报告或深入的分析。在第二种情况下,用户执行数据分析师或决策者的特定查询。这两种情况下,关系模型和SQL都很好用。事实上,数据仓库已经成为SQL使用的核心,它支持多种查询并具有分析师所需的工具,Hive作为Hadoop的子项目为其提供了SQL接口和关系模型,现在Hive团队正开始将Hive与BI工具通过接口(如ODBC)结合起来使用。

  Pig在Yahoo!得到了广泛应用,这使得数据工厂的数据被移植到Hadoop上运行成为可能。随着Hive的深入使用,Yahoo!打算将数据仓库移植到Hadoop上。在同一系统上部署数据工厂和数据仓库将会降低数据加载到仓库的时间,这也使得共享工厂和仓库之间的数据、管理工具、硬件等成为可能。Yahoo!在Hadoop上同时使用多种工具使Hadoop能够执行更多的数据处理。

  作者简介:陆嘉恒,《Hadoop实战》作者,中国人民大学副教授,新加坡国立大学博士,美国加利福尼亚大学尔湾分校(University of California, Irvine) 博士后。

1
相关文章