BI系統(tǒng),即商業(yè)智能系統(tǒng),用來將企業(yè)或業(yè)務(wù)中現(xiàn)有的數(shù)據(jù)進行有效的整合,快速準確的提供報表并提供決策依據(jù),幫助企業(yè)做出明智的業(yè)務(wù)經(jīng)營決策。傳統(tǒng)的BI系統(tǒng)提供商有Oracle,IBM,Microsoft,MicroStrategy等。??
??圖1 暢思數(shù)據(jù)中心分層示意圖
??BI系統(tǒng)的挑戰(zhàn)在于數(shù)據(jù)量以及計算的效率。結(jié)合目前大數(shù)據(jù)方面的成就,這些問題已經(jīng)得到的較好的解決。有能力的企業(yè)現(xiàn)在完全可以自己搭建自有的BI系統(tǒng)。
??本文以暢思平臺BI系統(tǒng)為例為大家介紹下BI平臺的搭建。
??BI系統(tǒng)主要分為數(shù)據(jù)收集、ETL以及存儲入庫、任務(wù)調(diào)度、可視化等部分。
??1 數(shù)據(jù)收集
??數(shù)據(jù)收集需要考慮如下幾個問題。
??數(shù)據(jù)源有哪些?
??數(shù)據(jù)的收集方式?
??數(shù)據(jù)的時效性、準確性、完整性?
??1.1 數(shù)據(jù)源
??數(shù)據(jù)源包括三大類:第一方數(shù)據(jù),第二方數(shù)據(jù),第三方數(shù)據(jù)。
??第一方數(shù)據(jù),主要是廣告主、媒體回傳的用戶行為數(shù)據(jù)。數(shù)據(jù)一般包括用戶注冊、登錄、關(guān)卡等事件信息,可以通過對此類數(shù)據(jù)的分析,為應用運營提供統(tǒng)計指標,指導運營工作,如果與廣告投放數(shù)據(jù)聯(lián)合,可以進行廣告及用戶后續(xù)效果的持續(xù)追蹤以及評估;
??第二方數(shù)據(jù),主要是廣告平臺展示、點擊、激活等數(shù)據(jù),這類數(shù)據(jù)可用于分析廣告平臺各個項目在各類媒體上的表現(xiàn)使用,對流量進行評估,如果流量比較穩(wěn)定,亦可用于創(chuàng)建用戶畫像使用;
??第三方數(shù)據(jù)主要是其他平臺合作數(shù)據(jù),該類數(shù)據(jù)包括用戶標簽合作接入,基本流量數(shù)據(jù)。
??1.2 數(shù)據(jù)收集
??第一方數(shù)據(jù)可通過應用集成SDK采集、或者應用方直接回調(diào)等方式進行數(shù)據(jù)的收集。
??第二方數(shù)據(jù)主要是兩種方式:廣告SDK以及廣告API
??第三方數(shù)據(jù)一般采用API、第三方存儲(AWS S3, 阿里云存儲)、RSYNC等方式進行批量傳輸。
??1.3 數(shù)據(jù)的時效性、準確性、完整性
??對于第一方數(shù)據(jù),一般按周期進行傳輸,除非BI系統(tǒng)提供實時服務(wù),按周期傳輸?shù)臄?shù)據(jù)可以滿足絕大部分數(shù)據(jù)分析的需求。
??而第二方數(shù)據(jù),由于平臺一般需要進行實時的監(jiān)測,對數(shù)據(jù)的時效性以及準確性,要求相對比較高,對于時效性,基本要達到實時傳輸。因為實時傳輸經(jīng)常會由于網(wǎng)絡(luò)的問題,導致數(shù)據(jù)傳輸?shù)腻e亂或者丟失,此時一般還需要引入離線機制進行數(shù)據(jù)的再傳輸,以保證數(shù)據(jù)的準確性以及完整性。
??一般來講,對于指標或者質(zhì)量要求非常高的數(shù)據(jù)以及結(jié)果,一般采用離線傳輸和計算的方式,實時計算則提供具有指導意義的誤差再可容忍范圍之內(nèi)的服務(wù)。
??1.4解決方案示例
??以暢思廣告平臺為例,如圖2所示??
??圖2 日志收集示意圖
??第一方和第二方數(shù)據(jù)。離線分析,采用批量傳輸和獲取的方式進行數(shù)據(jù)收集;實時分析,則使用Flume進行數(shù)據(jù)的收集。第三方數(shù)據(jù),則通過第三方可靠性存儲作為媒介如阿里云、百度云、AWS等來進行中轉(zhuǎn),對于第三方需要實時獲取信息的,則采用API的方式進行通信。
??2 ETL
??Extract-Transform-Load的縮寫,在數(shù)據(jù)倉庫中對數(shù)據(jù)進行抽取、轉(zhuǎn)換、并加載到數(shù)據(jù)倉庫中。其主要目的是對數(shù)據(jù)進行清洗,并按照預先定義好的數(shù)據(jù)倉庫模型將數(shù)據(jù)進行規(guī)整化,以便進行后續(xù)的分析。
??現(xiàn)在市面是流行的ETL工具代表有: Kettle,Talend,Informatica, Datastage等。但對于平臺類的ETL,需要比較多的定制化操作,并且需要對數(shù)據(jù)進行特殊的解析或者映射,這些特殊需求導致上述的ETL工具使用起來比較麻煩。所以大家一般會自己進行ETL工具的定制開發(fā)。
??2.1 ETL需考慮的因素
??首先,確定數(shù)據(jù)倉庫的模型。要從倉庫的效率、兼容性、擴展性等多方面進行考慮。效率上考慮,把最經(jīng)常使用或者分析的字段以單獨列的形式設(shè)計到模型中,并對數(shù)據(jù)進行時時間片等維度的切分;兼容性方面則一般將字段的類型設(shè)置為字符串;擴展性方面,要保留足夠的字段或者特殊的兼容性較強的字段供將來使用。
??其次,要準備好ETL使用的存儲以及計算框架。對于數(shù)據(jù)量較大的情況,建議基于Hadoop、Cassandra等文件系統(tǒng)進行存儲,Pregel、Yarn、Mesos等分布式計算框架進行ETL的操作。
??第三,存儲的數(shù)據(jù)格式。使用原始的數(shù)據(jù)文件,還是使用壓縮的格式;對于原始的文件,一般的分布式計算平臺會自動進行切分,而對于部分壓縮格式,則不支持文件的切分。這時候就需要在存儲與計算效率之間進行折中,如果集群存儲量有限,則使用壓縮文件,但可通過自動切分文件然后壓縮上傳的方式來提高計算效率。
??第四,ETL數(shù)據(jù)索引信息。需要提供外部的索引信息來指導分析人員進行數(shù)據(jù)的獲取以及分析。一般采用的方式是在數(shù)據(jù)庫中存儲數(shù)據(jù)倉庫各個分區(qū)的信息供分析人員查詢。
??2.2 暢思ETL
??暢思的ETL主要是基于Hive,建立數(shù)據(jù)表,數(shù)據(jù)表中的各個字段是廣告平臺或者接入方數(shù)據(jù)映射之后的字段,并預留Map結(jié)構(gòu)體字段滿足將來的擴展需求。考慮到數(shù)據(jù)倉庫縱向、橫向分析的可能,對數(shù)據(jù)進行平臺、時間、類型的切分。
??在存儲以及計算框架方面,選用的hadoop生態(tài)圈的相關(guān)實現(xiàn)。存儲使用hdfs或者hbase,計算框架則采用Yarn。
??存儲的數(shù)據(jù)格式。目前壓縮格式較多,例如gz, scrapy, lzo,bz2等,考慮到存儲容量尤其是IO方面的需求,暢思對原始數(shù)據(jù)進行了最高級別的壓縮,并通過對壓縮數(shù)據(jù)分塊來提高計算效率。而對于數(shù)據(jù)倉庫中的數(shù)據(jù),則采用lzo壓縮,該壓縮Mapreduce可進行自動切分。
??數(shù)據(jù)索引信息。使用mysql進行索引的存儲,并在全局記錄數(shù)據(jù)倉庫數(shù)據(jù)的開始結(jié)束時間。
??3 BI任務(wù)調(diào)度系統(tǒng)
??BI系統(tǒng)需要支持OLAP,提供復雜的分析操作,并提供直觀易懂的查詢結(jié)果,為決策提供支撐。如何從數(shù)據(jù)倉庫中快速有效的分析提取結(jié)果,是任務(wù)調(diào)度系統(tǒng)需要解決的問題。
??3.1 考慮因素
??首先,以什么方式讓分析人員調(diào)用。SQL的方式最為簡潔,并且因為大家對關(guān)系型數(shù)據(jù)庫比較熟悉,并且SQL在語法以及語意方面都比較完善,培訓資料較多。分析人員可以以較小的代價入門。
??第二,權(quán)限控制。對數(shù)據(jù)源、數(shù)據(jù)表等進行權(quán)限控制,防止用戶越界訪問。
??第三,結(jié)果存儲。存儲要穩(wěn)健,并且能提供高并發(fā)的讀寫請求。
??第四,結(jié)果反饋。分析人員獲取結(jié)果之后,以什么方式呈現(xiàn)給分析人員,出錯之后如何處理。
??第五,任務(wù)調(diào)度,“調(diào)度”最為重要,需要考慮任務(wù)是否需要周期性調(diào)度,并根據(jù)任務(wù)的優(yōu)先級、任務(wù)等待的時間等因素考慮任務(wù)調(diào)度的順序。
??3.2 暢思任務(wù)調(diào)度系統(tǒng),如圖3所示
??暢思調(diào)度平臺以交互的方式提供任務(wù)提交功能。交互界面劃分權(quán)限,用戶通過界面操作將指定優(yōu)先級及必須字段操作轉(zhuǎn)化為以SQL命令為主的任務(wù)序列提請到任務(wù)后臺。
??在任務(wù)調(diào)度方面,通過任務(wù)的優(yōu)先級、調(diào)度周期等進行任務(wù)的分發(fā),把不同的級別的任務(wù)分發(fā)到不同的消息隊列中。任務(wù)執(zhí)行端則從消息隊列中獲取執(zhí)行任務(wù)。
??任務(wù)調(diào)度的結(jié)果,則根據(jù)用戶指定的方式進行存儲或操作。如果指定為郵件發(fā)送,如果執(zhí)行成功,則將結(jié)果以郵件的方式發(fā)送給配置的相關(guān)人員;如果是存儲入庫,則將結(jié)果存儲到mysql,并根據(jù)需要加載到緩存,供后續(xù)分析或者展示。
??4 可視化系統(tǒng)
??可視化統(tǒng)除了提供報表的展示、導出等功能,還要提供多維度、同比、環(huán)比等對比分析功能。BI系統(tǒng)產(chǎn)生的結(jié)果,價值的體現(xiàn)很大程度上體現(xiàn)在可視化方面。最終的可視化版本需要與產(chǎn)品、運營進行需求調(diào)研之后,根據(jù)業(yè)務(wù)的實際需要,提煉需要展示的維度。