许多企业正在迅速采用Apache Hadoop和MapReduce,作为自己主要的数据分析工具。尽管严重缺少拥有建立Hadoop分布式文件系统集群(HDFS)或者为MapReduce任务编写Java代码所需开发运营(DevOps)技能的数据分析师,但这些企业还是在采用Apache Hadoop和MapReduce分析大数据。
亚马逊网络服务公司(AWS)确实提供托管版的弹性MapReduce(EMR),微软则推广在Windows Azure基于云实施的MapReduce、Hive、Pig和Mahout上的Apache Hadoop。尽管这些产品消除了内部部署型HDFS存储区域网(SAN)的资本和管理成本,但是把Hadoop集群转移到云端并不减少对一大批MapReduce工具的需要。
分析师们可以利用SQL的Apache HiveQL语言,把使用count()、sum()、avg()和stddev_pop()等内置函数的聚集查询转换成MapReduce任务。Apache Pig子项目的说明文档声称,当你使用Pig Latin语言时:
很容易对简单的、“易并行”的数据分析任务实现并行执行。由多个关联数据转换组成的复杂任务被显式编码成数据流序列,因而使得它们易于编写、理解和维护。
图1:使用微软Cloud Numerics Application C#模板,建立一个新的Visual Studio Cloud Numerics部署方案。
但是Pig Latin是个v0.9.2版本,这方面的专家语法学家甚至比MapReduce方面的还要少。所以,缺少开发运营技能的企业IT部门试图分析云端的“大数据”时,该如何是好?微软代号为“Cloud Numerics”的解决方案是个切实可行的办法。
面向C#编程人员的微软Cloud Numerics
微软在2012年1月发布了代号为“Cloud Numerics”Lab的解决方案,它提供了除Hadoop、HDFS、MapReduce、HiveQL或Pig Latin之外的一种选择,可用于分析大数据。Cloud Numerics为精通C#、习惯使用Visual Studio的企业级.NET编程人员提供了下列特性:
•把开发分布式算法的复杂性隐藏起来的一种编程模型
•可访问由数值算法组成的.NET库,这些数值算法涵盖基本算术、高级统计和线性代数等。
•把应用程序部署到Windows Azure,并使用云环境计算能力的功能。
利用Cloud Numerics高性能计算(HPC)集群进行并行处理需要分析师输入数据,这些数据具体表现为分布式密集数组(主要是数值数据)或矩阵。密集数组对应于所有列中都是非零值的表,而不是像稀疏数据那样列填充在一小部分的行中。
仅限受邀用户的Cloud Numerics Lab交付工件包括面向Visual Studio 2010及更高版本的一个微软Cloud Numerics Application模板(图1),它包含几个预制的C#项目,如表格1所示。
表格1:组成一个微软Cloud Numerics应用程序的六个预制项目。
默认的MSCloudNumericsApp项目随带一个基本的Main()函数,以便控制台应用程序使用一个简单的进程,在本地开发环境中测试运行。该函数对微软Numerics运行时环境初始化,创建元素数组并填入随机数,执行矩阵相乘,然后运用乔里斯基分解方法来求解线性方程,关闭微软Numerics运行时环境,返回表示完成的消息。
图2:Cloud Numerics运行时环境、库和Windows Azure部署工具之间的关系。
在大多数情况下,开发人员只需要把Main()函数中的几行默认代码换成自己的过程就行。图2表明了各Cloud Numerics组件之间的关系。
最初的Cloud Numerics Lab版本提供了下列端到端的示例应用程序(http://connect.microsoft.com/site1267/Downloads/DownloadDetails.aspx?DownloadID=40598),可从微软Microsoft Connect下载:
1. 使用潜在语义索引(Latent Sematic Indexing)的文档分类实例(LSICloudApplication)。
2. 深入视察一些统计功能(StatisticsCloudApplication)。
3. 对串行产量数据进行时间序列分析(TimeSeriesApplication)。
我之前发表了一篇配有插图的逐步教程,介绍在本地开发环境中安装和运行LSICloudApplication(http://oakleafblog.blogspot.com/2012/01/introducing-microsoft-codename-cloud.html),并将它部署到Windows Azure帐户(http://oakleafblog.blogspot.com/2012/01/deploying-cloud-numerics-sample.html)。#p#
使用Cloud Numerics分析航空公司起飞延误
航班准点率是许多消费者选择航班时参考的一个重要方面。美国联邦航空管理局(FAA)保存着自1987年以来每一家美国注册航空公司的所有航班抵达和起飞延误数据的完整记录。FAA通过研究和创新技术管理局(RITA)下设运输统计局(BTS)的网站(http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time),通过含有每个月的*.csv文件的*.zip压缩文档这一形式,向公众公布这些数据。每个*.csv文件含有大约500000行数据,它们的大小平均大约是225 MB。因此,截至2012年2月的共302个月的数据总量约为1.5亿行和68 GB。
图3:该直方图显示了2012年1月美国注册航空公司从0到5小时的航班延误。
Cloud Numerics团队宣布了一款新的示例程序,可以归纳32个月来FAA航班数据的平均延误和延误数据的标准偏差。图3所示的Excel直方图显示了2012年1月从0到5小时的航班抵达延误。
为了让开发人员轻松地使用该示例程序,Cloud Numerics团队把直到2012年1月的32个*.csv文件拷贝到了公众可以访问的Windows Azure二进制大对象容器(blob container),该容器位于微软建在美国中北部的一个数据中心。32个文件可不算少,因为每一个超大计算节点(ExtraLarge ComputeNode)实例都有8个处理器核心;而AppConfigure项目部署了4个这样的实例。
微软SQL Azure Labs社区技术预览(CTP)在预览期间提供了随意免费所用资源这一便利,但是Cloud Numerics不提供这种便利。运行有四个ComputeNode、一个HeadNode工作者角色和一个FrontEnd Web角色的OnTimeStats应用程序每小时要收费5.10美元。这样的成本使得你在不用部署的Cloud Numerics时就会删除它们。
图4:Excel工作表单,平均偏差和标准偏差数据来自FlightDataInfo.csv文件。
MSCloudNumericsApp项目的Main()方法含有的添加代码可计算平均抵达延误时间、抵达时间的标准偏差以及低于及高于1、2、3、4和5标准偏差的时间以及值,这些代码添加到存储在Windows Azure二进制大对象容器的FlightDataInfo.csv文件(见图4)。把近800万行数据读入到含有抵达延误时间(单位:分钟)的数组用时不到2分钟。使用两个超大计算实例(16个核心)来分析只需要不到2分钟的时间。
这个结果对乘客来说既是好消息又是坏消息。好消息是,你至多延误5分钟抵达的可能性是70%。不过,按照条件概率,尾部曲线的指数性质意味着如果你已经要等35分钟,那么再等35分钟的可能性是50%。#p#
比较Cloud Numerics和Windows Azure上的Apache Hive
Windows Azure上的Apache Hadoop预览版让你可以分析存储在Windows Azure二进制大对象容器的文件夹中的数据。不过,能够用专用Azure二进制大对象容器取代HDFS数据集的功能并不适用于像Cloud Numerics团队上传的这些公共二进制大对象容器。
图5:显示航空公司航班延误的Excel图表,来自Hadoop。
我消除了不必要的列,把2011年8月到2012年1月的六个*.csv文件上传到美国中北部数据中心的二进制大对象容器中的一个文件夹,从而缩减了这些文件的大小。我把这个二进制大对象文件夹指定为Hive数据仓库表格的数据源,创建了Hive表格,然后使用Hive开放数据库连接(ODBC)驱动程序和Excel插件,对它执行了简单的HiveQL聚集查询(见图5)。
Hive方法所用的时间要比Cloud Numerics示例程序所用的时间短得多,因为后者通过低速的DSL互联网连接,把HPC集群上传到Windows Azure大概需要2个小时。不过,Cloud Numerics可以更快地获取同样的数据;我估计,使用HiveQL查询来确定这个结果至少要花掉我半天的时间。不然,我需要另外花几个小时来编写和测试Pig Latin脚本。 要不是互联网连接不对称这种现状,利用Cloud Numerics获得数据的速度会大大加快。
原文链接:http://searchcloudcomputing.techtarget.com/tip/Analyzing-big-data-with-Microsoft-Cloud-Numerics