摘要:?摘要傳統(tǒng)的數據分析經常使用的工具是Hadoop或Spark在使用之前環(huán)境是需要用戶自己去搭建的。隨著業(yè)務逐漸向云遷移如何在云上進行大數據分析是需要解決的問題。為此阿里云提供了一項很重要的服務——大數據計算服務MaxCompute。
摘要:傳統(tǒng)的數據分析,經常使用的工具是Hadoop或Spark,在使用之前環(huán)境是需要用戶自己去搭建的。隨著業(yè)務逐漸向云遷移,如何在云上進行大數據分析是需要解決的問題。為此,阿里云提供了一項很重要的服務——大數據計算服務MaxCompute。本視頻中,上海駐云科技的專家將帶領大家了解如何使用阿里云的大數據計算服務MaxCompute來進行數據分析的。
演講嘉賓簡介:
翟永東,來自上海駐云科技。上海駐云科技是阿里云的合作伙伴之一,其宗旨是幫助客戶將自己的業(yè)務系統(tǒng)遷移到云上,公司在云上會使用阿里云的一些大數據產品幫助用戶做數據分析。
以下內容根據演講嘉賓視頻分享以及PPT整理而成。
關于MaxCompute更多精彩文章,請移步云棲社區(qū)MaxCompute公眾號!
本次的分享主要分為三部分:
一、企業(yè)云上搭建的數據分析平臺:該部分主要介紹阿里云搭建的數據分析平臺整體架構和分析流程。
二、大數據計算服務MaxCompute:該部分主要介紹了大數據計算服務MaxCompute的具體情況,包括特點、使用場景、功能組成以及使用過程中的注意事項,同時介紹了駐云科技使用MaxCompute完成的客戶案例。
一、企業(yè)云上搭建的數據分析平臺
在了解MaxCompute之前,我們先來了解一下目前阿里云上搭建的數據分析平臺整體架構(如下圖)。最左側是數據源,在幫用戶做數據分析的時候,首先需要明確數據源是在什么地方,比如線下的數據庫如MySQL、SQLserver或Oracle,還有一些是在自己業(yè)務系統(tǒng)里面,比如服務器的日志等,目前有的用戶也將數據存放在NoSQL的數據庫中,總之數據源多種多樣,數據源的位置是首先需要明確的;然后需要把數據抽取到云端,用于在云上進行數據分析,不管用戶是否使用云服務,都可以使用數據集成技術將離線或實時數據抽取到阿里云與數據處理相關的服務中,對于離線數據使用的是數據集成CDP,對于流式計算產生的實時數據使用的是DataHub;所抽取的數據會用到三個與數據處理相關的服務,一個是MaxCompute用來做離線計算,一個是分析型數據庫做在線數據分析,類似于OLAP場景,最后一個是流式計算于正常流式計算服務;這三個服務處理過的數據可以通過SQL、MapReduce、Graph或機器學習的方式進行分析;經過分析的數據結果最終可以通過阿里云的數據應用進行展示,大數據領域中的一個子領域是數據可視化,關注如何將數據分析結果進行展示,阿里云針對這點提供了很多數據應用,主要的應用又兩個,一個是QuickBI,將結果通過報表的形式進行展示,另外一個是DataV,通過大圖形式進行展示。以上是在云端比較完整的數據處理分析流程,在以上過程中,阿里云會提供一個可視化的平臺,讓用戶以可見的方式進行數據處理與分析,不像傳統(tǒng)的數據處理需要通過命令行,缺乏交互性,上手難度高。

上述過程中,用的比較多的是MaxCompute服務,這也是我們今天介紹的重點——如何使用MaxCompute進行數據分析。
二、大數據計算服務MaxCompute
介紹
MaxCompute原來叫做ODPS,它是阿里云自主研發(fā)的支持離線數據分析的服務,離線計算說明數據處理的實時性要求沒有那么高,目前的處理能力可以達到TB/PB級別,阿里云曾經用了六個小時對100個PB的數據完成了處理。目前MaxCompute被廣泛應用于數據分析、挖掘、商業(yè)智能等領域,另外,阿里巴巴的數據業(yè)務都運行在MaxCompute之上。
特點海量運算觸手可得。MaxCompute可以理解為阿里云已經為用戶搭建好了數據處理的平臺,平臺背后有上萬臺的服務器集群支持,可以根據數據規(guī)模自動調整集群存儲和計算能力,最大化發(fā)揮數據的價值。對于用戶來講,只需要將自己的數據上傳,就可以對數據進行處理和分析,而不需要自己搭建數據處理環(huán)境。
服務“開箱即用”。MaxCompute服務的使用不需要任何的復雜配置,只需要簡單的幾步操作,就可以上傳數據,分析數據并得到分析結果。之前有一個企業(yè)客戶是做手機軟件數據收集的,收集的是手機用戶app使用相關的行為數據,通過這些數據分析手機用戶的應用偏好,然后將結果賣給第三方的公司,比如廣告或app的應用廠商。這家企業(yè)起初選擇的是Hadoop來進行數據分析,因為Hadoop的存在時間比較久了,發(fā)展較為成熟,同時也是開源的,但是企業(yè)缺少使用Hadoop進行大數據分析的技術人員,現有的開發(fā)人員和技術人員只能自己去學習如何搭建Hadoop環(huán)境,如何使用Hadoop去做數據分析,整個Hadoop的研究學習差不多耗費了半年時間,僅僅使用了兩臺服務器,可以想象如果服務器變多,復雜度又會大大提升。最終,由于業(yè)務上沒有因為Hadoop的研究使用出現什么進展。該企業(yè)轉向了MaxCompute服務,底層的集群如何搭建他們不需要關心,只需要將數據上傳、然后按照業(yè)務需求進行分析即可。
數據存儲安全可靠。使用MaxCompute的安全性可以得到保障,實現的技術是三重備份防止數據丟失,另外還有一些讀寫鑒權、應用沙箱、系統(tǒng)沙箱等多層次安全機制來保證數據之間訪問的時候不會出現不安全的因素。
多用戶協(xié)作。MaxCompute是在云上提供服務的,只要是阿里云的用戶,都可以在云上使用它來進行數據分析,支持多用戶協(xié)作。傳統(tǒng)數據分析中會出現“數據孤島”,即企業(yè)中不同業(yè)務部門都有自己的數據,數據之間互相不透明,從而導致信息孤島。而使用MaxCompute可以將整個企業(yè)中所有業(yè)務部門的數據打通,減少數據孤島,在保障數據安全的前提下最大化工作效率。
按量付費。這一點其實的是和云服務是類似的,根據用戶的實際使用方式和需求進行收費,這樣可以避免像傳統(tǒng)的數據分析集群空閑而導致的資源浪費,最大化降低數據的使用成本。另外,MaxCompute目前支持包年包月的計費形式,因為有些用戶進行數據分析的次數比較頻繁,比如每天業(yè)務結束之后都會進行結算處理,這種情況下使用按量付費可能不那么劃算,而更適合使用包年包月的形式。
MaxCompute的使用場景
基于SQL構建大規(guī)模數據倉庫系統(tǒng)和BI系統(tǒng)
傳統(tǒng)情況下,可以通過第三方的服務和開源的技術搭建企業(yè)數據倉庫系統(tǒng),現在可以基于MaxCompute在云上方便地搭建。
基于DAG/Graph構建大型分布式系統(tǒng)
DAG是Spark中的有向無環(huán)圖,MaxCompute也是支持這種類似于Spark的計算方式的;另外MaxCompute也支持Graph的計算方式,比如在社交領域中(游戲)所做的社交分析。在所構建的大型分布式系統(tǒng)中,可以通過SDK的方式來調用底層的MapReduce來進行數據分析處理。
基于統(tǒng)計和機器學習的大數據統(tǒng)計和數據挖掘
并不是說MaxCompute本身支持機器學習,而是可以和機器學習來結合使用。因為拿到數據后,在數據處理之前會對數據進行清洗和預處理,處理完之后可以將這些數據交給機器學習平臺,在機器學習平臺中做一些深入的機器學習處理算法,比如可以將MaxCompute的結果作為訓練的數據給機器學習平臺進行訓練并建立模型。MaxCompute中提供專門的接口來對接機器學習平臺
MaxCompute的功能組成
MaxCompute的主要功能包括以下四個:
數據上傳下載。數據原本是存放在自己的數據源中,想要使用MaxCompute進行數據分析,需要將數據上傳到MaxCompute中,如果數據不在MaxCompute中,是沒有辦法做數據分析的,上傳之后處理計算的結果還可以進行下載。數據的上傳下載主要用到的是Tunnel?的模塊,可使用的方式有兩種,一種是Tunnel SDK,另一種是tunnel命令行工具。此外還可以借助第三方的集成插件來做數據的上傳和下載,比如阿里云專門的數據集成方式以及阿里云開源服務DataX。
SQL便捷開發(fā)。數據的上傳后就可以進行分析,首先可以使用SQL,MaxCompute支持SQL的使用來輔助計算,這個SQL和常用的SQL是類似的(百分之九十以上兼容)。大家如果熟悉Hive(Hadoop開源生態(tài)的一員,通過SQL語句做數據分析)的話會發(fā)現,MaxCompute支持的SQL和Hive的風格類似。因為Hive是開源的,有很多人用過,阿里云在推出MaxCompute的時候,如果使用全新的SQL風格,用戶的學習成本會增加,而使用和其他工具類似的風格,用戶學習起來也比較容易。
自定義函數。在使用SQL進行計算的時候,有些沒有辦法通過內置的函數來解決,這時候就可以使用MaxCompute支持的自定義函數功能來解決。目前所支持的自定義函數包括自定義標量函數、自定義表值函數和自定義聚組函數。
分布式編程模型。如果有些場景比較復雜,通過SQL沒辦法解決,可以使用MaxCompute支持的分布式編程模型,用戶可以自己編寫應用邏輯來做數據分析。其中,所支持的分布式編程模型有兩種,一種是MapReduce,用戶可以自己寫mapper和reducer來進行數據分析;另外一種是Graph,通過圖計算的方式來對數據進行分析。
?
上述的功能究竟該選擇哪個呢?我們通過下圖來幫助大家進行功能的選擇。首先,在使用的時候用戶需要明確數據是否已經上傳到MaxCompute,如果沒有,可以通過Tunnel或第三方的一些工具上傳數據;數據上傳之后看是否可以使用簡單的SQL語句來處理,如果可以使用,則建議首先使用SQL來做處理;如果通過簡函數功能不足,無法使用SQL來進行處理,這個時候可以考慮是否可以使用自定義函數(UDF)來進行處理。如果可以,則需要編寫自定義函數,使用SQL調用UDF來處理數據;否則,考慮使用MR或Graph的方式來對數據進行處理。之所以這樣建議功能選擇,是基于由簡到難的考慮,使用SQL是最簡單的,UDF自定義函數難度提高,但本質還是基于SQL,基于MR或Graph的方式涉及到使用Java做應用開發(fā),需要對框架熟悉,才能對數據做相應的處理和分析,難度最大。

接下來的介紹一下云端進行數據分析的過程中,需要用戶參與的工作主要有兩個,一個是自定義函數UDF的開發(fā),另一個是編寫MapReduce。
自定義函數UDF的開發(fā)。第一步首先用戶需要在本地將開發(fā)UDF的環(huán)境安裝配置好,阿里云的UDF開發(fā)語言以Java為主,其他語音如Python也在逐步支持。如果用Java進行開發(fā),那相應的開發(fā)環(huán)境如Eclipse等需要安裝,開發(fā)完成后可以使用本地模式進行測試。第二步是將開發(fā)并測試通過的UDF導出生成Jar包。第三步是使用odpscmd命令將本地生成的Jar包上傳到MaxCompute,將其作為資源來使用。第四步是在MaxCompute中,基于上傳的Jar包資源生成自定義函數。最后一步是在MaxCompute中寫SQL語句并測試使用自定義函數。
MapReduce開發(fā)。MapReduce開發(fā)的核心是編寫mapper和reducer,和傳統(tǒng)的Hadoop中的MapReduce的編寫是類似的,只是MaxCompute做了很好的封裝,很多代碼都幫助用戶寫好了。MaxCompute中MapReduce的開發(fā)流程是:第一步安裝配置環(huán)境;第二步開發(fā)MapReduce程序;第三步在本地模式下測試腳本;第四步在開發(fā)測試完沒有問題后,導出Jar包供云端使用;第五步將Jar包上傳至MaxCompute項目空間;第六步在MaxCompute中使用MapReduce。其中本地測試有兩個好處,一個是不會對線上的環(huán)境產生影響,另一個是只需要編寫測試的數據就可以在本地進行測試。
MaxCompute使用的注意事項
元數據不一致。大家在使用MaxCompute進行數據處理的時候,經常會面臨元數據不一致的情況。東方航空大數據開發(fā)人員曾經說過一件很有意思的事情,那就是東航現在不知道自己有多少架飛機,究其原因是因為內部的元數據沒有保持一致,或者說數據缺乏標準的定義。這種情況下常用的方法是定義標準的元數據,創(chuàng)建Map表或者定義轉換規(guī)則,清洗數據。舉個簡單的例子,比如現在有兩張表,customers表和kh表(如下圖),都與用戶信息相關,customers表中性別(Gender)使用M代表男性,F代表女性,而在kh表中性別(XB)男性使用“男”表示,女性使用“女”表示;另外可以發(fā)現,除了性別,這兩張表中對于身高的定義也是是不一致的,前者采用的是厘米為單位的身高計量方式,而后者采用的是尺寸的計量方式。這種情況下數據分析過程中如果兩個表需要做join,就沒有辦法做分析,所以說需要對元數據進行統(tǒng)一。具體怎么做呢?比方說創(chuàng)建一張map_gender的表,對涉及到性別的元數據進行統(tǒng)一,比如用1來表示男性,2來表示女性,再比如統(tǒng)一用厘米為單位來計量身高,對于尺寸為單位的計量,通過公式進行轉換。這樣的好處是生成圖最右側的兩張表,表中的元數據便實現了統(tǒng)一,便于數據分析。

數據缺失。在做數據分析的時候,不能夠保證收集的數據一定是完全的,數據總歸會出現缺失的情況,在這種情況下,我們來看一下該怎么處理。如果數據缺失比較少的話,可以簡單的扔掉不予考慮,比如有一億條數據,有一萬行數據是缺失的,這一萬行數據的缺失對整個結果影響不大,這個時候就可以不考慮這一萬行數據的缺失;而如果這一億行數據缺失了六七千萬行,那算出的數據肯定是不可靠的,這個時候就不能簡單的丟棄。常用的方法有三種,最簡單的是填充固定值,比如下圖左邊的表中有一行性別是缺失的,可以置-1,代表這一行的性別值缺失或未知;第二種方式是填充統(tǒng)計值,如平均值、極值或眾數等;前兩種方法都存在一定的隨機性,可靠性不高,隨著機器學習算法的普及,經常使用的第三種方式是擬合,通過模型或者規(guī)則進行擬合,得到最應該填的值,這個結果是相對來講更可靠的,更加接近于真實的值。還有一種情況是在數據收集的時候數據就缺失了,比如通過滴滴打車收集的數據來分析企業(yè)的加班情況,但是某些企業(yè)可能會有自己的班車或者其他的原因,這樣就導致有些數據本身就沒有收集到,這種情況的數據缺失對于結果的影響會更大。

數據倉庫的搭建。在使用MaxCompute搭建數據倉庫的時候,建議使用分層的方式,比如分成ODS、EDW和ADM三種不同的層次來進行搭建,其中ODS實現準時、跨領域的運營細節(jié)的查詢,已獲得細粒度的運營數據展現;EDW層實現基于歷史數據的統(tǒng)計分析和數據挖掘,已獲得客戶深層次的特征和市場發(fā)展規(guī)律;ADM層在數據的基礎上進行加工匯總形成的指標數據存儲分析型和加工匯總型數據。這樣做的好處是結構清晰,功能明確,任何變動可以很快的完成修改。另外,分層搭建數倉的時候,表的命名有一定的要求,比如ODS層中的表中含有ODS,直接告訴用戶這張表是在ODS層,或者明確表標明表應用的業(yè)務域。
應用案例
最后向大家介紹駐云科技曾經做過的一個客戶案例,是幫助某智慧商場搭建大數據架構,如下圖所示。商場的需求是了解每一層的商鋪銷量,如果商鋪的銷量很低,就把它關掉;另外還想要了解用戶的購物習慣,為用戶做精準推送。為了滿足商場需求,需要分析的數據來源有很多,除了線下數據庫,還有一些文本數據,駐云通過編寫shell腳本對文本數據進行清洗,然后存放在阿里云的OSS中,OSS可以作為MaxCompute的外部表,不需要導入MaxCompute便可以進行分析,雖然性能會有一定的損失,但相對于其所帶來的靈活性,損失是可以接受的。不同數據源的數據導入MaxCompute可以使用的方法有多種,除了阿里云提供的數據集成服務,還可以采用第三方或者開源工具DataX,這種方式的好處是可以實現靈活定制。所有數據整合到MaxCompute中后便可以進行分析,分析完后結果展示的方式有兩種,第一種是將MaxCompute的分析結果通過數據集成的方式導入到阿里云的RDS中,然后在Data-V中進行展示。為什么需要導入到RDS中而不是直接導入Data-V呢?需要注意的是,MaxCompute實現的是離線計算,實時性要求是不高的,而Data-V是一個大屏,對數據的實時性要求很高,所以一般的過程是將結果先導入到數據庫中,然后從數據庫中再讀取相關數據在Data-V中做大圖展示。還有一種方式是不做大屏展示,而是做報表分析,這種情況下可以將MaxCompute的數據直接在Quick-BI中展示,也可以在阿里云的ADS數據庫進行存儲和二次分析,分析完之后再在Quick-BI中展現。這兩種方式的展現形式有一定的重合性,比如二維的餅圖等,但是Data-V可以展現三維地圖等形式,通過大屏很直觀的展現。這兩種展現方式可以根據需求選擇。
本文為云棲社區(qū)原創(chuàng)內容,未經允許不得轉載。
電子發(fā)燒友App







































評論