1. 程式人生 > >專家教你使用MaxCompute玩轉大數據分析

專家教你使用MaxCompute玩轉大數據分析

導入 性別 mar bi系統 方法 雲遷移 用戶信息 tro oop

摘要: 摘要傳統的數據分析經常使用的工具是Hadoop或Spark在使用之前環境是需要用戶自己去搭建的。隨著業務逐漸向雲遷移如何在雲上進行大數據分析是需要解決的問題。為此阿裏雲提供了一項很重要的服務——大數據計算服務MaxCompute。

本次的分享主要分為三部分:

一、企業雲上搭建的數據分析平臺:該部分主要介紹阿裏雲搭建的數據分析平臺整體架構和分析流程。

二、大數據計算服務MaxCompute:該部分主要介紹了大數據計算服務MaxCompute的具體情況,包括特點、使用場景、功能組成以及使用過程中的註意事項,同時介紹了駐雲科技使用MaxCompute完成的客戶案例。

一、企業雲上搭建的數據分析平臺

在了解MaxCompute之前,我們先來了解一下目前阿裏雲上搭建的數據分析平臺整體架構(如下圖)。最左側是數據源,在幫用戶做數據分析的時候,首先需要明確數據源是在什麽地方,比如線下的數據庫如MySQL、SQLserver或Oracle,還有一些是在自己業務系統裏面,比如服務器的日誌等,目前有的用戶也將數據存放在NoSQL的數據庫中,總之數據源多種多樣,數據源的位置是首先需要明確的;然後需要把數據抽取到雲端,用於在雲上進行數據分析,不管用戶是否使用雲服務,都可以使用數據集成技術將離線或實時數據抽取到阿裏雲與數據處理相關的服務中,對於離線數據使用的是數據集成CDP,對於流式計算產生的實時數據使用的是DataHub;所抽取的數據會用到三個與數據處理相關的服務,一個是MaxCompute用來做離線計算,一個是分析型數據庫做在線數據分析,類似於OLAP場景,最後一個是流式計算於正常流式計算服務;這三個服務處理過的數據可以通過SQL、MapReduce、Graph或機器學習的方式進行分析;經過分析的數據結果最終可以通過阿裏雲的數據應用進行展示,大數據領域中的一個子領域是數據可視化,關註如何將數據分析結果進行展示,阿裏雲針對這點提供了很多數據應用,主要的應用又兩個,一個是QuickBI,將結果通過報表的形式進行展示,另外一個是DataV,通過大圖形式進行展示。以上是在雲端比較完整的數據處理分析流程,在以上過程中,阿裏雲會提供一個可視化的平臺,讓用戶以可見的方式進行數據處理與分析,不像傳統的數據處理需要通過命令行,缺乏交互性,上手難度高。

技術分享圖片

上述過程中,用的比較多的是MaxCompute服務,這也是我們今天介紹的重點——如何使用MaxCompute進行數據分析。

二、大數據計算服務MaxCompute

介紹

MaxCompute原來叫做ODPS,它是阿裏雲自主研發的支持離線數據分析的服務,離線計算說明數據處理的實時性要求沒有那麽高,目前的處理能力可以達到TB/PB級別,阿裏雲曾經用了六個小時對100個PB的數據完成了處理。目前MaxCompute被廣泛應用於數據分析、挖掘、商業智能等領域,另外,阿裏巴巴的數據業務都運行在MaxCompute之上。

技術分享圖片

特點海量運算觸手可得。MaxCompute可以理解為阿裏雲已經為用戶搭建好了數據處理的平臺,平臺背後有上萬臺的服務器集群支持,可以根據數據規模自動調整集群存儲和計算能力,最大化發揮數據的價值。對於用戶來講,只需要將自己的數據上傳,就可以對數據進行處理和分析,而不需要自己搭建數據處理環境。

服務“開箱即用”。MaxCompute服務的使用不需要任何的復雜配置,只需要簡單的幾步操作,就可以上傳數據,分析數據並得到分析結果。之前有一個企業客戶是做手機軟件數據收集的,收集的是手機用戶app使用相關的行為數據,通過這些數據分析手機用戶的應用偏好,然後將結果賣給第三方的公司,比如廣告或app的應用廠商。這家企業起初選擇的是Hadoop來進行數據分析,因為Hadoop的存在時間比較久了,發展較為成熟,同時也是開源的,但是企業缺少使用Hadoop進行大數據分析的技術人員,現有的開發人員和技術人員只能自己去學習如何搭建Hadoop環境,如何使用Hadoop去做數據分析,整個Hadoop的研究學習差不多耗費了半年時間,僅僅使用了兩臺服務器,可以想象如果服務器變多,復雜度又會大大提升。最終,由於業務上沒有因為Hadoop的研究使用出現什麽進展。該企業轉向了MaxCompute服務,底層的集群如何搭建他們不需要關心,只需要將數據上傳、然後按照業務需求進行分析即可。

數據存儲安全可靠。使用MaxCompute的安全性可以得到保障,實現的技術是三重備份防止數據丟失,另外還有一些讀寫鑒權、應用沙箱、系統沙箱等多層次安全機制來保證數據之間訪問的時候不會出現不安全的因素。

多用戶協作。MaxCompute是在雲上提供服務的,只要是阿裏雲的用戶,都可以在雲上使用它來進行數據分析,支持多用戶協作。傳統數據分析中會出現“數據孤島”,即企業中不同業務部門都有自己的數據,數據之間互相不透明,從而導致信息孤島。而使用MaxCompute可以將整個企業中所有業務部門的數據打通,減少數據孤島,在保障數據安全的前提下最大化工作效率。

按量付費。這一點其實的是和雲服務是類似的,根據用戶的實際使用方式和需求進行收費,這樣可以避免像傳統的數據分析集群空閑而導致的資源浪費,最大化降低數據的使用成本。另外,MaxCompute目前支持包年包月的計費形式,因為有些用戶進行數據分析的次數比較頻繁,比如每天業務結束之後都會進行結算處理,這種情況下使用按量付費可能不那麽劃算,而更適合使用包年包月的形式。

技術分享圖片

MaxCompute的使用場景

基於SQL構建大規模數據倉庫系統和BI系統

傳統情況下,可以通過第三方的服務和開源的技術搭建企業數據倉庫系統,現在可以基於MaxCompute在雲上方便地搭建。

基於DAG/Graph構建大型分布式系統

DAG是Spark中的有向無環圖,MaxCompute也是支持這種類似於Spark的計算方式的;另外MaxCompute也支持Graph的計算方式,比如在社交領域中(遊戲)所做的社交分析。在所構建的大型分布式系統中,可以通過SDK的方式來調用底層的MapReduce來進行數據分析處理。

基於統計和機器學習的大數據統計和數據挖掘

並不是說MaxCompute本身支持機器學習,而是可以和機器學習來結合使用。因為拿到數據後,在數據處理之前會對數據進行清洗和預處理,處理完之後可以將這些數據交給機器學習平臺,在機器學習平臺中做一些深入的機器學習處理算法,比如可以將MaxCompute的結果作為訓練的數據給機器學習平臺進行訓練並建立模型。MaxCompute中提供專門的接口來對接機器學習平臺

MaxCompute的功能組成

MaxCompute的主要功能包括以下四個:

數據上傳下載。數據原本是存放在自己的數據源中,想要使用MaxCompute進行數據分析,需要將數據上傳到MaxCompute中,如果數據不在MaxCompute中,是沒有辦法做數據分析的,上傳之後處理計算的結果還可以進行下載。數據的上傳下載主要用到的是Tunnel 的模塊,可使用的方式有兩種,一種是Tunnel SDK,另一種是tunnel命令行工具。此外還可以借助第三方的集成插件來做數據的上傳和下載,比如阿裏雲專門的數據集成方式以及阿裏雲開源服務DataX。

SQL便捷開發。數據的上傳後就可以進行分析,首先可以使用SQL,MaxCompute支持SQL的使用來輔助計算,這個SQL和常用的SQL是類似的(百分之九十以上兼容)。大家如果熟悉Hive(Hadoop開源生態的一員,通過SQL語句做數據分析)的話會發現,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做應用開發,需要對框架熟悉,才能對數據做相應的處理和分析,難度最大。

技術分享圖片

接下來的介紹一下雲端進行數據分析的過程中,需要用戶參與的工作主要有兩個,一個是自定義函數UDF的開發,另一個是編寫MapReduce。

自定義函數UDF的開發。第一步首先用戶需要在本地將開發UDF的環境安裝配置好,阿裏雲的UDF開發語言以Java為主,其他語音如Python也在逐步支持。如果用Java進行開發,那相應的開發環境如Eclipse等需要安裝,開發完成後可以使用本地模式進行測試。第二步是將開發並測試通過的UDF導出生成Jar包。第三步是使用odpscmd命令將本地生成的Jar包上傳到MaxCompute,將其作為資源來使用。第四步是在MaxCompute中,基於上傳的Jar包資源生成自定義函數。最後一步是在MaxCompute中寫SQL語句並測試使用自定義函數。

技術分享圖片

MapReduce開發。MapReduce開發的核心是編寫mapper和reducer,和傳統的Hadoop中的MapReduce的編寫是類似的,只是MaxCompute做了很好的封裝,很多代碼都幫助用戶寫好了。MaxCompute中MapReduce的開發流程是:第一步安裝配置環境;第二步開發MapReduce程序;第三步在本地模式下測試腳本;第四步在開發測試完沒有問題後,導出Jar包供雲端使用;第五步將Jar包上傳至MaxCompute項目空間;第六步在MaxCompute中使用MapReduce。其中本地測試有兩個好處,一個是不會對線上的環境產生影響,另一個是只需要編寫測試的數據就可以在本地進行測試。

技術分享圖片

MaxCompute使用的註意事項

元數據不一致。大家在使用MaxCompute進行數據處理的時候,經常會面臨元數據不一致的情況。東方航空大數據開發人員曾經說過一件很有意思的事情,那就是東航現在不知道自己有多少架飛機,究其原因是因為內部的元數據沒有保持一致,或者說數據缺乏標準的定義。這種情況下常用的方法是定義標準的元數據,創建Map表或者定義轉換規則,清洗數據。舉個簡單的例子,比如現在有兩張表,customers表和kh表(如下圖),都與用戶信息相關,customers表中性別(Gender)使用M代表男性,F代表女性,而在kh表中性別(XB)男性使用“男”表示,女性使用“女”表示;另外可以發現,除了性別,這兩張表中對於身高的定義也是是不一致的,前者采用的是厘米為單位的身高計量方式,而後者采用的是尺寸的計量方式。這種情況下數據分析過程中如果兩個表需要做join,就沒有辦法做分析,所以說需要對元數據進行統一。具體怎麽做呢?比方說創建一張map_gender的表,對涉及到性別的元數據進行統一,比如用1來表示男性,2來表示女性,再比如統一用厘米為單位來計量身高,對於尺寸為單位的計量,通過公式進行轉換。這樣的好處是生成圖最右側的兩張表,表中的元數據便實現了統一,便於數據分析。
技術分享圖片

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

技術分享圖片

數據倉庫的搭建。在使用MaxCompute搭建數據倉庫的時候,建議使用分層的方式,比如分成ODS、EDW和ADM三種不同的層次來進行搭建,其中ODS實現準時、跨領域的運營細節的查詢,已獲得細粒度的運營數據展現;EDW層實現基於歷史數據的統計分析和數據挖掘,已獲得客戶深層次的特征和市場發展規律;ADM層在數據的基礎上進行加工匯總形成的指標數據存儲分析型和加工匯總型數據。這樣做的好處是結構清晰,功能明確,任何變動可以很快的完成修改。另外,分層搭建數倉的時候,表的命名有一定的要求,比如ODS層中的表中含有ODS,直接告訴用戶這張表是在ODS層,或者明確表標明表應用的業務域。

技術分享圖片

應用案例

最後向大家介紹駐雲科技曾經做過的一個客戶案例,是幫助某智慧商場搭建大數據架構,如下圖所示。商場的需求是了解每一層的商鋪銷量,如果商鋪的銷量很低,就把它關掉;另外還想要了解用戶的購物習慣,為用戶做精準推送。為了滿足商場需求,需要分析的數據來源有很多,除了線下數據庫,還有一些文本數據,駐雲通過編寫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可以展現三維地圖等形式,通過大屏很直觀的展現。這兩種展現方式可以根據需求選擇。

技術分享圖片

原文鏈接請添加鏈接描述

本文為雲棲社區原創內容,未經允許不得轉載。

專家教你使用MaxCompute玩轉大數據分析