01先來談談企業(yè)搭建大數(shù)據(jù)分析平臺的背景
1、搭建大數(shù)據(jù)平臺離不開BI。在大數(shù)據(jù)之前,BI就已經(jīng)存在很久了,簡單把大數(shù)據(jù)等同于BI,明顯是不恰當?shù)?。但兩者又是緊密關聯(lián)的,相輔相成的。
BI是達成業(yè)務管理的應用工具,沒有BI,大數(shù)據(jù)就沒有了價值轉化的工具,就無法把數(shù)據(jù)的價值呈現(xiàn)給用戶,也就無法有效地支撐企業(yè)經(jīng)營管理決策;大數(shù)據(jù)則是基礎,沒有大數(shù)據(jù),BI就失去了存在的基礎,沒有辦法快速、實時、高效地處理數(shù)據(jù),支撐應用。所以,數(shù)據(jù)的價值發(fā)揮,大數(shù)據(jù)平臺的建設,必然是囊括了大數(shù)據(jù)處理與BI應用分析建設的。
2、大數(shù)據(jù)擁有價值。來看看數(shù)據(jù)使用金字塔模型,從數(shù)據(jù)的使用角度來看,數(shù)據(jù)基本有以下使用方式:
自上而下,可以看到,對數(shù)據(jù)的要求是不一樣的:
- 數(shù)據(jù)量越來越大,維度越來越多
- 交互難度越來越大
- 技術難度越來越大
- 以人為主,逐步向機器為主
- 用戶專業(yè)程度逐步提升,門檻越來越高
企業(yè)對數(shù)據(jù)、效率要求的逐步提高,也給大數(shù)據(jù)提供了展現(xiàn)能力的平臺。企業(yè)構建大數(shù)據(jù)平臺,歸根到底是構建企業(yè)的數(shù)據(jù)資產運營中心,發(fā)揮數(shù)據(jù)的價值,支撐企業(yè)的發(fā)展。
整體方案思路如下:
建設企業(yè)的基礎數(shù)據(jù)中心,構建企業(yè)統(tǒng)一的數(shù)據(jù)存儲體系,統(tǒng)一進行數(shù)據(jù)建模,為數(shù)據(jù)的價值呈現(xiàn)奠定基礎。同時數(shù)據(jù)處理能力下沉,建設集中的數(shù)據(jù)處理中心,提供強大的數(shù)據(jù)處理能力;通過統(tǒng)一的數(shù)據(jù)管理監(jiān)控體系,保障系統(tǒng)的穩(wěn)定運行。有了數(shù)據(jù)基礎,構建統(tǒng)一的BI應用中心,滿足業(yè)務需求,體現(xiàn)數(shù)據(jù)價值。
提到大數(shù)據(jù)就會提到hadoop。大數(shù)據(jù)并不等同于hadoop,但hadoop的確是最熱門的大數(shù)據(jù)技術。下面以最常用的混搭架構,來看一下大數(shù)據(jù)平臺可以怎么來搭建,支撐企業(yè)應用:
通過Kafka作為統(tǒng)一采集平臺的消息管理層,靈活的對接、適配各種數(shù)據(jù)源采集(如集成flume),提供靈活、可配置的數(shù)據(jù)采集能力。
利用spark和hadoop技術,構建大數(shù)據(jù)平臺最為核心的基礎數(shù)據(jù)的存儲、處理能力中心,提供強大的數(shù)據(jù)處理能力,滿足數(shù)據(jù)的交互需求。同時通過sparkstreaming,可以有效滿足企業(yè)實時數(shù)據(jù)的要求,構建企業(yè)發(fā)展的實時指標體系。
同時為了更好的滿足的數(shù)據(jù)獲取需求,通過RDBMS,提供企業(yè)高度匯總的統(tǒng)計數(shù)據(jù),滿足企業(yè)常規(guī)的統(tǒng)計報表需求,降低使用門檻。對大數(shù)據(jù)明細查詢需求,則通過構建HBase集群,提供大數(shù)據(jù)快速查詢能力,滿足對大數(shù)據(jù)的查詢獲取需求。
02如何整合大數(shù)據(jù)處理分析框架和工具?
面對海量的各種來源的數(shù)據(jù),如何對這些零散的數(shù)據(jù)進行有效的分析,得到有價值的信息一直是大數(shù)據(jù)領域研究的熱點問題。
大數(shù)據(jù)分析處理平臺就是整合當前主流的各種具有不同側重點的大數(shù)據(jù)處理分析框架和工具,實現(xiàn)對數(shù)據(jù)的挖掘和分析,一個大數(shù)據(jù)分析平臺涉及到的組件眾多,如何將其有機地結合起來,完成海量數(shù)據(jù)的挖掘是一項復雜的工作。
在搭建大數(shù)據(jù)分析平臺之前,要先明確業(yè)務需求場景以及用戶的需求,通過大數(shù)據(jù)分析平臺,想要得到哪些有價值的信息,需要接入的數(shù)據(jù)有哪些,明確基于場景業(yè)務需求的大數(shù)據(jù)平臺要具備的基本的功能,來決定平臺搭建過程中使用的大數(shù)據(jù)處理工具和框架。
(1)操作系統(tǒng)的選擇
操作系統(tǒng)一般使用開源版的RedHat、Centos或者Debian作為底層的構建平臺,要根據(jù)大數(shù)據(jù)平臺所要搭建的數(shù)據(jù)分析工具可以支持的系統(tǒng),正確的選擇操作系統(tǒng)的版本。
(2)搭建Hadoop集群Hadoop作為一個開發(fā)和運行處理大規(guī)模數(shù)據(jù)的軟件平臺,實現(xiàn)了在大量的廉價計算機組成的集群中對海量數(shù)據(jù)進行分布式計算。Hadoop框架中最核心的設計是HDFS和MapReduce:
在生產實踐應用中,Hadoop非常適合應用于大數(shù)據(jù)存儲和大數(shù)據(jù)的分析應用,適合服務于幾千臺到幾萬臺大的服務器的集群運行,支持PB級別的存儲容量。
Hadoop家族還包含各種開源組件,比如Yarn,Zookeeper,Hbase,Hive,Sqoop,Impala,Spark等。使用開源組件的優(yōu)勢顯而易見,活躍的社區(qū)會不斷的迭代更新組件版本,使用的人也會很多,遇到問題會比較容易解決,同時代碼開源,高水平的數(shù)據(jù)開發(fā)工程師可結合自身項目的需求對代碼進行修改,以更好的為項目提供服務。
(3)選擇數(shù)據(jù)接入和預處理工具面對各種來源的數(shù)據(jù),數(shù)據(jù)接入就是將這些零散的數(shù)據(jù)整合在一起,綜合起來進行分析。數(shù)據(jù)接入主要包括文件日志的接入、數(shù)據(jù)庫日志的接入、關系型數(shù)據(jù)庫的接入和應用程序等的接入,數(shù)據(jù)接入常用的工具有Flume,Logstash,NDC,sqoop等。
對于實時性要求比較高的業(yè)務場景,比如對存在于社交網(wǎng)站、新聞等的數(shù)據(jù)信息流需要進行快速的處理反饋,那么數(shù)據(jù)的接入可以使用開源的Strom,Spark streaming等。
當需要使用上游模塊的數(shù)據(jù)進行計算、統(tǒng)計和分析的時候,就需要用到分布式的消息系統(tǒng),比如基于發(fā)布/訂閱的消息系統(tǒng)kafka。還可以使用分布式應用程序協(xié)調服務Zookeeper來提供數(shù)據(jù)同步服務,更好的保證數(shù)據(jù)的可靠和一致性。
數(shù)據(jù)預處理是在海量的數(shù)據(jù)中提取出可用特征,建立寬表,創(chuàng)建數(shù)據(jù)倉庫,會使用到HiveSQL,SparkSQL和Impala等工具。隨著業(yè)務量的增多,需要進行訓練和清洗的數(shù)據(jù)也會變得越來越復雜,可以使用azkaban或者oozie作為工作流調度引擎,用來解決有多個hadoop或者spark等計算任務之間的依賴關系問題。
(4)數(shù)據(jù)存儲除了Hadoop中已廣泛應用于數(shù)據(jù)存儲的HDFS,常用的還有分布式、面向列的開源數(shù)據(jù)庫Hbase,HBase是一種key/value系統(tǒng),部署在HDFS上,與Hadoop一樣,HBase的目標主要是依賴橫向擴展,通過不斷的增加廉價的商用服務器,增加計算和存儲能力。同時hadoop的資源管理器Yarn,可以為上層應用提供統(tǒng)一的資源管理和調度,為集群在利用率、資源統(tǒng)一等方面帶來巨大的好處。
Kudu是一個圍繞Hadoop生態(tài)圈建立的存儲引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,可以運行在普通的服務器上,作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數(shù)據(jù)分析能力。Redis是一種速度非??斓姆顷P系型數(shù)據(jù)庫,可以將存儲在內存中的鍵值對數(shù)據(jù)持久化到硬盤中,可以存儲鍵與5種不同類型的值之間的映射。
(5)選擇數(shù)據(jù)挖掘工具Hive可以將結構化的數(shù)據(jù)映射為一張數(shù)據(jù)庫表,并提供HQL的查詢功能,它是建立在Hadoop之上的數(shù)據(jù)倉庫基礎架構,是為了減少MapReduce編寫工作的批處理系統(tǒng),它的出現(xiàn)可以讓那些精通SQL技能、但是不熟悉MapReduce、編程能力較弱和不擅長Java的用戶能夠在HDFS大規(guī)模數(shù)據(jù)集上很好的利用SQL語言查詢、匯總、分析數(shù)據(jù)。
Impala是對Hive的一個補充,可以實現(xiàn)高效的SQL查詢,但是Impala將整個查詢過程分成了一個執(zhí)行計劃樹,而不是一連串的MapReduce任務,相比Hive有更好的并發(fā)性和避免了不必要的中間sort和shuffle。
Spark可以將Job中間輸出結果保存在內存中,不需要讀取HDFS,Spark啟用了內存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載。
Solr是一個運行在Servlet容器的獨立的企業(yè)級搜索應用的全文搜索服務器,用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML,生成索引,或者通過HTTP GET操作提出查找請求,并得到XML格式的返回結果。
還可以對數(shù)據(jù)進行建模分析,會用到機器學習相關的知識,常用的機器學習算法,比如貝葉斯、邏輯回歸、決策樹、神經(jīng)網(wǎng)絡、協(xié)同過濾等。
(6)數(shù)據(jù)的可視化以及輸出API
對于處理得到的數(shù)據(jù)可以對接主流的BI系統(tǒng),比如國外的Tableau、Qlikview、PowrerBI等,國內的帆軟、SmartBI、永洪等,將結果進行可視化,用于決策分析?;蛘呋亓鞯骄€上,支持線上業(yè)務的發(fā)展。
成熟的搭建一套大數(shù)據(jù)分析平臺不是一件簡單的事情,本身就是一項復雜的工作,在這過程中需要考慮的因素有很多,比如:
03大數(shù)據(jù)分析平臺實現(xiàn)技術
1、硬件平臺
大數(shù)據(jù)分析平臺需要進行 PB 級數(shù)據(jù)的讀取、寫入,需要進行數(shù)據(jù)挖掘模型的大規(guī)模運算,需要進行預測結果的發(fā)布,對底層基礎硬件的磁盤 IO 和運算速度要求很高,同時需要滿足分布式、動態(tài)擴展的要求,因此采用配置為 2 路 8 核CPU、128GB 內存、千兆網(wǎng)卡的x86架構 PC Server 服務器。
2、平臺軟件操作系統(tǒng)軟件采用 Red Hat,數(shù)據(jù)采集采用 Flume-NG, 海量數(shù)據(jù)存儲及分布式計算采用Hadoop,數(shù)據(jù)清洗采用 Hive,數(shù)據(jù)挖掘引擎采用 Spark R,預測結果保存在 HBase 中:
3、大數(shù)據(jù)挖掘模型開發(fā)
04如何選擇大數(shù)據(jù)平臺?
如果用開源產品搭建大數(shù)據(jù)平臺,還是很繁瑣的,需要對細節(jié)比較了解。可以選擇商業(yè)版的hadoop平臺,支持可視化一鍵部署。
有的大數(shù)據(jù)平臺廠商利用的docker技術,直接就秒級創(chuàng)建一個大數(shù)據(jù)分布式平臺
05搭建大數(shù)據(jù)平臺需要準備什么?
在具體回答之前,需要搞清楚以下幾個問題,搞清楚了,其實問題的答案也就有了:
是從個人學習成長的角度想搭建平臺自學?還是現(xiàn)在的公司需要大數(shù)據(jù)技術進行分析?
(1)如果是從個人學習成長的角度,建議直接按照Hadoop或者Spark的官網(wǎng)教程安裝即可,建議看官網(wǎng)(英文),在大數(shù)據(jù)技術領域,英語的掌握是非常重要的,因為涉及到組件選型、日后的安裝、部署、運維,所有的任務運行信息、報錯信息都是英文的,包括遇到問題的解答,所以還是非常重要的。
(2)如果是公司需要進行大數(shù)據(jù)分析,那么還要研究以下幾個問題:
這里舉一個典型的場景:
公司之前采用Oracle或MySQL搭建的業(yè)務數(shù)據(jù)庫,而且有簡單的數(shù)據(jù)分析,或者可能采購了BI系統(tǒng),就是直接用業(yè)務系統(tǒng)數(shù)據(jù)庫進行支持的,現(xiàn)在隨著數(shù)據(jù)量越來越大,那么就需要采用大數(shù)據(jù)技術進行擴容。
搞清楚需求之后,按照以下的步驟進行:
1、整體方案設計
整體方案設計時需要考慮的因素:
2、組件選型
架構設計完成后就需要組件選型了,這時候最好是比較資深的架構師參與設計,選型包括:
3、安裝部署
選型完成后,就可以進行安裝部署了,這部分其實是最簡單的,直接按照每個組件的部署要求安裝即可。
4、另一種選擇:采用商用軟件
如果是企業(yè)需要搭建大數(shù)據(jù)平臺,那么還有一種選擇是直接采用商用的數(shù)據(jù)平臺。市面上有很多成熟的商用大數(shù)據(jù)平臺,Cloudera、星環(huán)、華為、亞信等等,都有對應的產品線。
06一般的大數(shù)據(jù)平臺從平臺搭建到數(shù)據(jù)分析大概包括以下幾個步驟:
1、Linux系統(tǒng)安裝
一般使用開源版的Redhat系統(tǒng),CentOS作為底層平臺。為了提供穩(wěn)定的硬件基礎,在給硬盤做RAID和掛載數(shù)據(jù)存儲節(jié)點的時,需要按情況配置。比如,可以選擇給HDFS的namenode做RAID2以提高其穩(wěn)定性,將數(shù)據(jù)存儲與操作系統(tǒng)分別放置在不同硬盤上,以確保操作系統(tǒng)的正常運行。
2、分布式計算平臺/組件安裝當前分布式系統(tǒng)的大多使用的是Hadoop系列開源系統(tǒng)。Hadoop的核心是HDFS,一個分布式的文件系統(tǒng)。在其基礎上常用的組件有Yarn、Zookeeper、Hive、Hbase、Sqoop、Impala、ElasticSearch、Spark等。
使用開源組件的優(yōu)點:
1)使用者眾多,很多bug可以在網(wǎng)上找的答案(這往往是開發(fā)中最耗時的地方);
2)開源組件一般免費,學習和維護相對方便;
3)開源組件一般會持續(xù)更新;
4)因為代碼開源,如果出現(xiàn)bug可自由對源碼作修改維護。
常用的分布式數(shù)據(jù)數(shù)據(jù)倉庫有Hive、Hbase,其中Hive可以用SQL查詢,Hbase可以快速讀取行。
外部數(shù)據(jù)庫導入導出需要用到Sqoop。Sqoop將數(shù)據(jù)從Oracle、MySQL等傳統(tǒng)數(shù)據(jù)庫導入Hive或Hbase。
Zookeeper是提供數(shù)據(jù)同步服務, Impala是對hive的一個補充,可以實現(xiàn)高效的SQL查詢
3、數(shù)據(jù)導入前面提到,數(shù)據(jù)導入的工具是Sqoop。它可以將數(shù)據(jù)從文件或者傳統(tǒng)數(shù)據(jù)庫導入到分布式平臺。
4、數(shù)據(jù)分析數(shù)據(jù)分析一般包括兩個階段:數(shù)據(jù)預處理和數(shù)據(jù)建模分析。
5、結果可視化及輸出API可視化一般式對結果或部分原始數(shù)據(jù)做展示。一般有兩種情況,行數(shù)據(jù)展示,和列查找展示。
-
- HDFS是一個高度容錯性的系統(tǒng),適合部署在廉價的機器上,能夠提供高吞吐量的數(shù)據(jù)訪問,適用于那些有著超大數(shù)據(jù)集的應用程序
- MapReduce是一套可以從海量的數(shù)據(jù)中提取數(shù)據(jù)最后返回結果集的編程模型。
-
- 可擴展性:大數(shù)據(jù)平臺部署在多臺機器上,如何在其基礎上擴充新的機器是實際應用中經(jīng)常會遇到的問題;
- 安全性:保障數(shù)據(jù)安全是大數(shù)據(jù)平臺不可忽視的問題,在海量數(shù)據(jù)的處理過程中,如何防止數(shù)據(jù)的丟失和泄漏一直是大數(shù)據(jù)安全領域的研究熱點。
-
- 采用 Hadoop 構建 PB 級大數(shù)據(jù)平臺,提供海量數(shù)據(jù)存儲和分布式計算。
- 采用 Hive 做為數(shù)據(jù)清洗引擎,提供 PB級數(shù)據(jù)預處理、加工、整合服務。
- 采用 Spark R 組件,Spark R 提供了 Spark中彈性分布式數(shù)據(jù)集的 API,用戶可以在集群上通過 R shell 交互性的運行 job。數(shù)據(jù)挖掘模型以 Spark On Yarn 的 yarn-cluster 方式構建大數(shù)據(jù)分析引擎。
- 采用 HBase 技術可以提供海量數(shù)據(jù)的高效發(fā)布。
-
- 數(shù)據(jù)清洗模塊:通過編寫 HQL 腳本對數(shù)據(jù)進行清洗、轉換,形成特征寬表。
- 數(shù)據(jù)挖掘模塊:基于特征寬表的數(shù)據(jù)建模采用 Spark R, 調用聚類、分類等算法,進行模型開發(fā)、模型評估、模型應用。
- 分析結果發(fā)布:模型應用的結果集存儲在HBase 中,首先需要在 HBase 中新建存儲結果集的 HBase 表,通過 Map Reduce 生成 HFile文件,然后通過 Bulk Load 方式入庫。數(shù)據(jù)的調用通過 HBase API 實現(xiàn),數(shù)據(jù)的展現(xiàn)通過ECharts 技術實現(xiàn)。
-
- 要解決什么業(yè)務問題?
- 需要什么樣的分析?
- 數(shù)據(jù)量有多少?
- 是否有實時分析的需求?
- 是否有BI報表的需求?
-
- 數(shù)據(jù)存儲在哪里:存儲在MySQL中?Oracle中?或其他數(shù)據(jù)庫中?數(shù)據(jù)如何從現(xiàn)在的存儲系統(tǒng)進入到大數(shù)據(jù)平臺中?如何將結果數(shù)據(jù)寫出到其他存儲系統(tǒng)中?
- 分析主題是什么:只有幾個簡單指標?還是說有很多統(tǒng)計指標,需要專門的人員去梳理,分組,并進行產品設計
- 是否需要搭建整體數(shù)倉?
- 是否需要BI報表:業(yè)務人員有無操作BI的能力,或團隊組成比較簡單,不需要前后端人員投入,使用BI比較方便
- 是否需要實時計算?
-
- 實時計算引擎:Storm、Flink、Samza、Spark Streaming……
- BI軟件:Tableau、QlikView、帆軟……
-
- 數(shù)據(jù)建模分析是針對預處理提取的特征/數(shù)據(jù)建模,得到想要的結果。如前面所提到的,這一塊最好用的是Spark。常用的機器學習算法,如樸素貝葉斯、邏輯回歸、決策樹、神經(jīng)網(wǎng)絡、TFIDF、協(xié)同過濾等,都已經(jīng)在ML lib里面,調用比較方便。
-