大数据、小程序、云计算、复活节兔子

By , January 27, 2013 8:49 pm

最近,我看了一份关于各个公司使用公有云服务进行大数据分析所产生的费用方面的分析报告。尽管费用方面的数据很有意思,不过我更感兴趣的是这份报告关于在大数据分析当中如何使用云计算资源方面的描述。譬如说,从这份报告第11页的内容看来,在用于大数据分析的虚拟机实例当中,89%的实例属于小型虚拟机实例。换句话说,用来进行大数据分析的程序,其代码规模是相对较小的。

毫无疑问,管理大规模数据是一件很困难的事情。当数据的规模越来越大时,实时性、完整性、私密性就越来越难以实现。别的不说,光是确认什么时候可以安全地删除一份数据就够让人头疼的。

但是,如果说大数据就是“那个答案”的话,我们需要一些小程序来提出那个问题。

由此我们引出大数据和基础设施服务(IaaS)之间的关系。我们已经积累了一些在Eucalyptus上进行大数据分析(例如Hadoop和Cassandra等等)的用户,也经常有人问我们这些用户为什么要这样做。这些技术在裸机上运行起来性能很好,在公有云环境中让它们运行在虚拟机之上通常是因为没有别的选择。那么,在一个企业自有的基础设施中,为什么系统管理员或者数据分析者会选择使用在Eucalyptus(或者其他云管理平台)之上进行大数据分析呢?

在这里我试图用小量程序来回答这个问题(也许可以总结为“小程序”)。几年前,我和一位同事在UCSB共同开设了一门关于隐写术(Steganography)课程 - 简单地说,就是怎样将一条信息藏在另外一条信息中。

很多大数据分析应用 - 例如Web分析 - 看起来与隐写术具有相同的特征。这个特征就是通过一些“解密算法”(通常是统计性质的)在大量数据中寻找隐藏的“信息”。

换句话说,大数据分析就像是用机械化工具寻找复活节彩蛋。

更重要的是,尽管数据的规模很大,并且经常随着时间发生变化,但是用来进行数据分析的程序规模相对较小,并且几乎没有什么变化。

前段时间,Netflix公司的Adrian Cockcroft (@adrianco) 到我们Eucalyptus公司来参观,并且做了一场关于NetflixOSS的讲座。Netflix所拥有的内容显然能够被纳入大数据的范畴,不过Andrian花了75分钟当中的一大半来给我们讲他们的程序。

通常来说,需要应用到大数据分析的问题,有点类似于海底捞针。作为一个缩微版的例子,我请我们公司的首席执行官Marten Mickos (@martenmickos)给我们透露一点他不愿公开披露的秘诀,然后我通过隐写术将他的秘诀隐藏在下面这张图片中。

Marten PNG

Marten在多个领域都享有卓越的声望,很多人将他的教诲奉为至宝。在这里我请他送给我们一个复活节彩蛋。

用来破译Marten这个复活节彩蛋的相关图片、程序、以及编译脚本可以从这里下载。在Linux或者OS X操作系统上,可以用下面这些命令来破译Marten的密码:

<code> tar -xzf sw.tgz ; make all ; ./extract-message</code>

这时候当前目录下会多出一个名为martens-message.png的图片文件。打开这个图片文件,就可以看到解密后的信息。

你试过了吗?当然没有。

如果你读到这里的话,我打赌你根本就没有打算去运行上面列出的几个命令。这可能是因为你实在太忙了。并且,即使是你有很强的好奇心,你也可能是在使用一台不具备计算能力的设备(智能手机或者平板电脑)或者是在Windows操作系统上看这篇文章。我已经在Linux和OS X上测试过这段程序,遗憾的是我没有本事将它移植到Windows或者是其他平台上(从这些代码可以看出,我的编程技巧实在是比较古老)。

理由一:可移植性 — 这是在基础设施服务上进行大数据分析的第一个重要理由。通常来说,大数据技术的侧重点在于大数据,而不是程序的可移植性。实现代码的平台无关性本来就比较困难,要保证不同平台上的性能(性能是大数据分析中的一个关键性要求)就更加困难了。

基础设施服务使得运行一个应用所必需的运行环境成为这个应用自身的一部分。

通常来说,应用程序的复杂度越高,其功能与性能和运行环境之间的相关度也越高。基础设施服务保证了应用程序能够运行在为其量身定做的运行环境上。

你试过了吗?当然试过。

如果你是一个比较强悍的工程师,你可能已经在Linux或者OS X上试过上面这些命令了。你成功地找到复活节彩蛋了吗?在OS X上,你需要安装Xcode才能够使用gccmake来编译这个程序。尽管这两个工具在Linux上的非常重要,但是有一些Linux发行版并没有缺省地安装它们。因此,就算是你在Linux上尝试运行上面这些命令,你也有可能没有成功。也就是说

理由二:依赖关系 - 部署大数据分析应用通常涉及到一大堆软件依赖关系。在这个例子中,我们的程序既依赖于编译环境,也依赖于运行环境(下面我们会详细解释)。基础设施服务使得用户可以通过编程管理和保障程序所具有的依赖关系。

在我们的程序中调用了一个名为libpng的开源的软件库。这个软件库是用来对PNG文件进行操作的,当前的版本是1.5.x。我敢说,libpng是一个管理得很好的开源项目,它的1.5.x版本向下兼容1.4.x版本,由此可见libpng有一个充满活力的用户社区。

不过,我这段隐写术程序是在2006年写的,当时用到的libpng的版本是1.2.50。我不知道当前最新版本的libpng是否与其兼容,或者更早版本的libpng是否与其兼容。Ubuntu 10.04 (Lucid) 里面自带的libpng12-dev似乎能够编译和运行我的程序。但是我手头有一份2006年保存下来的libpng,它和我的程序配合得很好。因此我不打算深究是否可以升级(或者如何升级)我的程序以便更好地利用这一依赖关系,或者最新版本的libpng的向后兼容性是否好到可以完美支持我的古老程序。升级七年以前写的古老程序而没有增加任何新的功能,这可不是我愿意去干的事情。由于我的懒惰,可以得出

理由三: 遗留应用 - 当程序的年龄与日俱增时,基础设施服务所带来的好处也逐渐凸现。尽管数据随时都在发生变化,但是程序的生命周期通常远大于数据的生命周期(少数特殊场景除外)。在大数据应用场景中,基础设施服务使得用户能够将数据的生命周期与程序的生命周期快速匹配起来。

必需指出,libpng是一个维护得非常好的项目。在它们的下载页面还提供了存档的1.2.50版本,也就是我七年前使用的那个版本。如果你决心要完成这个练习,你可能需要下载一份libpng的古老版本,并且修改我所提供的Makefile以便它能够在恰当的位置找到恰当版本的libpng。这时候你最好小心一点,可不要让旧版本的libpng和预装在你机器上的新版本发生冲突。

或者,你可以在桉树社区云服务上免费注册一个帐号,启动一个虚拟机实例,然后将这些程序丢到虚拟机实例里。也就是说

理由四:沙箱环境 - 基础设施服务给大数据带来的最后一个好处是为互不兼容的代码提供沙箱环境。同一份数据可能需要经由不同的程序进行分析,这些不同的程序可能要求互相冲突的依赖关系。在这个例子中,对一个老旧版本的libpng的要求可能会造成依赖关系的冲突。当程序的规模增长时,类似的版本冲突就会越来越频繁。基础设施服务允许具有不同依赖关系的程序和平共处,能够对同一份数据进行处理。

总结

有些时候人们认为大数据和类似于基础设施服务的云计算是相互联系的,有些时候却又认为它们是互不相关的。我个人的观点是基础设施服务通过程序控制为软件工程以及运行环境所提供的支持会使得大数据相关的技术和应用越来越普及。大数据会是那个答案,但是我们都需要一些小代码来提出问题。毕竟,只有复活节兔子才知道彩蛋到底藏在哪里。

译者注:作者Rich Wolski是Eucalyptus的联合创始人与首席技术官,也是UCSB计算机系的著名教授。他在大数据和云计算方面有丰富的研究,其观点总是令人耳目一新。译者在OS X 10.8.2和Ubuntu 12.04.1上都编译运行过Rich所提供的程序。在OS X上让这个程序跑起来的确需要经过一些周折,但是在Ubuntu上几乎不需要做任何额外的工作,可以认为这是这个例子的一个不足之处。

原文链接:

http://www.eucalyptus.com/blog/2013/01/23/big-data-and-little-code-or-why-iaas-easter-bunny

2 Responses to “大数据、小程序、云计算、复活节兔子”

  1. 卫衣套装 says:

    来过。。。。。。。。。

  2. Roger Dong says:

    John,

    你的电话号码换了?我在三亚过春节。一直想去看你的农庄,不知远不运。

Leave a Reply

Panorama Theme by Themocracy