算起來,接觸大資料、和互聯網之外的客戶談大資料也有快2年了。 也該是時候整理下一些感受,和大家分享下我看到的國內大資料應用的一些困惑了。 雲和大資料,應該是近幾年IT炒的最熱的兩個話題了。 在我看來,這兩者之間的不同就是:雲是做新的瓶,裝舊的酒; 大資料是找合適的瓶,釀新的酒。
雲說到底是一種基礎架構的革命。 原先用物理伺服器的應用,在雲中變成以各種虛擬伺服器的形式交付出去,從而計算、存儲、網路資源都能被更有效率的利用了。 於是,酒量好無酒不歡的人就可以用個大碗公牛飲二鍋頭;酒量小又想嘗嘗微醺小醉風情的人也可以端個小杯咂巴咂巴女兒紅。
大資料的不同在於,它其實是把以前人們丟棄不理的資料都撿起來,加以重新分析利用,使之產生新價值的技術。 換句話說,原先20斤的糧食只能出2斤的酒糟,現在20斤的糧食都變成或者大部分變成酒糟。 當然這酒糟肯定會和原先的酒糟有不一樣,所以釀出來的酒肯定和以前不同,喝酒、裝酒、儲存酒的方法自然也不同。
所以,相對於雲,人們對大資料使用的困惑更大。 接下來談談我所看到的幾類最多的困惑,以及我們目前存在哪些問題。
困惑之一:大資料能幹什麼?
換用前面飲酒來作比方,這新釀出來的酒怎麼喝才可以喝得痛快。 這裡不再想討論到底哪些資料是大資料了。 下面這張圖是Gartner 對各行業對於大資料需求的調查,該統計針對大資料通用的3個V , 以及未被利用資料的需求情況做了分類。 可見幾乎所有行業都對大資料有著各種各樣的需求。
圖片來自Gartner
為什麼有這些需求,是因為以前這些類型的資料都因為技術和成本的原因,使用者沒有收集處理。 現在有了性價比合理的手段可以讓你收集處理這些資料,怎麼可能說不要? 還是以釀酒做比喻,以前釀兩斤酒糟要浪費18斤的糧食,現在至少20斤糧食可以有10斤都變成酒糟了,雖然這些酒糟可能和以前不大一樣,但至少可以少浪費8斤糧食呢。
現在問題來了,酒糟多了,種類不一樣了,怎麼根據新的酒糟釀酒呢? 對不起,這個問題酒作坊就要別人來教了。 但問題是,所有酒坊現在可能都面臨這同一個問題,於是就沒人可以教你了,只能自己慢慢摸索。 這個就是現在各行業面對大資料的最大困惑 --- 海量的資料收集上來不知道怎麼用!
這裡不妨看看為什麼傳統的資料倉儲領域沒有這樣的困惑。 如下這張圖很好的說明了傳統和現在的區別:
圖片來自Sogeti
從上圖展示的流程可以看出產生困惑的根本原因是:苦逼的IT從業人員走在了業務決策者的前面 (流淚) 。 傳統時代,都是業務人員希望得到某類型的統計報表或者分析預測,於是IT行業人員為了滿足他們的需求找方案、寫演算法,從而催生出了各種類型的資料倉儲和解決方案。 而現在,在互聯網的推動下,IT人員發覺原來我們可以通過一些新的方式存儲海量的原先無法處理的資料,但業務人員卻沒有準備好。 所以,當你告訴他們:「嘿,哥們兒,我這裡現在又有了很多資料可以幫你了。 」他們一頭霧水不知道這些資料對他們有什麼用了。
怎麼解決這個問題? 先來看傳統廠商Oracle、IBM他們是怎麼做的。 方式細節略有不同,但他們的思路基本如下:
圖片來自HP首席技術專家 Greg Battas在ABDS2012大會上的分享
簡單來說,這種處理方式是把Hadoop和其它各類NewSQL、NoSQL方案以ETL,或外部表的方式引入現有的資料分析解決方案架構中。 這種方案因為上層的資料倉儲沒有大的改變,客戶可以繼續使用原先的演算法和報表結構,即在新的資料平臺上繼續沿用舊的應用場景和分析方法。 好處是由於引入了大資料技術,可以處理多種資料來源,同時降低原先海量資料ETL的成本。 但這種方法依然存在不少問題:
問題一:性能瓶頸依然存在。 縱觀現在各類NewSQL、NoSQL方案,分散式是一個最顯著的特色。 之所以大家都採用分散式架構,就是因為傳統的縱向擴展方案,在處理海量資料時候性能沒法隨著資料量的增長而線性擴展,或者成本代價太高。 而上圖的方案,雖然通過Hadoop解決了ETL的性能瓶頸問題,但BI還是傳統的資料倉儲,海量的ETL使得原有資料倉儲需要處理的資料量大增,所以必須花很大代價再次升級原有的資料倉儲,否則分析就會跑的比原先還慢。 因此,使用者依然需要升級價格不菲的上層資料倉儲,向原先效率一般的演算法妥協性能。
問題二:大資料投資被浪費。 舊的分析應用場景,演算法是基於關聯式資料庫的。 和大資料方案的邏輯模式有很大的不同,這不同主要有兩類。
沙裡淘金和打磨玉石的區別。 我舉過辣子雞的例子來形容Hadoop,大致是說一盤辣子雞就是大資料,Hadoop就是辣子雞裡剔除尖椒,找出能吃的雞塊的方法。 其實,大資料的處理就是幫你淘金的過程。 以前沒有那麼合適的「篩子」,所以只能放棄在沙子裡淘金的夢想,現在有了合適的「篩子」,就可以去從沙灘上比較高效快速的找出那些「閃光」的東西了。 而傳統的資料處理方式,其實已經通過人工、半人工的方式,把很多篩撿工作做了。 所以雖然丟棄了大量的資料,但是保留下的資料已經是塊「璞玉」了,要做的只是對這塊「璞玉」再精雕細啄,使其成為價值連成的「美玉」。 所以,用傳統的資料處理方法來處理大資料,就是拿美工刀去宰一頭牛,即使有人幫你端盤子分部位,還沒殺死牛人就累死。
動車組和火車的區別。 分散式的大資料架構,其核心思想和三灣改編時的核心思想是一樣的:把支部建到連隊中去。 把党的有生力量分佈到各個戰鬥單元中,大大提高中央戰略的貫徹執行,提高各個戰鬥單位的機動性和戰鬥力。 就是動車為什麼比火車開得快的道理:每節車廂都有動力,雖然每節都不比火車頭強勁,但車廂越多就跑的越快。 而火車頭再強勁,也有拖不動更多車廂的時候。 現有的分析演算法,很多時候都是針對「火車頭」類型的,很多時候沒辦法拆分成很多小的運算分佈到每個節點上。 於是,如果沿用之前的演算法,那麼就必須增加額外的軟體方案把已經分佈出去了的資料再「集中」起來,額外增加的環節,肯定費時費力,效果不可能會好。
在我看來,前面提到的傳統廠商解決企業大資料應用困惑的方案不是最好的方案。 什麼是最好的方案呢? 其實很簡單,就是針對新的資料集和資料庫結構特點開發新的應用分析場景,並把這些分析應用場景直接跑到大資料架構上。 而不是去削足適履,拿新的NewSQL、NoSQL嫁接傳統方案。
這麼做的好處不言而喻,關鍵是如何實現? 這些事不能由搞IT的人來告訴業務人員,得讓業務人員來告訴我們! 大資料應用要真正在企業裡生根開花,真的需要一些資料科學家做需求生成(Demand Generation)的工作。 我們要通過他們的説明,使這張圖裡的大資料路徑翻轉過來,像傳統資料處理一樣,由業務人員告訴我們,他們想做什麼!
我接觸過很多客戶,去之前得到的需求都是:希望瞭解Hadoop或者記憶體資料庫。 但是去了之後都發覺,他們其實不知道Hadoop或者記憶體資料庫可以幫他們達到哪些目的,希望我們可以告訴他們。 但很坦率的說,這個不是我們這些搞IT基礎架構的人該做的事情。 我們已經「超前」的儲備好了這類技術手段了,怎麼用這類技術真的是應該懂業務的人去想,而不是我們了。
所以,在這裡我想呼籲IT行業裡,處在金字塔頂的專業諮詢師、資料分析人員、資料科學家們,現在是時候走出原先的框架看看新技術新架構下有些新商機了。 不要總是桎梏于傳統的思路和方法,讓新的大資料思想來做「削足適履」的事情了。 真心希望你們可以利用專業知識和行業經驗,幫著那些」求大資料若渴「的行業使用者們好好定位下對他們真正有價值的新應用場景,設計更多的有意義的分散式演算法和機器學習模型,真正説明他們解決大資料應用之惑。
困惑之二:不同的大資料方案之間有什麼不一樣,我該用哪些?
首先,客戶必須把前一個問題想清楚,明確自己要做什麼事,實現什麼功能。 然後,我們就可以把這個需求分解成小的需求:
要處理幾種資料類型?
要處理多大的資料量?
要處理的多快?
這三個要求有比較明確答案之後。 這張圖表以資料處理的時效性和資料量為兩個維度,把傳統的RDBMS和Hadoop、MPP、記憶體資料庫等各類大資料方案做分類。 這個分類針對的還是各種類別裡比較典型的方案。 現在實際情況,特別是MPP和Hadoop,各個發行版本的特色功能都不盡相同,所以處理的場景也會各有不同方向的延伸。
大資料時代,一種架構包打天下的局面是不大可能出現的。 未來的企業大資料整體方案,肯定是多種資料庫方案結構並存的。 企業資料在各個不同方案架構之間可以聯合互通,根據分析場景的不同分析工具運作在不同的資料庫架構上。
圖片來自 Nomura Research Institute
既然未來企業裡面肯定會有多種資料來源,多種資料庫結構,那麼是否可以建立一個中間的資料服務層,把應用和底層資料庫架構隔離開呢? 就好像你趕著上班,沒時間買菜,於是就寫個功能表交給鐘點工,給他錢讓他幫你買。 你不用管她到底會去路邊菜市場買還是超市買。 這個想法看起來很美好,但我覺得在企業裡實行的難度比較大,不是很現實。 為什麼這麼說? 這裡只是說說我的一些看法。
看看對大資料應用最純熟的互聯網,他們的方式就是:簡潔,直接。 什麼樣的資料,用哪種方式存儲效率最高,處理起來最快就用哪種方式。 能直接在檔案系統上做的就不放到資料庫裡。 資料的分析也是如此,結構層次越少越好,資料訪問越直接越好,能用程式設計語言直接解決的問題就堅決不採用資料倉儲用SQL。 該用SQL解決的問題也不去為了統一介面而再去跑一遍JAVA或Python。 一切以高效直接為前提,充分貫徹「把支部建到連隊裡」的核心思想,發揮小快靈的優勢。 以Hadoop舉例,很多互聯網或者發行版本都開始嘗試放棄Map/Reduce直接對HDFS進行操作處理,其思想就是想更直接,更簡潔。 所以,前面所述的「建立一個資料服務層」還是傳統企業的舊思路老方法,希望通過建立中介層減少開發移植難度,其實結果就是發揮不出大資料架構本身的性能和規模優勢,限制住了技術架構本身的發展空間。 之所以提這個話題,主要是想引出下一個行業對於大資料的困惑。
困惑之三:我們應該怎樣從傳統的關聯式資料架構向大資料架構遷移。
這個問題,我覺得沒有人可以給出完美的答案,因為現在的一些新企業,比如互聯網,面對的就是混合資料大資料的環境,不存在遷移的問題。 而且他們要處理的資料類型,應用場景也和傳統企業不一樣,只有一定的借鑒意義,完全複製是不明智的。 傳統的大型企業,現在國外大多數的企業自己在摸著石頭過河,國內企業剛開個頭。 其實大家都在摸索過程中,前方基本沒有指路的明燈,只有一點點星星之火可供參考。
誰能幫你呢? 我覺得還是那些搞企業諮詢的人士。 至少他們可以看到很多國外類似企業的成功或者失敗案例。 但前提是他們真正站在中立的立場幫你從新的應用場景著手分析規劃。
關於這個問題,我也分享個人的觀點,僅供參考。
第一步:先把大資料存起來,用起來。 現在看過很多傳統企業請各類諮詢人士做的大資料戰略規劃,我沒資格評價這些規劃的可行性和問題所在,但我覺得對於接受新生事物,首先要做的就是先嘗個鮮,而不是知道它的未來會怎樣。 如果小試牛刀的結果不好,那麼調整重頭再來的成本也比較小。 所以我的建議,首先找個方案,把你準備分析處理的資料用新的辦法存起來,然後再試著在上面做些簡單的查詢,比較之類的應用,看看效果好不好,領導買不買單。 如果效果好了,那麼再試著在這上面實現新的業務應用場景,解決一部分業務人員的某些實際需求;效果好的話再試著做第二個應用,第三個分析。。。。。。 慢慢的讓越來越多人看到這些新資料新應用的價值。
第二步:考慮新的大資料平臺和原有資料平臺的互通,聯合問題。 這裡有兩個方面:
把舊的應用分析運行在新的大資料平臺上。 把資料從原先的RDBMS資料來源抽取到新的大資料平臺上,利用新的大資料分析方法實現傳統的業務分析邏輯。 這麼做有可能會分析更多的資料產生更好的分析結果,也有可能會發現效率還不如原先的RDBMS方案。
把大資料平臺上的資料幫浦到舊有資料倉儲中分析展現。 這個方向主要還是為了保證舊有使用者的SQL使用習慣,區別是抽入舊資料倉儲的不是外部表,而是經過清洗整理的有價值的資料。
通過這兩個方面的嘗試,基本就可以把哪些應用可以遷移,哪些不可以遷移搞清楚了。 為下一步打下扎實的基礎。
第三步:資料來源整合,分析應用場景定制。 有了前兩步的基礎,基本你就可以很清楚你能夠處理哪些類型的資料,以及他們會為你帶來哪些業務價值了。 接下來就可以發動「總攻」了。
總攻第一步,就是整合資料來源,把將會涉及到的各類型資料分類,用各自最合適的方法儲存起來整理好。 然後,把應用、展現工具根據所涉及資料來源的不同,應用場景的差異,和不同的資料存儲架構做耦合,定制化應用場景,使每個應用都可以充分利用到底層架構的性能和擴展能力。 對於需要跨資料來源的應用場景,選定中間處理層方案,保證中間處理層方案的定制化,不會因其存在影響底層架構的性能和上層分析應用的實現。
這樣的步驟,沒辦法一下子讓企業領導看到「未來10年以後的IT架構宏偉藍圖」,但可操作性比較強,而且一步不對修改調整的機會也比較大。 這種思路屬於互聯網和新興行業那種「小步快跑」的思維模式,先走幾步看看,如果不行也有了寶貴的經驗教訓,花的代價也不算很大。
大致上來說,我所能感受到的,行業使用者對於大資料的困惑就是以上所說的三個方面。 之所以會有這些困惑,歸根結底還是因為大資料的處理方式和以前的傳統方式太不同了。
以Hadoop為代表的大資料處理體系,其實是採取了一種粗放的方式處理海量的資料,機器學習的原理很多時候也是依靠大量的樣本而不是精確的邏輯。 舉個例子,我們常說的「清明時節雨紛紛」,根本沒有邏輯和科學公式去推匯出這個結論。 之所以會有這個結論,是無數勞動人民通過多年觀察,從「海量的」清明氣候樣本中發現,每到這幾天總是下雨比較多。 而為什麼清明這幾天會下雨,卻沒有人去仔細分析。 大資料的處理方式類似,它依託前人留下的經驗,歷史資料,歸納總結,而不是去依賴一些複雜的公式演算。 其所依仗的,就是「樣本」多,而且能夠通過技術手段快速高效的分析整理海量的樣本。 而之前因為沒辦法處理這麼多樣本,只能靠先進高精尖的數學模型。 所以,想用好大資料,一是要調整思路,儘量用簡單的方式去處理大量的資料;二是在某些情況下可能需要考慮通過多採樣等方式把資料「變大」。
所以,企業要想用好大資料,在沙海裡淘金,就應該大膽的拋棄掉原有的一套成熟的架構和方案。 從零開始,真正的去思考這麼多資料,這些個新方法對於企業能夠有什麼意義,產生什麼價值。 然後,就是把想法一個個在Hadoop,MPP等等架構上實現,落地,一旦發覺有問題了就馬上調整,從頭再來。 而不是先像以前那樣看看別的人都怎麼做,然後做幾十頁「看上去很美「的PPT,畫一個」未來十年「的美麗的大餅了事。 要多向互聯網和新興行業學習,改變思路,掛鉤業務,活在當下,小步快跑。