面對海量各種來源的數據,如何對這些零散的數據進行有效的分析,提取有價值的信息一(yī)直是大數據領域研究的熱點問題。
大數據分析處理平台就(jiù)是整合當前主流的各種具有不同側重點的大數據處理分析框架和工(gōng)具,實現對數據的挖掘和分析,一(yī)個(gè)大數據分析平台涉及到(dào)的組件(jiàn)衆多(duō),如何将其有機(jī)地結合起來,完成海量數據的挖掘是一(yī)項複雜(zá)的工(gōng)作。在搭建大數據分析平台之前,要先明确業(yè)務需求場景以及用戶的需求,通(tōng)過大數據分析平台,想要得到(dào)哪些有價值的信息,需要接入的數據有哪些,明确基于場景業(yè)務需求的大數據平台要具備的基本的功能(néng),來決定平台搭建過程中使用的大數據處理工(gōng)具和框架。
(1)操作系統的選擇操作系統一(yī)般使用開(kāi)源版的RedHat、Centos或者Debian作為(wèi)底層的構建平台,要根據大數據平台所要搭建的數據分析工(gōng)具可以支持的系統,正确的選擇操作系統的版本。
(2)搭建Hadoop集群Hadoop作為(wèi)一(yī)個(gè)開(kāi)發和運行處理大規模數據的軟件(jiàn)平台,實現了在大量的廉價計算(suàn)機(jī)組成的集群中對海量數據進行分布式計算(suàn)。Hadoop框架中最核心的設計是HDFS和MapReduce,HDFS是一(yī)個(gè)高(gāo)度容錯(cuò)性的系統,适合部署在廉價的機(jī)器(qì)上(shàng),能(néng)夠提供高(gāo)吞吐量的數據訪問,适用于那些有著(zhe)超大數據集的應用程序;MapReduce是一(yī)套可以從(cóng)海量的數據中提取數據最後返回結果集的編程模型。在生(shēng)産實踐應用中,Hadoop非常适合應用于大數據存儲和大數據的分析應用,适合服務于幾千台到(dào)幾萬台大的服務器(qì)的集群運行,支持PB級别的存儲容量。Hadoop家族還(hái)包含各種開(kāi)源組件(jiàn),比如Yarn,Zookeeper,Hbase,Hive,Sqoop,Impala,Spark等。使用開(kāi)源組件(jiàn)的優勢顯而易見(jiàn),活躍的社區會(huì)不斷的叠代更新組件(jiàn)版本,使用的人也會(huì)很多(duō),遇到(dào)問題會(huì)比較容易解決,同時代碼開(kāi)源,高(gāo)水(shuǐ)平的數據開(kāi)發工(gōng)程師(shī)可結合自(zì)身項目的需求對代碼進行修改,以更好的為(wèi)項目提供服務。
(3)選擇數據接入和預處理工(gōng)具面對各種來源的數據,數據接入就(jiù)是将這些零散的數據整合在一(yī)起,綜合起來進行分析。數據接入主要包括文件(jiàn)日志(zhì)的接入、數據庫日志(zhì)的接入、關系型數據庫的接入和應用程序等的接入,數據接入常用的工(gōng)具有Flume,Logstash,NDC(網易數據運河系統),sqoop等。對于實時性要求比較高(gāo)的業(yè)務場景,比如對存在于社交網站、新聞等的數據信息流需要進行快速的處理反饋,那麽數據的接入可以使用開(kāi)源的Strom,Spark streaming等。當需要使用上(shàng)遊模塊的數據進行計算(suàn)、統計和分析的時候,就(jiù)需要用到(dào)分布式的消息系統,比如基于發布/訂閱的消息系統kafka。還(hái)可以使用分布式應用程序協調服務Zookeeper來提供數據同步服務,更好的保證數據的可靠和一(yī)緻性。數據預處理是在海量的數據中提取出可用特征,建立寬表,創建數據倉庫,會(huì)使用到(dào)HiveSQL,SparkSQL和Impala等工(gōng)具。随著(zhe)業(yè)務量的增多(duō),需要進行訓練和清洗的數據也會(huì)變得越來越複雜(zá),可以使用azkaban或者oozie作為(wèi)工(gōng)作流調度引擎,用來解決有多(duō)個(gè)hadoop或者spark等計算(suàn)任務之間的依賴關系問題。
(4)數據存儲除了Hadoop中已廣泛應用于數據存儲的HDFS,常用的還(hái)有分布式、面向列的開(kāi)源數據庫Hbase,HBase是一(yī)種key/value系統,部署在HDFS上(shàng),與Hadoop一(yī)樣,HBase的目标主要是依賴橫向擴展,通(tōng)過不斷的增加廉價的商用服務器(qì),增加計算(suàn)和存儲能(néng)力。同時hadoop的資源管理器(qì)Yarn,可以為(wèi)上(shàng)層應用提供統一(yī)的資源管理和調度,為(wèi)集群在利用率、資源統一(yī)等方面帶來巨大的好處。Kudu是一(yī)個(gè)圍繞Hadoop生(shēng)态圈建立的存儲引擎,Kudu擁有和Hadoop生(shēng)态圈共同的設計理念,可以運行在普通(tōng)的服務器(qì)上(shàng),作為(wèi)一(yī)個(gè)開(kāi)源的存儲引擎,可以同時提供低(dī)延遲的随機(jī)讀(dú)寫和高(gāo)效的數據分析能(néng)力。Redis是一(yī)種速度非常快的非關系型數據庫,可以将存儲在内存中的鍵值對數據持久化到(dào)硬盤中,可以存儲鍵與5種不同類型的值之間的映射。
(5)選擇數據挖掘工(gōng)具Hive可以将結構化的數據映射為(wèi)一(yī)張數據庫表,并提供HQL的查詢功能(néng),它是建立在Hadoop之上(shàng)的數據倉庫基礎架構,是為(wèi)了減少MapReduce編寫工(gōng)作的批處理系統,它的出現可以讓那些精通(tōng)SQL技(jì)能(néng)、但是不熟悉MapReduce、編程能(néng)力較弱和不擅長(cháng)Java的用戶能(néng)夠在HDFS大規模數據集上(shàng)很好的利用SQL語言查詢、彙總、分析數據。Impala是對Hive的一(yī)個(gè)補充,可以實現高(gāo)效的SQL查詢,但是Impala将整個(gè)查詢過程分成了一(yī)個(gè)執行計劃樹,而不是一(yī)連串的MapReduce任務,相(xiàng)比Hive有更好的并發性和避免了不必要的中間sort和shuffle。Spark可以将Job中間輸出結果保存在内存中,不需要讀(dú)取HDFS,Spark啓用了内存分布數據集,除了能(néng)夠提供交互式查詢外,它還(hái)可以優化叠代工(gōng)作負載。Solr是一(yī)個(gè)運行在Servlet容器(qì)的獨立的企業(yè)級搜索應用的全文搜索服務器(qì),用戶可以通(tōng)過http請求,向搜索引擎服務器(qì)提交一(yī)定格式的XML,生(shēng)成索引,或者通(tōng)過HTTP GET操作提出查找請求,并得到(dào)XML格式的返回結果。還(hái)可以對數據進行建模分析,會(huì)用到(dào)機(jī)器(qì)學習相(xiàng)關的知識,常用的機(jī)器(qì)學習算(suàn)法,比如貝葉斯、邏輯回歸、決策樹、神經網絡、協同過濾等。
(6)數據的可視化以及輸出API對于處理得到(dào)的數據可以對接主流的BI系統,比如國(guó)外的Tableau、Qlikview、PowrerBI等,國(guó)内的SmallBI和新興的網易有數(可免費(fèi)試用)等,将結果進行可視化,用于決策分析;或者回流到(dào)線上(shàng),支持線上(shàng)業(yè)務的發展。
成熟的搭建一(yī)套大數據分析平台不是一(yī)件(jiàn)簡單的事(shì)情,本身就(jiù)是一(yī)項複雜(zá)的工(gōng)作,在這過程中需要考慮的因素有很多(duō),比如:穩定性,可以通(tōng)過多(duō)台機(jī)器(qì)做數據和程序運行的備份,但服務器(qì)的質量和預算(suàn)成本相(xiàng)應的會(huì)限制平台的穩定性;可擴展性:大數據平台部署在多(duō)台機(jī)器(qì)上(shàng),如何在其基礎上(shàng)擴充新的機(jī)器(qì)是實際應用中經常會(huì)遇到(dào)的問題;安全性:保障數據安全是大數據平台不可忽視的問題,在海量數據的處理過程中,如何防止數據的丢失和洩漏也一(yī)直是大數據安全領域的研究熱點。