借助微軟Cloud Numerics分析“大數(shù)據(jù)”
譯文許多企業(yè)正在迅速采用Apache Hadoop和MapReduce,作為自己主要的數(shù)據(jù)分析工具。盡管嚴(yán)重缺少擁有建立Hadoop分布式文件系統(tǒng)集群(HDFS)或者為MapReduce任務(wù)編寫Java代碼所需開發(fā)運(yùn)營(yíng)(DevOps)技能的數(shù)據(jù)分析師,但這些企業(yè)還是在采用Apache Hadoop和MapReduce分析大數(shù)據(jù)。
亞馬遜網(wǎng)絡(luò)服務(wù)公司(AWS)確實(shí)提供托管版的彈性MapReduce(EMR),微軟則推廣在Windows Azure基于云實(shí)施的MapReduce、Hive、Pig和Mahout上的Apache Hadoop。盡管這些產(chǎn)品消除了內(nèi)部部署型HDFS存儲(chǔ)區(qū)域網(wǎng)(SAN)的資本和管理成本,但是把Hadoop集群轉(zhuǎn)移到云端并不減少對(duì)一大批MapReduce工具的需要。
分析師們可以利用SQL的Apache HiveQL語(yǔ)言,把使用count()、sum()、avg()和stddev_pop()等內(nèi)置函數(shù)的聚集查詢轉(zhuǎn)換成MapReduce任務(wù)。Apache Pig子項(xiàng)目的說(shuō)明文檔聲稱,當(dāng)你使用Pig Latin語(yǔ)言時(shí):
很容易對(duì)簡(jiǎn)單的、“易并行”的數(shù)據(jù)分析任務(wù)實(shí)現(xiàn)并行執(zhí)行。由多個(gè)關(guān)聯(lián)數(shù)據(jù)轉(zhuǎn)換組成的復(fù)雜任務(wù)被顯式編碼成數(shù)據(jù)流序列,因而使得它們易于編寫、理解和維護(hù)。
圖1:使用微軟Cloud Numerics Application C#模板,建立一個(gè)新的Visual Studio Cloud Numerics部署方案。
但是Pig Latin是個(gè)v0.9.2版本,這方面的專家語(yǔ)法學(xué)家甚至比MapReduce方面的還要少。所以,缺少開發(fā)運(yùn)營(yíng)技能的企業(yè)IT部門試圖分析云端的“大數(shù)據(jù)”時(shí),該如何是好?微軟代號(hào)為“Cloud Numerics”的解決方案是個(gè)切實(shí)可行的辦法。
面向C#編程人員的微軟Cloud Numerics
微軟在2012年1月發(fā)布了代號(hào)為“Cloud Numerics”Lab的解決方案,它提供了除Hadoop、HDFS、MapReduce、HiveQL或Pig Latin之外的一種選擇,可用于分析大數(shù)據(jù)。Cloud Numerics為精通C#、習(xí)慣使用Visual Studio的企業(yè)級(jí).NET編程人員提供了下列特性:
•把開發(fā)分布式算法的復(fù)雜性隱藏起來(lái)的一種編程模型
•可訪問(wèn)由數(shù)值算法組成的.NET庫(kù),這些數(shù)值算法涵蓋基本算術(shù)、高級(jí)統(tǒng)計(jì)和線性代數(shù)等。
•把應(yīng)用程序部署到Windows Azure,并使用云環(huán)境計(jì)算能力的功能。
利用Cloud Numerics高性能計(jì)算(HPC)集群進(jìn)行并行處理需要分析師輸入數(shù)據(jù),這些數(shù)據(jù)具體表現(xiàn)為分布式密集數(shù)組(主要是數(shù)值數(shù)據(jù))或矩陣。密集數(shù)組對(duì)應(yīng)于所有列中都是非零值的表,而不是像稀疏數(shù)據(jù)那樣列填充在一小部分的行中。
僅限受邀用戶的Cloud Numerics Lab交付工件包括面向Visual Studio 2010及更高版本的一個(gè)微軟Cloud Numerics Application模板(圖1),它包含幾個(gè)預(yù)制的C#項(xiàng)目,如表格1所示。
表格1:組成一個(gè)微軟Cloud Numerics應(yīng)用程序的六個(gè)預(yù)制項(xiàng)目。
默認(rèn)的MSCloudNumericsApp項(xiàng)目隨帶一個(gè)基本的Main()函數(shù),以便控制臺(tái)應(yīng)用程序使用一個(gè)簡(jiǎn)單的進(jìn)程,在本地開發(fā)環(huán)境中測(cè)試運(yùn)行。該函數(shù)對(duì)微軟Numerics運(yùn)行時(shí)環(huán)境初始化,創(chuàng)建元素?cái)?shù)組并填入隨機(jī)數(shù),執(zhí)行矩陣相乘,然后運(yùn)用喬里斯基分解方法來(lái)求解線性方程,關(guān)閉微軟Numerics運(yùn)行時(shí)環(huán)境,返回表示完成的消息。
圖2:Cloud Numerics運(yùn)行時(shí)環(huán)境、庫(kù)和Windows Azure部署工具之間的關(guān)系。
在大多數(shù)情況下,開發(fā)人員只需要把Main()函數(shù)中的幾行默認(rèn)代碼換成自己的過(guò)程就行。圖2表明了各Cloud Numerics組件之間的關(guān)系。
最初的Cloud Numerics Lab版本提供了下列端到端的示例應(yīng)用程序(http://connect.microsoft.com/site1267/Downloads/DownloadDetails.aspx?DownloadID=40598),可從微軟Microsoft Connect下載:
1. 使用潛在語(yǔ)義索引(Latent Sematic Indexing)的文檔分類實(shí)例(LSICloudApplication)。
2. 深入視察一些統(tǒng)計(jì)功能(StatisticsCloudApplication)。
3. 對(duì)串行產(chǎn)量數(shù)據(jù)進(jìn)行時(shí)間序列分析(TimeSeriesApplication)。
我之前發(fā)表了一篇配有插圖的逐步教程,介紹在本地開發(fā)環(huán)境中安裝和運(yùn)行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分析航空公司起飛延誤
航班準(zhǔn)點(diǎn)率是許多消費(fèi)者選擇航班時(shí)參考的一個(gè)重要方面。美國(guó)聯(lián)邦航空管理局(FAA)保存著自1987年以來(lái)每一家美國(guó)注冊(cè)航空公司的所有航班抵達(dá)和起飛延誤數(shù)據(jù)的完整記錄。FAA通過(guò)研究和創(chuàng)新技術(shù)管理局(RITA)下設(shè)運(yùn)輸統(tǒng)計(jì)局(BTS)的網(wǎng)站(http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time),通過(guò)含有每個(gè)月的*.csv文件的*.zip壓縮文檔這一形式,向公眾公布這些數(shù)據(jù)。每個(gè)*.csv文件含有大約500000行數(shù)據(jù),它們的大小平均大約是225 MB。因此,截至2012年2月的共302個(gè)月的數(shù)據(jù)總量約為1.5億行和68 GB。
圖3:該直方圖顯示了2012年1月美國(guó)注冊(cè)航空公司從0到5小時(shí)的航班延誤。
Cloud Numerics團(tuán)隊(duì)宣布了一款新的示例程序,可以歸納32個(gè)月來(lái)FAA航班數(shù)據(jù)的平均延誤和延誤數(shù)據(jù)的標(biāo)準(zhǔn)偏差。圖3所示的Excel直方圖顯示了2012年1月從0到5小時(shí)的航班抵達(dá)延誤。
為了讓開發(fā)人員輕松地使用該示例程序,Cloud Numerics團(tuán)隊(duì)把直到2012年1月的32個(gè)*.csv文件拷貝到了公眾可以訪問(wèn)的Windows Azure二進(jìn)制大對(duì)象容器(blob container),該容器位于微軟建在美國(guó)中北部的一個(gè)數(shù)據(jù)中心。32個(gè)文件可不算少,因?yàn)槊恳粋€(gè)超大計(jì)算節(jié)點(diǎn)(ExtraLarge ComputeNode)實(shí)例都有8個(gè)處理器核心;而AppConfigure項(xiàng)目部署了4個(gè)這樣的實(shí)例。
微軟SQL Azure Labs社區(qū)技術(shù)預(yù)覽(CTP)在預(yù)覽期間提供了隨意免費(fèi)所用資源這一便利,但是Cloud Numerics不提供這種便利。運(yùn)行有四個(gè)ComputeNode、一個(gè)HeadNode工作者角色和一個(gè)FrontEnd Web角色的OnTimeStats應(yīng)用程序每小時(shí)要收費(fèi)5.10美元。這樣的成本使得你在不用部署的Cloud Numerics時(shí)就會(huì)刪除它們。
圖4:Excel工作表單,平均偏差和標(biāo)準(zhǔn)偏差數(shù)據(jù)來(lái)自FlightDataInfo.csv文件。
MSCloudNumericsApp項(xiàng)目的Main()方法含有的添加代碼可計(jì)算平均抵達(dá)延誤時(shí)間、抵達(dá)時(shí)間的標(biāo)準(zhǔn)偏差以及低于及高于1、2、3、4和5標(biāo)準(zhǔn)偏差的時(shí)間以及值,這些代碼添加到存儲(chǔ)在Windows Azure二進(jìn)制大對(duì)象容器的FlightDataInfo.csv文件(見圖4)。把近800萬(wàn)行數(shù)據(jù)讀入到含有抵達(dá)延誤時(shí)間(單位:分鐘)的數(shù)組用時(shí)不到2分鐘。使用兩個(gè)超大計(jì)算實(shí)例(16個(gè)核心)來(lái)分析只需要不到2分鐘的時(shí)間。
這個(gè)結(jié)果對(duì)乘客來(lái)說(shuō)既是好消息又是壞消息。好消息是,你至多延誤5分鐘抵達(dá)的可能性是70%。不過(guò),按照條件概率,尾部曲線的指數(shù)性質(zhì)意味著如果你已經(jīng)要等35分鐘,那么再等35分鐘的可能性是50%。#p#
比較Cloud Numerics和Windows Azure上的Apache Hive
Windows Azure上的Apache Hadoop預(yù)覽版讓你可以分析存儲(chǔ)在Windows Azure二進(jìn)制大對(duì)象容器的文件夾中的數(shù)據(jù)。不過(guò),能夠用專用Azure二進(jìn)制大對(duì)象容器取代HDFS數(shù)據(jù)集的功能并不適用于像Cloud Numerics團(tuán)隊(duì)上傳的這些公共二進(jìn)制大對(duì)象容器。
圖5:顯示航空公司航班延誤的Excel圖表,來(lái)自Hadoop。
我消除了不必要的列,把2011年8月到2012年1月的六個(gè)*.csv文件上傳到美國(guó)中北部數(shù)據(jù)中心的二進(jìn)制大對(duì)象容器中的一個(gè)文件夾,從而縮減了這些文件的大小。我把這個(gè)二進(jìn)制大對(duì)象文件夾指定為Hive數(shù)據(jù)倉(cāng)庫(kù)表格的數(shù)據(jù)源,創(chuàng)建了Hive表格,然后使用Hive開放數(shù)據(jù)庫(kù)連接(ODBC)驅(qū)動(dòng)程序和Excel插件,對(duì)它執(zhí)行了簡(jiǎn)單的HiveQL聚集查詢(見圖5)。
Hive方法所用的時(shí)間要比Cloud Numerics示例程序所用的時(shí)間短得多,因?yàn)楹笳咄ㄟ^(guò)低速的DSL互聯(lián)網(wǎng)連接,把HPC集群上傳到Windows Azure大概需要2個(gè)小時(shí)。不過(guò),Cloud Numerics可以更快地獲取同樣的數(shù)據(jù);我估計(jì),使用HiveQL查詢來(lái)確定這個(gè)結(jié)果至少要花掉我半天的時(shí)間。不然,我需要另外花幾個(gè)小時(shí)來(lái)編寫和測(cè)試Pig Latin腳本。 要不是互聯(lián)網(wǎng)連接不對(duì)稱這種現(xiàn)狀,利用Cloud Numerics獲得數(shù)據(jù)的速度會(huì)大大加快。
原文鏈接:http://searchcloudcomputing.techtarget.com/tip/Analyzing-big-data-with-Microsoft-Cloud-Numerics