Hadoop在可伸縮性、健壯性、計算性能和成本上具有無可替代的優勢,事實上已成為當前互聯網企業主流的大數據分析平台。本文主要介紹一種基於Hadoop平台的多維分析和數據挖掘平台架構。作為一家互聯網數據分析公司,我們在海量數據的分析領域那真是被「逼上樑山」。多年來在嚴苛的業務需求和數據壓力下,我們幾乎嘗試了所有可能的大數據分析方法,最終落地於Hadoop平台之上。
1. 大數據分析大分類
Hadoop平台對業務的針對性較強,為了讓你明確它是否符合你的業務,現粗略地從幾個角度將大數據分析的業務需求分類,針對不同的具體需求,應採用不同的數據分析架構。
按照數據分析的實時性,分為實時數據分析和離線數據分析兩種。
實時數據分析一般用於金融、移動和互聯網B2C等產品,往往要求在數秒內返回上億行數據的分析,從而達到不影響用戶體驗的目的。要滿足這樣的需求,可以採用精心設計的傳統關系型資料庫組成並行處理集群,或者採用一些內存計算平台,或者採用HDD的架構,這些無疑都需要比較高的軟硬體成本。目前比較新的海量數據實時分析工具有EMC的Greenplum、SAP的HANA等。
對於大多數反饋時間要求不是那麼嚴苛的應用,比如離線統計分析、機器學習、搜索引擎的反向索引計算、推薦引擎的計算等,應採用離線分析的方式,通過數據採集工具將日誌數據導入專用的分析平台。但面對海量數據,傳統的ETL工具往往徹底失效,主要原因是數據格式轉換的開銷太大,在性能上無法滿足海量數據的採集需求。互聯網企業的海量數據採集工具,有Facebook開源的Scribe、LinkedIn開源的Kafka、淘寶開源的Timetunnel、Hadoop的Chukwa等,均可以滿足每秒數百MB的日誌數據採集和傳輸需求,並將這些數據上載到Hadoop中央系統上。
按照大數據的數據量,分為內存級別、BI級別、海量級別三種。
這里的內存級別指的是數據量不超過集群的內存最大值。不要小看今天內存的容量,Facebook緩存在內存的Memcached中的數據高達320TB,而目前的PC伺服器,內存也可以超過百GB。因此可以採用一些內存資料庫,將熱點數據常駐內存之中,從而取得非常快速的分析能力,非常適合實時分析業務。圖1是一種實際可行的MongoDB分析架構。
圖1 用於實時分析的MongoDB架構
MongoDB大集群目前存在一些穩定性問題,會發生周期性的寫堵塞和主從同步失效,但仍不失為一種潛力十足的可以用於高速數據分析的NoSQL。
此外,目前大多數服務廠商都已經推出了帶4GB以上SSD的解決方案,利用內存+SSD,也可以輕易達到內存分析的性能。隨著SSD的發展,內存數據分析必然能得到更加廣泛的應用。
BI級別指的是那些對於內存來說太大的數據量,但一般可以將其放入傳統的BI產品和專門設計的BI資料庫之中進行分析。目前主流的BI產品都有支持TB級以上的數據分析方案。種類繁多,就不具體列舉了。
海量級別指的是對於資料庫和BI產品已經完全失效或者成本過高的數據量。海量數據級別的優秀企業級產品也有很多,但基於軟硬體的成本原因,目前大多數互聯網企業採用Hadoop的HDFS分布式文件系統來存儲數據,並使用MapRece進行分析。本文稍後將主要介紹Hadoop上基於MapRece的一個多維數據分析平台。
數據分析的演算法復雜度
根據不同的業務需求,數據分析的演算法也差異巨大,而數據分析的演算法復雜度和架構是緊密關聯的。舉個例子,Redis是一個性能非常高的內存Key-Value NoSQL,它支持List和Set、SortedSet等簡單集合,如果你的數據分析需求簡單地通過排序,鏈表就可以解決,同時總的數據量不大於內存(准確地說是內存加上虛擬內存再除以2),那麼無疑使用Redis會達到非常驚人的分析性能。
還有很多易並行問題(Embarrassingly Parallel),計算可以分解成完全獨立的部分,或者很簡單地就能改造出分布式演算法,比如大規模臉部識別、圖形渲染等,這樣的問題自然是使用並行處理集群比較適合。
而大多數統計分析,機器學習問題可以用MapRece演算法改寫。MapRece目前最擅長的計算領域有流量統計、推薦引擎、趨勢分析、用戶行為分析、數據挖掘分類器、分布式索引等。
2. 面對大數據OLAP大一些問題
OLAP分析需要進行大量的數據分組和表間關聯,而這些顯然不是NoSQL和傳統資料庫的強項,往往必須使用特定的針對BI優化的資料庫。比如絕大多數針對BI優化的資料庫採用了列存儲或混合存儲、壓縮、延遲載入、對存儲數據塊的預統計、分片索引等技術。
Hadoop平台上的OLAP分析,同樣存在這個問題,Facebook針對Hive開發的RCFile數據格式,就是採用了上述的一些優化技術,從而達到了較好的數據分析性能。如圖2所示。
然而,對於Hadoop平台來說,單單通過使用Hive模仿出SQL,對於數據分析來說遠遠不夠,首先Hive雖然將HiveQL翻譯MapRece的時候進行了優化,但依然效率低下。多維分析時依然要做事實表和維度表的關聯,維度一多性能必然大幅下降。其次,RCFile的行列混合存儲模式,事實上限制死了數據格式,也就是說數據格式是針對特定分析預先設計好的,一旦分析的業務模型有所改動,海量數據轉換格式的代價是極其巨大的。最後,HiveQL對OLAP業務分析人員依然是非常不友善的,維度和度量才是直接針對業務人員的分析語言。
而且目前OLAP存在的最大問題是:業務靈活多變,必然導致業務模型隨之經常發生變化,而業務維度和度量一旦發生變化,技術人員需要把整個Cube(多維立方體)重新定義並重新生成,業務人員只能在此Cube上進行多維分析,這樣就限制了業務人員快速改變問題分析的角度,從而使所謂的BI系統成為死板的日常報表系統。
使用Hadoop進行多維分析,首先能解決上述維度難以改變的問題,利用Hadoop中數據非結構化的特徵,採集來的數據本身就是包含大量冗餘信息的。同時也可以將大量冗餘的維度信息整合到事實表中,這樣可以在冗餘維度下靈活地改變問題分析的角度。其次利用Hadoop MapRece強大的並行化處理能力,無論OLAP分析中的維度增加多少,開銷並不顯著增長。換言之,Hadoop可以支持一個巨大無比的Cube,包含了無數你想到或者想不到的維度,而且每次多維分析,都可以支持成千上百個維度,並不會顯著影響分析的性能。
而且目前OLAP存在的最大問題是:業務靈活多變,必然導致業務模型隨之經常發生變化,而業務維度和度量一旦發生變化,技術人員需要把整個Cube(多維立方體)重新定義並重新生成,業務人員只能在此Cube上進行多維分析,這樣就限制了業務人員快速改變問題分析的角度,從而使所謂的BI系統成為死板的日常報表系統。
3. 一種Hadoop多維分析平台的架構
整個架構由四大部分組成:數據採集模塊、數據冗餘模塊、維度定義模塊、並行分 析模塊。
數據採集模塊採用了Cloudera的Flume,將海量的小日誌文件進行高速傳輸和合並,並能夠確保數據的傳輸安全性。單個collector宕機之後,數據也不會丟失,並能將agent數據自動轉移到其他的colllecter處理,不會影響整個採集系統的運行。如圖5所示。
數據冗餘模塊不是必須的,但如果日誌數據中沒有足夠的維度信息,或者需要比較頻繁地增加維度,則需要定義數據冗餘模塊。通過冗餘維度定義器定義需要冗餘的維度信息和來源(資料庫、文件、內存等),並指定擴展方式,將信息寫入數據日誌中。在海量數據下,數據冗餘模塊往往成為整個系統的瓶頸,建議使用一些比較快的內存NoSQL來冗餘原始數據,並採用盡可能多的節點進行並行冗餘;或者也完全可以在Hadoop中執行批量Map,進行數據格式的轉化。
維度定義模塊是面向業務用戶的前端模塊,用戶通過可視化的定義器從數據日誌中定義維度和度量,並能自動生成一種多維分析語言,同時可以使用可視化的分析器通過GUI執行剛剛定義好的多維分析命令。
並行分析模塊接受用戶提交的多維分析命令,並將通過核心模塊將該命令解析為Map-Rece,提交給Hadoop集群之後,生成報表供報表中心展示。
核心模塊是將多維分析語言轉化為MapRece的解析器,讀取用戶定義的維度和度量,將用戶的多維分析命令翻譯成MapRece程序。核心模塊的具體邏輯如圖6所示。
圖6中根據JobConf參數進行Map和Rece類的拼裝並不復雜,難點是很多實際問題很難通過一個MapRece Job解決,必須通過多個MapRece Job組成工作流(WorkFlow),這里是最需要根據業務進行定製的部分。圖7是一個簡單的MapRece工作流的例子。
MapRece的輸出一般是統計分析的結果,數據量相較於輸入的海量數據會小很多,這樣就可以導入傳統的數據報表產品中進行展現。
⑵ 如何架構大數據系統 hadoop
大數據數量龐大,格式多樣化。大量數據由家庭、製造工廠和辦公場所的各種設備、互聯網事務交易、社交網路的活動、自動化感測器、移動設備以及科研儀器等生成。它的爆炸式增長已超出了傳統IT基礎架構的處理能力,給企業和社會帶來嚴峻的數據管理問題。因此必須開發新的數據架構,圍繞「數據收集、數據管理、數據分析、知識形成、智慧行動」的全過程,開發使用這些數據,釋放出更多數據的隱藏價值。
一、大數據建設思路
1)數據的獲得
四、總結
基於分布式技術構建的大數據平台能夠有效降低數據存儲成本,提升數據分析處理效率,並具備海量數據、高並發場景的支撐能力,可大幅縮短數據查詢響應時間,滿足企業各上層應用的數據需求。
⑶ 大數據BI裡面大家都有提到Cube,有的提倡打Cube,有的說不打Cube,到底哪個才是最好的
各有各的好處,如果你的大數據產品不能直接處理超大數據量,通過打cube的方式能夠減低系統壓力,如果能夠運算足夠多的數據,當然是不打cube的方式更好!
首先,不打cube能夠讓你的分析層的數據更厚,分析的結果也就更准確;其次,也能讓你的數據分析更加靈活,因為原始的數據全部都能調配出來,進行運算,當你的分析需求改變的時候,不會因為cube造成分析的阻礙,這點我覺得很重重要,當每次的業務部門分析需求發生變化時如果都需要數周或數月的重新搭建,將造成很大的損失,都說商場如戰場,爭分奪秒嘛。
目前國內傳統的打cube的大數據產品很多,不打cube的,敏捷型的產品也有,比如永洪科技的大數據產品,就是很不錯的,在面對國內某電信行業巨頭大規模超過百億級的數據分析需求時,永洪的產品也能有很好的表現。當然也不是所有公司都能有百億級的數據產生,但是靈活的需求分析,以及厚重的數據層都將是所有數據分析非常重要的組成部分,如果不靈活將會失去分析的先機或分析的意義,如果數據層過薄將嚴重影響分析的准確性。
如果一定要說的話,永洪科技那種那麼不打cube的大數據BI才是行業發展的趨勢,應該是要遠遠優於傳統BI的模式的。
⑷ 大數據在金融行業有哪些典型應用
大數據在金融領域中有哪些應用?應用很廣,定價、授信、風控領域尤其多,我這邊主要用到的分析軟體是單位的帆軟FineBI系統,應用案例隨便說兩個: 車險。其實根據車主的日常行車路線、里程、行車習慣、出險記錄、職業、年齡、性別,可以給出非常不同的定價。比如一個開中級車,每天固定路線往返幾公里通勤的熟練女白領車主,和一個開同樣車型每天在珠三角或者長三角跑生意的中年暴躁小老闆車主,假設後者出險概率是前者的3倍,那麼完全可以定3倍於前者的價格(商業部分)。對於保險公司,前者才是優質客戶,後者做了生意也是賠錢貨,不如趕到競爭對手那裡去。 貸款。現在各種小額貸款、消費貸款、供應鏈金融,都是在吃4大行懶得吃的散客市場,之所以他們懶得吃,就是怕麻煩。最麻煩的就是授信環節,對於一個沒有固定資產等擔保物的客戶,能授信多少額度是個問題。淘寶能做小微是因為商家的流水在他們手裡,白領的消費貸敢做是因為有穩定的現金流收入。但除了淘寶可以做到比較准確的模型,其他的業務都非常的粗放,基本每個領域都是根據幾條死規則來做業務。這意味著這個市場還有很大的潛力可以挖掘,比如一個小老闆,其實風險不大,他需要100w周轉,但你沒把握估算他的風險,只敢貸50w出去,就少賺了那50w的利息。
⑸ 大數據分析界的「神獸」Apache Kylin有多牛
1.Apache Kylin是什麼?
在現在的大數據時代,越來越多的企業開始使用Hadoop管理數據,但是現有的業務分析工具(如Tableau,Microstrategy等)
往往存在很大的局限,如難以水平擴展、無法處理超大規模數據、缺少對Hadoop的支持;而利用Hadoop做數據分析依然存在諸多障礙,例如大多數分析
師只習慣使用SQL,Hadoop難以實現快速互動式查詢等等。神獸Apache Kylin就是為了解決這些問題而設計的。
Apache Kylin,中文名麒(shen)麟(shou) 是Hadoop動物園的重要成員。Apache
Kylin是一個開源的分布式分析引擎,最初由eBay開發貢獻至開源社區。它提供Hadoop之上的SQL查詢介面及多維分析(OLAP)能力以支持大
規模數據,能夠處理TB乃至PB級別的分析任務,能夠在亞秒級查詢巨大的Hive表,並支持高並發。
Apache
Kylin於2014年10月在github開源,並很快在2014年11月加入Apache孵化器,於2015年11月正式畢業成為Apache頂級項
目,也成為首個完全由中國團隊設計開發的Apache頂級項目。於2016年3月,Apache
Kylin核心開發成員創建了Kyligence公司,力求更好地推動項目和社區的快速發展。
Kyligence是一家專注於大數據分析領域創新的數據科技公司,提供基於Apache
Kylin的企業級智能分析平台及產品,以及可靠、專業、源碼級的商業化支持;並推出Apache Kylin開發者培訓,頒發全球唯一的Apache
Kylin開發者認證證書。
2.Kylin的基本原理和架構
下面開始聊一聊Kylin的基本原理和架構。簡單來說,Kylin的核心思想是預計算,即對多維分析可能用到的度量進行預計算,將計算好的結果保
存成Cube,供查詢時直接訪問。把高復雜度的聚合運算、多表連接等操作轉換成對預計算結果的查詢,這決定了Kylin能夠擁有很好的快速查詢和高並發能
力。
上圖所示就是一個Cube的例子,假設我們有4個dimension,這個Cube中每個節點(稱作Cuboid)都是這4個dimension
的不同組合,每個組合定義了一組分析的dimension(如group
by),measure的聚合結果就保存在這每個Cuboid上。查詢時根據SQL找到對應的Cuboid,讀取measure的值,即可返回。
為了更好的適應大數據環境,Kylin從數據倉庫中最常用的Hive中讀取源數據,使用
MapRece作為Cube構建的引擎,並把預計算結果保存在HBase中,對外暴露Rest
API/JDBC/ODBC的查詢介面。因為Kylin支持標準的ANSI
SQL,所以可以和常用分析工具(如Tableau、Excel等)進行無縫對接。下面是Kylin的架構圖。
說到Cube的構建,Kylin提供了一個稱作Layer Cubing的演算法。簡單來說,就是按照dimension數量從大到小的順序,從Base
Cuboid開始,依次基於上一層Cuboid的結果進行再聚合。每一層的計算都是一個單獨的Map Rece任務。如下圖所示。
MapRece的計算結果最終保存到HBase中,HBase中每行記錄的Rowkey由dimension組成,measure會保存在
column
family中。為了減小存儲代價,這里會對dimension和measure進行編碼。查詢階段,利用HBase列存儲的特性就可以保證Kylin有
良好的快速響應和高並發。
有了這些預計算的結果,當收到用戶的SQL請求,Kylin會對SQL做查詢計劃,並把本該進行的Join、Sum、Count Distinct等操作改寫成Cube的查詢操作。
Kylin提供了一個原生的Web界面,在這里,用戶可以方便的創建和設置Cube、管控Cube構建進度,並提供SQL查詢和基本的結果可視化。
根據公開數據顯示,Kylin的查詢性能不只是針對個別SQL,而是對上萬種SQL 的平均表現,生產環境下90%ile查詢能夠在在3s內返回。在上個月舉辦的Apache Kylin
Meetup中,來自美團、京東、網路等互聯網公司分享了他們的使用情況。例如,在京東雲海的案例中,單個Cube最大有8個維度,最大數據條數4億,最
大存儲空間800G,30個Cube共占存儲空間4T左右。查詢性能上,當QPS在50左右,所有查詢平均在200ms以內,當QPS在200左右,平均
響應時間在1s以內。
北京移動也在meetup上展示了Kylin在電信運營商的應用案例,從數據上看,Kylin能夠在比Hive/SparkSQL在更弱的硬體配置下獲得更好的查詢性能。 目前,有越來越多的國內外公司將Kylin作為大數據生產環境中的重要組件,如ebay、銀聯、網路、中國移動等。大家如果想了解更多社區的案例和動態,可以登錄Apache Kylin官網或Kyligence博客進行查看。
3.Kylin的最新特性
Kylin的最新版本1.5.x引入了不少讓人期待的新功能,可擴展架構將Kylin的三大依賴(數據源、Cube引擎、存儲引
擎)徹底解耦。Kylin將不再直接依賴於Hadoop/HBase/Hive,而是把Kylin作為一個可擴展的平台暴露抽象介面,具體的實現以插件的
方式指定所用的數據源、引擎和存儲。
開發者和用戶可以通過定製開發,將Kylin接入除Hadoop/HBase/Hive以外的大數據系統,比如用Kafka代替Hive作數據源,用
Spark代替MapRece做計算引擎,用Cassandra代替HBase做存儲,都將變得更為簡單。這也保證了Kylin可以隨平台技術一起演
進,緊跟技術潮流。
在Kylin
1.5.x中還對HBase存儲結構進行了調整,將大的Cuboid分片存儲,將線性掃描改良為並行掃描。基於上萬查詢進行了測試對比結果顯示,分片的存
儲結構能夠極大提速原本較慢的查詢5-10倍,但對原本較快的查詢提速不明顯,綜合起來平均提速為2倍左右。
除此之外,1.5.x還引入了Fast
cubing演算法,利用Mapper端計算先完成大部分聚合,再將聚合後的結果交給Recer,從而降低對網路瓶頸的壓力。對500多個Cube任務
的實驗顯示,引入Fast cubing後,總體的Cube構建任務提速1.5倍。
目前,社區正在著手准備Apache Kylin 1.5.2版本的發布,目前正處於Apache Mailing list投票階段,預計將會在本周在Kylin官網發布正式下載。
在本次的1.5.2版本中,Kylin帶來了總計
36個缺陷修復、33個功能改進、6個新功能。一些主要的功能改進包括對HyperLogLog計算效率的提升、在Cube構建時對Convert
data to hfile步驟的提速、UI上對功能提示的體驗優化、支持hive view作為lookup表等等。
另一個新消息是Kylin將支持MapR和CDH的Hadoop發行版,具體信息可見KYLIN-1515和KYLIN-1672。相應的測試版本是MapR5.1和CDH5.7。
UI上提供了一個重要更新,即允許用戶在Cube級別進行自定義配置,以覆蓋kylin.properties中的全局配置。如在cube中定義kylin.hbase.region.count.max 可以設置該cube在hbase中region切分的最大數量。
另
一個重要的功能是Diagnosis。用戶經常會遇到一些棘手的問題,例如Cube構建任務失敗、SQL查詢失敗,或Cube構建時間過長、SQL查詢時
間過長等。但由於運維人員對Kylin系統了解不深,很難快速定位到root cause所在地。我們在mailing
list里也經常看到很多用戶求助,由於不能提供足夠充分的信息,社區也很難給出一針見血的建議。
當用戶遇到查詢、Cube/Model管理的問題,單擊System頁面的Diagnosis按鈕,系統會自動抓取當前Project相關的信息並打包成
zip文件下載到用戶本地。這個包會包含相關的Metadata、日誌、HBase配置等。當用戶需要在mailing
list求助,也可以附上這個包。
⑹ 大數據量更新
已經建立來唯一索引了,多個進程是沒有源問題的。伺服器也是有交換量的。你可以在伺服器上設置一下網路交換量,讓更多的系統資源參與數據交換。然後進程數也不是越多越好,開太多了伺服器拖不動反而慢。我感覺2~4個是最快的。