Hadoop云服务之战:微软vs.亚马逊

毫无疑问,Apache Hadoop软件库拥有当今最多的大数据分析思想。Gartner在2012年三月的报告中指出Hadoop作为一个流行的搜索词,在网站上的搜索量已经比2011年增加了601.8%。Hadoop逐渐普及的背后主要的驱动力在于大数据和社交计算的炒作,广泛的企业级开源软件应用,拥有Hadoop熟练技能的开发人员资源池以及Hadoop可以用预期达成的性能以低廉的商业服务器集群成本交付高可用性。后面的这个性能让企业能够将Hadoop工作负载部署到IaaS和PaaS提供商的云上,代替数据中心资本投资中的几次付费费用。

  Apache软件基金会将Hadoop描述为:

  Apache Hadoop项目是用以开发可靠、可扩展且分布式的计算的开源软件。

  Apache Hadoop软件库是一种通过使用简单的编程模型,跨计算机集群的大型数据集分布式处理框架。旨在从单一服务器扩展到成千上万的机器,每一个产品本地计算并存储。而不是依赖于硬件来交付高可用性,该软件库本身旨在检测和处理应用层的失败,从而交付计算机集群顶层的高可用性服务,每一个都可能发生故障。

  商业开源分布式软件,像红帽Enterprise Linux,属于企业级不可或缺的。Cloudera领先的商业Hadoop分布式用免费增值模式,提供了免费的Cloudera Distribution for Hadoop (CDH),但是需要对支持和Cloudera Manager应用许可证。因为其商业模式和市场支配,Cloudera成为很多“红帽Hadoop”的使用者的考虑对象。Yahoo!经典的Hadoop开发者,已经改变了野蛮,但是Cloudera却在出售其“Hadoop圣经。”因此Yahoo!于2011年六月甩掉了其Hadoop工程师团队,进入Hortonworks,Benchmark资本投资的一个新的实体,来获取Hadoop的收益,从而与Cloudera竞争。Cloudera2012年三月宣布同IBM合作,将其CDH、Cloudera Manager同本地的IBM BigInsights平台整合,并放入IBM的公有SmartCloud服务中。

  亚马逊的弹性MapReduce

  亚马逊Web服务(AWS)于2009年4月2日引入了弹性MapReduce服务(EMR),让AWS成为基于云的Hadoop服务的祖父。EMR使用按需的EC2实例集群处理存储于S3或者DynamoDB中的数据。专业的按需EMR实例陈本范围从小型的每小时0.105美元到每小时0.864美元的大型Hi-CPU实例,包括EMR额外的费用。S3和Dynamo DB存储为标准的按月付费,每GB数据传输到亚马逊数据中或者从亚马逊数据中心输出都适用。你可以按每小时付费或者你实际运行的实例付费。

  AWS在EMR开始手册中提供了代码示例和教程,介绍在Linux、UNIX以及Windows语法中,通过EMR Command Line Interface (CLI)创建Streaming Job Flow。或者你可以适用Hive和亚马逊EMR工作流创建和执行一个简单的Contextual Advertising,如图一所示,EMR Management Console,链接中的博客描述了细节。

 

  图一图解自动化弹性MapReduce和Hive工作流。你可以从CLI或者AWS管理控制台运行交互的Hive会话。

  这篇文章对比了用AWS Management Console(图二)创建Hive工作流,而不是CLI,因为微软的Apache Hadoop>

  图二,AWS Management Console下Elastic MapReduce选项创建Job Flow页面。点击Create New Job Flow按钮,可以选择Contextual Advertising示例HiveQL声明,转换ad-server impression数据到Hive表中。此外,MapReduce操作生成汇总广告效率的顺序文件。

  2012年5月31日,AWS升级EMR到最新的Hive版本(0.8.1)中。Hive能够翻译HiveQL声明到MapReduce操作中并在执行这个操作,相反本地文件中湖综合公有云数据存储(比如亚马逊 S3或者Windows Azure blobs)的Hive表中的数据也是。例如,下面示例的HiveQL声明创建了一个名为impressions的Hive表,在SerializeDeserialize (serde)格式中有七个字段,从S3中JavaScript Object Notation (JSON)格式存储的ad-server impression日志文件……/表/ impressions folder:

CREATE EXTERNAL TABLE impressions (

requestBeginTime string

adId string,

impressionId string,

referrer string,

userAgent string,

userCookie string,

ip string )

PARTITIONED BY (dt string)

ROW FORMAT

serde 'com.amazon.elasticmapreduce.JsonSerde'

with serdeproperties ( 'paths'='requestBeginTime, adId,

impressionId, referrer,

userAgent, userCookie, ip' )

LOCATION '${SAMPLE}/tables/impressions' ;

  Contextual Advertising工作流运行之前的声明,存储在S3脚本文件中,从而为后来的分析创建Hive表。第二个CREATE EXTERNAL TABLE声明生成一个点击表,从ad click日志数据和另一个impressions和clicks联合的表。如果你使用推荐的大型实例,每个实例每小时0.42美元,需要一个关键或者两个核心实例,成本是1.26美元。使用默认的小型实例,成本降到0.315美元。小型实例整个执行时间大约是20分钟。整个执行完成后,管理控制台停止运行所有实例。

  进一步的操作会生成一个功能主页表,可以用于计算一个广告的点击估价。以S3脚本的形式存储这些估价HiveQL声明,选择一个而你不是第二步中的工作流处理示例脚本,在管理控制台的S3选择项中查看作为结果生成的S3文件。

  微软的Apache Hadoop>

  图三,AhoWA网站的Metro-ized Create a New Cluster页面。制定一个唯一的DNS命名,选择一个集群大小并提供管理认证,启用Request Cluster按钮。分配一个大型集群的一个集群头和四个工作结点只需要几分钟。

  创建了集群后你可以运行九个示例Apache MapReduce中的一个,Pig、Sqoop和Mahout项目。或者你可以设置Windows Azure Marketplace Datamarket产品,Windows Azure对象容器或者亚马逊S3文件所谓数据源,放入Hive表中,具体的介绍详见链接的博客(图四)。

  图四,从亚马逊S3表格上传。Manage Cluster页面的启动S3按钮打开这个表格,需要你的AWS Access Key和Secret Key进行验证。你为S3数据源文件选定具体的URL进入到HiveQL声明中。

下面的HiveQL声明键入在文本框中的数据显示区域,创建了一个本地功能主页Hive表,以Hadoop SEQUENCEFILE的格式有四列,用于后来的查询:

CREATE EXTERNAL TABLE feature_index (

feature STRING,

ad_id STRING,

clicked_percent DOUBLE )

COMMENT 'Amazon EMR Hive Output'

STORED AS SEQUENCEFILE

LOCATION 's3n://oakleaf-emr/hive-ads/output/2012-05-29/feature_index';

  点击Evaluate按钮执行这个声明,大约四秒的时间内清空文本框并创建一个链接到数据源(见图五)。从S3数据源中选择查询下载数据。

  图五,去人HiveQL查询的执行。查看工作日志需要一个远程桌面协议(RDP)连接到Azure High Performance Cluster中。

  创建一个Hive表,增加其名称到表格列表中,命名列到列列表中,执行SELECT * FROM feature_index LIMIT ,20个查询结果显示出来,这是最先的20个结果(见图六)。

  图六,第一个20行。花了7.265秒来执行一个简单的HiveQL SELECT查询,由于互联网延迟和相对较低的DSL连接。

  AWS的Contextual Advertisin中的“Applying the Heuristic”部分建议执行下面的示例HiveQL查询对抗功能主页表“功能'us:safari' and 'ua:chrome'如何执行”:

SELECT ad_id, -sum(log(if(0.0001 > clicked_percent, 0.0001, clicked_percent))) AS value

FROM feature_index

WHERE feature = 'ua:safari' OR feature = 'ua:chrome'

GROUP BY ad_id

ORDER BY value DESC

LIMIT 100;

  根据文章:

  结果就是通过试探性的偶然点击排序广告。在这一点上,我们查阅广告,假设苹果产品的优势。

  图七展示了执行之前查询的结果,展示了最高点击率的广告:

  图七,返回的100个最高点击率的第一个15行。Hive History数据并没有显示出来,期间两个MapReduce工作已经执行。

  如果你对于集成PowerPivot和Excel,通过交互Hive控制台生产数据感兴趣,看看我的《Using Excel 2010 and the Hive ODBC Driver to Visualize Hive Data Sources in Apache Hadoop>