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

2019-03-28 13:19|来源: 网络

毫无疑问,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,链接中的博客描述了细节。

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

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

这篇文章对比了用AWS Management Console(图二)创建Hive工作流,而不是CLI,因为微软的Apache Hadoop on Windows Azure (AHoWA)服务包括了交互式Hive控制台,性能类似。Apache基金会将Hive描述为:

Hive是一个Hadoop的数据仓库系统,促进简化数据摘要、临时查询和存储在Hadoop兼容文件系统中的大型数据集的分析。Hive提供了数据之上项目结构以及使用类SQL语言HiveQL查询数据的一种机制。同时,HiveQL中不方便或者表达不清这个逻辑时,该语言可以让传统的map/reduce程序员插入其自定义的mappers和reducers。

 

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

图二,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文件。

相关问答

更多

使用动态字段组管理表单(manage forms with Dynamic Fields Group)

您可以在输入名称后使用索引。 这项工作将在服务器端为$_POST['input']和$_POST['select']提供一个数组: <form method='post' action='sth.php'> <!-- group fileds 1 --> <input type="text" name="input[0]"> <select name="select[0]"></select/> <!-- group fileds 2 --> <input type="text" name=

自己附加两个ng-repeat(attach two ng-repeat themselves)

有两种方法可以做到这一点。 首先是服务器端:有一个请求返回正确的数据集。 我将专注于客户端,因为它是客户端问题。 我建议你创建一个包含用户和值的列表: var tabuser = JSON.parse(localStorage.getItem("myid")); console.log(tabuser); var urls = []; $scope.data = []; for(i = 0; i < tabuser.length; i++){

Composer - 将供应商文件从开发复制到生产是可以的吗?(Composer - copy vendor files from dev to production is OK?)

考虑到为自动加载等生成的所有路径都是相对的,将整个项目移动到另一条路径甚至不同的计算机应该可以正常工作。 Moving the whole project around to another path or even different computer should work fine, given that all paths generated for autoloading etc are relative.

将完成的构建发布给另一个Jenkins(Publish finished build to another Jenkins)

Build Publisher插件读取: [...] 然后将结果发送给面向外界的另一个Jenkins。 来自私人Jenkins的构建记录通过HTTP发送给公共Jenkins。 我将此解释为发布的结果只是为了在公共服务器上查看。 就像书籍出版商一样:他或她不会写书或延续书籍。 他或她只是发表他们阅读。 请参阅从jenkins外部调用jenkins构建? 如何从远程触发Jenkins服务器上的构建,即从您的公共 私有触发器。 The Build Publisher Plugin reads: [..

如何设置登录?(How to setup login? Forms Authentication)

if (Request.IsAuthenticated) { // Lets us know if the Request is authenticated } 一个简单的答案:“最后,我唯一真正的目标是在用户登录的页面之间进行简单的通信。” 我建议在web.config中阅读有关表单身份验证的配置选项,以及研究formsauthentication票证的内部工作方式。 MVC还具有您可以使用的授权属性。 http://msdn.micr