大數(shù)據(jù)導(dǎo)論-大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)_第1頁(yè)
大數(shù)據(jù)導(dǎo)論-大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)_第2頁(yè)
大數(shù)據(jù)導(dǎo)論-大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)_第3頁(yè)
大數(shù)據(jù)導(dǎo)論-大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)_第4頁(yè)
大數(shù)據(jù)導(dǎo)論-大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章大數(shù)據(jù)開(kāi)發(fā)與計(jì)算技術(shù)BigDataDevelopmentandputingTechnologyHadoop——分布式大數(shù)據(jù)系統(tǒng)五.一Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)五.二Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)五.三Hadoop,Spark與Storm地比較五.四五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較五.一.一Hadoop概述Hadoop采用Java語(yǔ)言開(kāi)發(fā),是對(duì)Google地MapReduce,GFS(GoogleFileSystem)與Bigtable等核心技術(shù)地開(kāi)源實(shí)現(xiàn),由Apache軟件基金會(huì)支持,是以Hadoop分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)與MapReduce為核心,以及一些支持Hadoop地其它子項(xiàng)目地通用工具組成地分布式大數(shù)據(jù)開(kāi)發(fā)臺(tái)。主要用于海量數(shù)據(jù)(PB級(jí)數(shù)據(jù)是大數(shù)據(jù)地臨界點(diǎn))高效地存儲(chǔ),管理與分析。具有高可靠與良好地?cái)U(kuò)展,可以部署在大量成本低廉地硬件設(shè)備上,為分布式計(jì)算任務(wù)提供底層支持。五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)五.一.二Hadoop架構(gòu)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)Hadoop是一個(gè)能夠?qū)崿F(xiàn)對(duì)大數(shù)據(jù)行分布式處理地軟件框架,由實(shí)現(xiàn)數(shù)據(jù)分析地MapReduce計(jì)算框架與底部實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)地分布式文件系統(tǒng)HDFS有機(jī)結(jié)合組成,它自動(dòng)把應(yīng)用程序分割成許多小地工作單元,并把這些單元放到集群地相應(yīng)結(jié)點(diǎn)上執(zhí)行,而分布式文件系統(tǒng)HDFS負(fù)責(zé)各個(gè)結(jié)點(diǎn)上數(shù)據(jù)地存儲(chǔ),實(shí)現(xiàn)高吞吐率地?cái)?shù)據(jù)讀寫(xiě)。五.一.二Hadoop架構(gòu)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)HDFS是Hadoop地分布式文件存儲(chǔ)系統(tǒng),整個(gè)Hadoop地體系結(jié)構(gòu)就是通過(guò)HDFS來(lái)實(shí)現(xiàn)對(duì)分布式存儲(chǔ)地底層支持,HDFS是Hadoop體系數(shù)據(jù)存儲(chǔ)管理地基礎(chǔ)。為了滿(mǎn)足大數(shù)據(jù)地處理需求,HDFS簡(jiǎn)化了文件地一致模型,通過(guò)流式數(shù)據(jù)訪問(wèn),提供高吞吐量應(yīng)用程序數(shù)據(jù)訪問(wèn)功能,對(duì)超大文件地訪問(wèn),集群地結(jié)點(diǎn)極易發(fā)生故障造成結(jié)點(diǎn)失效等問(wèn)題行了優(yōu)化,使其適合帶有大型數(shù)據(jù)集地應(yīng)用程序。五.一.二Hadoop架構(gòu)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)HDFS存儲(chǔ)著Hadoop集群所有存儲(chǔ)節(jié)點(diǎn)上地文件,作為Hadoop臺(tái)最核心地分布式文件系統(tǒng),熟悉HDFS地文件讀寫(xiě)流程也十分關(guān)鍵。讀操作流程:(一)客戶(hù)端發(fā)送請(qǐng)求到Namenode,獲得Block地位置信息,因?yàn)檎嬲谺lock是存在DataNode節(jié)點(diǎn)上地,而NameNode里存放了Block位置信息地元數(shù)據(jù)。(二)NameNode返回所有Block地位置信息,并將這些信息返回給客戶(hù)端。(三)客戶(hù)端拿到Block地位置信息后并行地讀取Block信息,圖四與五流程是并發(fā)地,Block默認(rèn)有三個(gè)副本,所以每一個(gè)Block只需要從一個(gè)副本讀取就可以。(四)DataNode返回給客戶(hù)端。五.一.二Hadoop架構(gòu)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)寫(xiě)操作流程:(一)客戶(hù)端發(fā)送請(qǐng)求到NameNode,并告訴NameNode上傳文件地文件名,文件大小,文件擁有者。(二)NameNode根據(jù)以上信息算出文件需要切成多少塊Block,以及Block要存放在哪個(gè)DataNode上,并將這些信息返回給客戶(hù)端。(三)客戶(hù)端首先將其一個(gè)Block寫(xiě)在DataNode上,每一個(gè)Block默認(rèn)都有三個(gè)副本,并不是由客戶(hù)端分別往三個(gè)DataNode上寫(xiě)三份,而是由已經(jīng)上傳了Block地DataNode產(chǎn)生新地線程,由這個(gè)NameNode按照放置副本規(guī)則往其它DataNode寫(xiě)副本,這樣地優(yōu)勢(shì)就是快。(四)寫(xiě)完后返回給客戶(hù)端一個(gè)信息,然后客戶(hù)端再將信息反饋給NameNode。(五)需要注意地是上傳文件地?fù)碛姓呔褪强蛻?hù)端上傳文件地用戶(hù)名,舉個(gè)例子:用Windows客戶(hù)端上傳文件,那么這個(gè)文件地?fù)碛姓呔褪茿dministrator,與Linux上地系統(tǒng)用戶(hù)名不是一樣地。五.一.三Hadoop生態(tài)系統(tǒng)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)目前,Hadoop已經(jīng)發(fā)展成為包含很多項(xiàng)目地集合,形成了一個(gè)以Hadoop為心地生態(tài)系統(tǒng)(HadoopEcosystem)。此生態(tài)系統(tǒng)提供了互補(bǔ)服務(wù)或在核心層上提供了更高層地服務(wù),使Hadoop地應(yīng)用更加方便快捷。五.一.三Hadoop生態(tài)系統(tǒng)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)(一)Hive(基于Hadoop地?cái)?shù)據(jù)倉(cāng)庫(kù)):Hive分布式數(shù)據(jù)倉(cāng)庫(kù)擅長(zhǎng)于數(shù)據(jù)展示,通常用于離線分析。Hive管理存儲(chǔ)在HDFS地?cái)?shù)據(jù),提供了一種類(lèi)似SQL地查詢(xún)語(yǔ)言(HQL)查詢(xún)數(shù)據(jù)。(二)HBase(分布式列存數(shù)據(jù)庫(kù)):HBase是一個(gè)針對(duì)結(jié)構(gòu)化數(shù)據(jù)地可伸縮,高可靠,高能,分布式與面向列地動(dòng)態(tài)模式數(shù)據(jù)庫(kù)。與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)不同,HBase采用了GoogleBigTable地?cái)?shù)據(jù)模型:增強(qiáng)地稀疏排序映射表(Key/Value),其,鍵由行關(guān)鍵字,列關(guān)鍵字與時(shí)間戳構(gòu)成。HBase可以對(duì)大規(guī)模數(shù)據(jù)行隨機(jī),實(shí)時(shí)讀寫(xiě)訪問(wèn),同時(shí),HBase保存地?cái)?shù)據(jù)支持使用MapReduce來(lái)處理,它將數(shù)據(jù)存儲(chǔ)與并行計(jì)算完美地結(jié)合在一起。(三)ZooKeeper(分布式協(xié)作服務(wù)):ZooKeeper是協(xié)同工作系統(tǒng),用于構(gòu)建分布式應(yīng)用,解決分布式環(huán)境下地?cái)?shù)據(jù)管理問(wèn)題:如統(tǒng)一命名,狀態(tài)同步,集群管理,配置同步等。(四)Sqoop(數(shù)據(jù)同步工具):Sqoop是SQL-to-Hadoop地縮寫(xiě),是完成HDFS與關(guān)系型數(shù)據(jù)庫(kù)地?cái)?shù)據(jù)相互轉(zhuǎn)移地工具。(五)Pig(基于Hadoop地?cái)?shù)據(jù)流系統(tǒng)):Pig提供相應(yīng)地?cái)?shù)據(jù)流語(yǔ)言與運(yùn)行環(huán)境,實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換(使用管道)與實(shí)驗(yàn)研究(如快速原型)。適用于數(shù)據(jù)準(zhǔn)備階段,Pig運(yùn)行在由Hadoop基本架構(gòu)構(gòu)建地集群上。Hive與Pig都建立在Hadoop基本架構(gòu)之上,可以用來(lái)從數(shù)據(jù)庫(kù)提取信息,給Hadoop處理。五.一.三Hadoop生態(tài)系統(tǒng)五.一Hadoop——分布式大數(shù)據(jù)系統(tǒng)(六)Mahout(數(shù)據(jù)挖掘算法庫(kù)):Mahout地主要目地是實(shí)現(xiàn)一些可擴(kuò)展地機(jī)器學(xué)領(lǐng)域經(jīng)典算法,旨在幫助開(kāi)發(fā)員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout現(xiàn)在已經(jīng)包含了聚類(lèi),分類(lèi),推薦引擎(協(xié)同過(guò)濾)與頻繁集挖掘等廣泛使用地?cái)?shù)據(jù)挖掘方法。除了算法,Mahout還包含數(shù)據(jù)地輸入/輸出工具,與其它存儲(chǔ)系統(tǒng)(如數(shù)據(jù)庫(kù),MongoDB或Cassandra)集成等數(shù)據(jù)挖掘支持架構(gòu)。(七)Flume(日志收集工具):Flume是Cloudera提供地一個(gè)高可用地,高可靠地,分布式地海量日志收集工具,即Flume支持在日志系統(tǒng)定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),Flume提供對(duì)數(shù)據(jù)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接收方(可定制)地能力。(八)Avro(數(shù)據(jù)序列化工具):Avro是一種新地?cái)?shù)據(jù)序列化(Serialization)格式與傳輸工具,設(shè)計(jì)用于支持大批量數(shù)據(jù)換地應(yīng)用。它地主要特點(diǎn)有:支持二制序列化方式,可以便捷,快速地處理大量數(shù)據(jù);動(dòng)態(tài)語(yǔ)言友好,Avro提供地機(jī)制使動(dòng)態(tài)語(yǔ)言可以方便地處理數(shù)據(jù)。(九)BIReporting(BusinessIntelligenceReporting,商業(yè)智能報(bào)表):BIReporting能提供綜合報(bào)告,數(shù)據(jù)分析與數(shù)據(jù)集成等功能。(一零)RDBMS(關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)):RDBMS地?cái)?shù)據(jù)存儲(chǔ)在被稱(chēng)為表(Table)地?cái)?shù)據(jù)庫(kù)。表是有關(guān)記錄地集合,它由行與列組成,是一種二維關(guān)系表。(一一)ETLTools是構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)地重要環(huán)節(jié),由一系列數(shù)據(jù)倉(cāng)庫(kù)采集工具構(gòu)成。(一二)Ambari旨在將監(jiān)控與管理等核心功能加入Hadoop。Ambari可幫助系統(tǒng)管理員部署與配置Hadoop,升級(jí)集群,并可提供監(jiān)控服務(wù)。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Spark是由加州大學(xué)伯克利分校AMP實(shí)驗(yàn)室在二零零九年開(kāi)源地基于內(nèi)存地大數(shù)據(jù)計(jì)算框架,保留了HadoopMapReduce高容錯(cuò)與高伸縮地特,不同地是Spark將間結(jié)果保存在內(nèi)存,從而不再需要讀寫(xiě)HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)等需要迭代地MapReduce模式地算法。Spark可以將Hadoop集群地應(yīng)用在內(nèi)存地運(yùn)行速度提升約一零零倍,在磁盤(pán)上地運(yùn)行速度提升約一零倍。具有快速,易用,通用,兼容好四個(gè)特點(diǎn),實(shí)現(xiàn)了高效地DAG(DirectedAcyclicGraph,有向無(wú)環(huán)圖)執(zhí)行引擎,支持通過(guò)內(nèi)存計(jì)算高效處理數(shù)據(jù)流。可以使用Java,Scala,Python,R等語(yǔ)言輕松構(gòu)建并行應(yīng)用程序以及通過(guò)Python,Scala地互式Shell在Spark集群驗(yàn)證解決思路是否正確。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Spark地體系架構(gòu)包括SparkCore以及在SparkCore基礎(chǔ)上建立地應(yīng)用框架SparkSQL,SparkStreaming,MLlib,GraphX,StructuredStreaming,SparkR。SparkCore是Spark最重要地部分,相當(dāng)于MapReduce,SparkCore與MapReduce完成地都是離線數(shù)據(jù)分析。Core庫(kù)主要包括Spark地主要入口點(diǎn),即編寫(xiě)Spark程序用到地第一個(gè)類(lèi),整個(gè)應(yīng)用地上下文(SparkContext),彈分布式數(shù)據(jù)集(RDD),調(diào)度器(Scheduler),對(duì)無(wú)規(guī)則地?cái)?shù)據(jù)行重組排序(Shuffle)與序列化器(Seralizer)等。SparkSQL提供通過(guò)Hive查詢(xún)語(yǔ)言(HiveQL)與Spark行互地API,將SparkSQL查詢(xún)轉(zhuǎn)換為Spark操作,并且每個(gè)數(shù)據(jù)庫(kù)表都被當(dāng)作一個(gè)RDD。SparkStreaming對(duì)實(shí)時(shí)數(shù)據(jù)流行處理與控制,允許程序能夠像普通RDD一樣處理實(shí)時(shí)數(shù)據(jù)。MLlib是Spark提供地機(jī)器學(xué)算法庫(kù)。GraphX提供了控制圖,并行圖操作與計(jì)算地算法與工具。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Spark地運(yùn)行模式靈活多變,部署在單機(jī)上時(shí),既可以用本地模式運(yùn)行,也可以用偽分布模式運(yùn)行;而當(dāng)以分布式集群地方式部署時(shí),需要取決于集群地實(shí)際情況來(lái)選擇,底層地資源調(diào)度既可以依賴(lài)外部資源調(diào)度框架,也可以使用Spark內(nèi)建地Standalone模式。目前常用地Spark運(yùn)行模式根據(jù)資源管理器地不同可以分為三種:YARN模式,Standalone模式與Mesos模式。一.Standalone獨(dú)立集群運(yùn)行模式:Standalone模式是Spark自帶地資源調(diào)度框架,其主要地結(jié)點(diǎn)有Client結(jié)點(diǎn),Master結(jié)點(diǎn)與Worker結(jié)點(diǎn)。其Driver既可以運(yùn)行在Master結(jié)點(diǎn)上,也可以運(yùn)行在本地Client端。當(dāng)用spark-shell互式工具提Spark地Job時(shí),Driver在Master結(jié)點(diǎn)上運(yùn)行;當(dāng)使用spark-submit工具提Job或者在Eclipse,IDEA等開(kāi)發(fā)臺(tái)上使用"newSparkConf.setManager(spark://master:七零七七)"方式運(yùn)行Spark任務(wù)時(shí),Driver是運(yùn)行在本地Client端地。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Standalone獨(dú)立集群運(yùn)行模式運(yùn)行過(guò)程:(一)SparkContext連接到Master,向Master注冊(cè)并申請(qǐng)資源(CPUCore與Memory)。(二)Master先根據(jù)SparkContext地資源申請(qǐng)要求與Worker心跳周期內(nèi)報(bào)告地信息決定在哪個(gè)Worker上分配資源;確定后就在該Worker上獲取資源,并且在各個(gè)結(jié)點(diǎn)(Worker)上啟動(dòng)StandaloneExecutorBackend(對(duì)Standalone來(lái)說(shuō)地Executor地守護(hù)程)。(三)StandaloneExecutorBackend向SparkContext注冊(cè)。(四)在Client結(jié)點(diǎn),SparkContext根據(jù)用戶(hù)程序,構(gòu)建DAG圖(在RDD完成),將DAG分解成Stage(TaskSet),把Stage發(fā)送給TaskScheduler。TaskScheduler將Task發(fā)送到相應(yīng)地Worker地Executor運(yùn)行,即提給StandaloneExecutorBackend執(zhí)行。(五)StandaloneExecutorBackend會(huì)建立Executor線程池,開(kāi)始執(zhí)行Task,并向SparkContext報(bào)告,直至Task完成。(六)所有Task完成后,SparkContext向Master注銷(xiāo)并釋放資源。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Yarn-Cluster模式運(yùn)行流程:(一)SparkYarnClient向Yarn集群提應(yīng)用程序,包括ApplicationMaster程序,啟動(dòng)ApplicationMaster地命令,需要在Executor運(yùn)行地程序等。(二)ResourceManager收到請(qǐng)求后,在集群選擇一個(gè)NodeManager,為該應(yīng)用程序分配第一個(gè)Container,要求它在這個(gè)Container啟動(dòng)應(yīng)用程序地ApplicationMaster,其ApplicationMaster行SparkContext等地初始化。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)(三)ApplicationMaster向ResourceManager注冊(cè),這樣用戶(hù)可以直接通過(guò)ResourceManager查看應(yīng)用程序地運(yùn)行狀態(tài),然后ResourceManager將采用輪詢(xún)地方式通過(guò)RPC協(xié)議為各個(gè)任務(wù)申請(qǐng)資源,并監(jiān)控它們地運(yùn)行狀態(tài)直到運(yùn)行結(jié)束。(四)一旦ApplicationMaster申請(qǐng)到資源(也就是Container)后,便與對(duì)應(yīng)地NodeManager通信,要求它在獲得地Container啟動(dòng)CoarseGrainedBackend程(Executor地守護(hù)程),CoarseGrainedBackend程啟動(dòng)后會(huì)向ApplicationMaster地SparkContext注冊(cè)并申請(qǐng)Task。這一點(diǎn)與Standalone模式一樣,只不過(guò)SparkContext在SparkApplication初始化時(shí),使用CoarseGrainedBackend程配合YARNClusterScheduler行任務(wù)地調(diào)度,其YarnClusterScheduler只是對(duì)TaskSchedulerImpl地一個(gè)簡(jiǎn)單包裝,增加了對(duì)Executor地等待邏輯等。(五)ApplicationMaster地SparkContext分配Task給CoarseGrainedBackend程執(zhí)行,CoarseGrainedBackend程運(yùn)行Task并向ApplicationMaster匯報(bào)運(yùn)行地狀態(tài)與度,以讓ApplicationMaster隨時(shí)掌握各個(gè)任務(wù)地運(yùn)行狀態(tài),從而可以在任務(wù)失敗時(shí)重新啟動(dòng)任務(wù)。(六)應(yīng)用程序運(yùn)行完成后,ApplicationMaster向ResourceManager申請(qǐng)注銷(xiāo)并關(guān)閉自己。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)Yarn-Client模式運(yùn)行流程:(一)SparkYarnClient向YARN地ResourceManager申請(qǐng)啟動(dòng)ApplicationMaster。同時(shí)在SparkContent初始化將創(chuàng)建DAGScheduler與TASKScheduler等,由于選擇地是YARN-Client模式,程序會(huì)選擇YarnClientClusterScheduler(故在Client端,而Yarn-Cluster是放在資源管理器地)與YarnClientSchedulerBackend程(也放在Client端)。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)(二)ResourceManager收到請(qǐng)求后,在集群選擇一個(gè)NodeManager,為該應(yīng)用程序分配第一個(gè)Container,要求它在這個(gè)Container啟動(dòng)應(yīng)用程序地ApplicationMaster。與YARN-Cluster地區(qū)別是在該ApplicationMaster不運(yùn)行SparkContext,只與SparkContext行聯(lián)系與資源分派。(三)Client地SparkContext初始化完畢后,與ApplicationMaster建立通信,向Resource-Manager注冊(cè),根據(jù)任務(wù)信息向ResourceManager申請(qǐng)資源(Container)。(四)一旦ApplicationMaster申請(qǐng)到資源(也就是

Container)后,便與對(duì)應(yīng)地NodeManager通信,要求它在獲得地Container啟動(dòng)CoarseGrainedBackend程,CoarseGrainedBackend程啟動(dòng)后會(huì)向Client地SparkContext注冊(cè)并申請(qǐng)Task。(五)Client地SparkContext分配Task給CoarseGrainedExecutorBackend執(zhí)行,CoarseGrainedExecutorBackend運(yùn)行Task并向Driver匯報(bào)運(yùn)行地狀態(tài)與度,以讓Client隨時(shí)掌握各個(gè)任務(wù)地運(yùn)行狀態(tài),從而可以在任務(wù)失敗時(shí)重新啟動(dòng)任務(wù)。(六)應(yīng)用程序運(yùn)行完成后,Client地SparkContext向ResourceManager申請(qǐng)注銷(xiāo)并關(guān)閉自己。五.二.一Spark概述五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)SparkMesos模式:Spark可以運(yùn)行在ApacheMesos管理地硬件集群上。使用Mesos部署Spark地優(yōu)點(diǎn)有兩個(gè):Spark與其它framework之間具有了動(dòng)態(tài)分區(qū);可以在多個(gè)Spark實(shí)例之間行可伸縮地分區(qū)。當(dāng)一個(gè)驅(qū)動(dòng)程序創(chuàng)建一個(gè)作業(yè)并開(kāi)始執(zhí)行調(diào)度任務(wù)時(shí),Mesos將決定什么機(jī)器處理什么任務(wù)。多個(gè)框架可以在同一個(gè)集群上存,而不必依賴(lài)于資源地?zé)o定向劃分。Spark可以在Mesos地兩種模式下運(yùn)行:粗粒度模式(coarse-grained)與細(xì)粒度模式(fine-grained),粗粒度模式是默認(rèn)模式,但細(xì)粒度模式在Spark二.零后已被棄用。粗粒度模式下,Mesos在每臺(tái)機(jī)器上只啟動(dòng)一個(gè)長(zhǎng)期運(yùn)行地Spark任務(wù),而Spark任務(wù)則會(huì)作為其內(nèi)部地"mini-tasks"來(lái)動(dòng)態(tài)調(diào)度。這樣做地好處是,啟動(dòng)延遲會(huì)比較低,但同時(shí),也會(huì)增加一定地資源消耗,因?yàn)镸esos需要在整個(gè)生命周期內(nèi)為這些長(zhǎng)期運(yùn)行地Spark任務(wù)保留其所需地資源。在細(xì)粒度模式下,每個(gè)Spark任務(wù)都作為獨(dú)立地Mesos任務(wù)運(yùn)行。這使得多個(gè)Spark實(shí)例(或者其它計(jì)算框架)可以比較細(xì)粒度地享機(jī)器資源,每個(gè)應(yīng)用所獲得地機(jī)器資源也會(huì)隨著應(yīng)用地啟動(dòng)與關(guān)閉而增加或減少,但同時(shí)每個(gè)任務(wù)地啟動(dòng)也會(huì)有相應(yīng)地延遲。這種模式可能不適用于一些低延遲地場(chǎng)景,如互式查詢(xún),響應(yīng)Web請(qǐng)求等。五.二.二彈分布式數(shù)據(jù)集RDD五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)彈分布數(shù)據(jù)集RDD(ResilientDistributedDataset)是Spark提供地最主要地?cái)?shù)據(jù)抽象,是對(duì)分布式內(nèi)存地抽象使用,實(shí)現(xiàn)了以操作本地集合地方式來(lái)操作分布式數(shù)據(jù)集。作為跨集群節(jié)點(diǎn)間地一個(gè)集合,RDD可以并行地行操作,控制數(shù)據(jù)分區(qū)。RDD具有自動(dòng)容錯(cuò),位置感知調(diào)度與可伸縮地特點(diǎn),用戶(hù)可根據(jù)需要對(duì)數(shù)據(jù)行劃分,自行選擇將數(shù)據(jù)保存在磁盤(pán)或內(nèi)存。用戶(hù)還可以要求Spark在內(nèi)存持久化一個(gè)RDD,以便在并行操作高效地重用,省去了MapReduce大量地磁盤(pán)I/O操作,這對(duì)于迭代運(yùn)算比較常見(jiàn)地機(jī)器學(xué),互式數(shù)據(jù)挖掘來(lái)說(shuō),大大地提升了運(yùn)算效率。RDD具有如下五個(gè)特征。(一)Partition(分區(qū)):數(shù)據(jù)集地基本組成單位,RDD提供了一種高度受限地享內(nèi)存模型,即RDD作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀地記錄分區(qū)地集合。一個(gè)RDD會(huì)有若干個(gè)分區(qū),分區(qū)地大小決定了并行計(jì)算地粒度,每個(gè)分區(qū)地計(jì)算都被一個(gè)單獨(dú)地任務(wù)處理。用戶(hù)可以在創(chuàng)建RDD時(shí)指定RDD地分區(qū)個(gè)數(shù),默認(rèn)是程序所分配到地CPUCore地?cái)?shù)目。(二)pute(pute函數(shù)):是每個(gè)分區(qū)地計(jì)算函數(shù)。Spark地計(jì)算都是以分區(qū)為基本單位地,每個(gè)RDD都會(huì)通過(guò)pute函數(shù)來(lái)達(dá)到計(jì)算地目地。(三)Partitioner(分區(qū)函數(shù)):Partitioner只存在于key-value類(lèi)型地RDD,非key-value類(lèi)型地RDD地Partitioner值是None。Partitioner函數(shù)不但決定了RDD本身地分片數(shù)量,也決定了父RDDShuffle后輸出地分片數(shù)量。(四)PreferedLocations(優(yōu)先位置):按照"移動(dòng)數(shù)據(jù)不如移動(dòng)計(jì)算"地原則,Spark在行任務(wù)調(diào)度時(shí),會(huì)優(yōu)先將任務(wù)分配到數(shù)據(jù)塊存儲(chǔ)地位置。五.二.二彈分布式數(shù)據(jù)集RDD五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)(五)Dependencies(依賴(lài)):RDD之間存在依賴(lài)關(guān)系,分為寬依賴(lài)(WideDependency)與窄依賴(lài)(NarrowDependency)關(guān)系。如果父RDD地每個(gè)分區(qū)最多只能被一個(gè)子RDD(ChildRDD)地分區(qū)所使用,即上一個(gè)RDD地一個(gè)分區(qū)地?cái)?shù)據(jù)到下一個(gè)RDD地時(shí)候還在同一個(gè)分區(qū),則稱(chēng)之為窄依賴(lài),如map操作會(huì)產(chǎn)生窄依賴(lài),圖五-一四顯示地是RDD地窄依賴(lài)關(guān)系。如果被多個(gè)ChildRDD分區(qū)使用,即上一個(gè)RDD地一個(gè)分區(qū)數(shù)據(jù)到下一個(gè)RDD地時(shí)候出現(xiàn)在多個(gè)分區(qū),則稱(chēng)之為寬依賴(lài),如groupByKey會(huì)產(chǎn)生寬依賴(lài),圖五-一五顯示地是RDD地寬依賴(lài)關(guān)系。當(dāng)行join操作地兩個(gè)RDD分區(qū)數(shù)量一致且join結(jié)果得到地RDD分區(qū)數(shù)量與父RDD分區(qū)數(shù)量相同時(shí)(joinwithinputsco-partitioned)為窄依賴(lài),當(dāng)行join操作地每一個(gè)父RDD分區(qū)對(duì)應(yīng)所有子RDD分區(qū)(joinwithinputsnotco-partitioned)時(shí)為寬依賴(lài)。具有窄依賴(lài)關(guān)系地RDD可以在同一個(gè)Stage行計(jì)算,存在Shuffle過(guò)程,所有操作在一起行。寬依賴(lài)也存在Shuffle過(guò)程,需要等待上一個(gè)RDD地所有Task執(zhí)行完成才可行下一個(gè)RDD任務(wù)。寬依賴(lài):窄依賴(lài):五.二.三Spark擴(kuò)展功能五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)目前Spark地生態(tài)系統(tǒng)以SparkCore為核心,然后在此基礎(chǔ)上建立了處理結(jié)構(gòu)化數(shù)據(jù)地SparkSQL,對(duì)實(shí)時(shí)數(shù)據(jù)流行處理地SparkStreaming,用于圖計(jì)算地GraphX,機(jī)器學(xué)算法庫(kù)MLlib四個(gè)子框架。五.二.三Spark擴(kuò)展功能五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)SparkSQL:SparkSQL地主要功能是分析處理結(jié)構(gòu)化數(shù)據(jù),可以隨時(shí)查看數(shù)據(jù)結(jié)構(gòu)與正在執(zhí)行地運(yùn)算信息。SparkSQL是Spark用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)地一個(gè)模塊,不同于SparkRDD地基本API,SparkSQL接口提供了更多關(guān)于數(shù)據(jù)結(jié)構(gòu)與正在執(zhí)行地計(jì)算結(jié)構(gòu)地信息,并利用這些信息去更好地行優(yōu)化,SparkSQL具有如下特征。(一)易整合:無(wú)縫將SQL查詢(xún)與Spark程序整合,可以在Spark程序查詢(xún)結(jié)構(gòu)化數(shù)據(jù),可以使用SQL或熟悉地DataFrameAPI等執(zhí)行引擎。并且支持Java,Scala,Python與R語(yǔ)言。(二)統(tǒng)一數(shù)據(jù)訪問(wèn)方式:以同樣地方式連接到任何數(shù)據(jù)源。DataFrame與SQL提供了訪問(wèn)各種數(shù)據(jù)源地常用方法,包括Hive,Avro,Parquet,ORC,JSON與JDBC。(三)兼容Hive:在現(xiàn)有倉(cāng)庫(kù)上運(yùn)行SQL或HiveQL查詢(xún)。允許訪問(wèn)現(xiàn)有地Hive倉(cāng)庫(kù),支持HiveQL語(yǔ)法以及Hive串行器,解串器與用戶(hù)定義函數(shù)。(四)標(biāo)準(zhǔn)地?cái)?shù)據(jù)連接:通過(guò)JDBC或ODBC連接。支持商業(yè)智能軟件等外部工具通過(guò)標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)連接器(JDBC/ODBC)連接SparkSQL行查詢(xún)。五.二.三Spark擴(kuò)展功能五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)SparkStreaming:SparkStreaming用于處理流式計(jì)算,是Spark核心API地一個(gè)擴(kuò)展。它支持可伸縮,高吞吐量,可容錯(cuò)地處理實(shí)時(shí)數(shù)據(jù)流,能夠與Spark地其它模塊無(wú)縫集成。SparkStreaming支持從多種數(shù)據(jù)源獲取數(shù)據(jù),如Kafka,Flume,Kinesis與HDFS等,獲取數(shù)據(jù)后可以通過(guò)map,reduce,join與window等高級(jí)函數(shù)對(duì)數(shù)據(jù)行處理。最后還可以將處理結(jié)果推送到文件系統(tǒng),數(shù)據(jù)庫(kù)等五.二.三Spark擴(kuò)展功能五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)MLlib:MLlib(MachineLearninglib)是Spark地機(jī)器學(xué)算法地實(shí)現(xiàn)庫(kù),同時(shí)包括有關(guān)地測(cè)試與數(shù)據(jù)生成器,專(zhuān)為在集群上并行運(yùn)行而設(shè)計(jì),旨在使機(jī)器學(xué)變得可擴(kuò)展與更容易實(shí)現(xiàn)。MLlib目前支持常見(jiàn)地機(jī)器學(xué)算法,還包括了底層地優(yōu)化原語(yǔ)與高層地管道API。具體來(lái)說(shuō)MLlib主要包括以下五個(gè)方面地內(nèi)容。(一)機(jī)器學(xué)算法(MLAlgorithms):常見(jiàn)地學(xué)算法,如分類(lèi),回歸,聚類(lèi)與協(xié)同過(guò)濾。(二)特征化(Featurization):特征提取,變換,降維與選擇。(三)管道(Pipelines):用于構(gòu)造,評(píng)估與優(yōu)化機(jī)器學(xué)管道地工具。(四)持久(Persistence):保存與加載算法,模型與管道。(五)實(shí)用工具(Utilities):線代數(shù),統(tǒng)計(jì),數(shù)據(jù)處理等工具。五.二.三Spark擴(kuò)展功能五.二Spark——基于大規(guī)模數(shù)據(jù)地實(shí)時(shí)處理系統(tǒng)GraphX:GraphX是Spark一個(gè)用于圖形并行計(jì)算地組件,結(jié)構(gòu)圖如圖五-一九所示,GraphX通過(guò)引入核心抽象ResilientDistributedPropertyGraph(一種點(diǎn)與邊都帶屬地有向多重圖)擴(kuò)展了SparkRDD這種抽象地?cái)?shù)據(jù)結(jié)構(gòu)。PropertyGraph有Table與Graph兩種視圖,但只有一份物理存儲(chǔ),物理存儲(chǔ)由VertexRDD與EdgeRDD這兩個(gè)RDD組成。這兩種視圖都有自己獨(dú)有地操作符,從而使操作更加靈活,提高了執(zhí)行效率。從社網(wǎng)絡(luò)到自然語(yǔ)言建模,圖數(shù)據(jù)地規(guī)模與重要已經(jīng)促了許多并行圖系統(tǒng)地發(fā)展,圖計(jì)算被廣泛應(yīng)用于社網(wǎng)站,如FaceBook,Twitter等都需要使用圖計(jì)算來(lái)計(jì)算用戶(hù)彼此之間地聯(lián)系。當(dāng)一個(gè)圖地規(guī)模非常大地時(shí)候,就需要使用分布式圖計(jì)算框架,與其它分布式圖計(jì)算框架相比,GraphX最大地貢獻(xiàn)是在Spark提供了一站式數(shù)據(jù)解決方案,可以方便且高效地完成圖計(jì)算地一整套流水作業(yè)。GraphX采用分布式框架地目地是將對(duì)巨型圖地各種操作包裝成簡(jiǎn)單地接口,從而在分布式存儲(chǔ),并行計(jì)算等復(fù)雜問(wèn)題對(duì)上層透明。從而使得開(kāi)發(fā)者可以更加聚焦在圖計(jì)算有關(guān)地模型設(shè)計(jì)與使用上,而不用關(guān)心底層地分布式細(xì)節(jié)。極大地滿(mǎn)足了對(duì)分布式圖處理地需求。五.三.一Storm概述五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)Storm是一個(gè)開(kāi)源地,實(shí)時(shí)地計(jì)算臺(tái),最初由工程師NathanMarz編寫(xiě),后來(lái)被Twitter收購(gòu)并貢獻(xiàn)給Apache軟件基金會(huì),目前已升級(jí)為Apache頂級(jí)項(xiàng)目。作為一個(gè)基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng),Storm簡(jiǎn)化了傳統(tǒng)方法對(duì)無(wú)邊界流式數(shù)據(jù)地處理過(guò)程,被廣泛應(yīng)用于實(shí)時(shí)分析,在線機(jī)器學(xué),持續(xù)計(jì)算,分布式遠(yuǎn)程調(diào)用等領(lǐng)域。五.三.一Storm概述五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)組件概念Topology一個(gè)實(shí)時(shí)計(jì)算應(yīng)用程序邏輯上被封裝在Topology對(duì)象,類(lèi)似于Hadoop地作業(yè)。與作業(yè)不同地是,Topology會(huì)一直運(yùn)行到該程結(jié)束Nimbus負(fù)責(zé)資源分配與任務(wù)調(diào)度,類(lèi)似于Hadoop地JobTrackerSupervisor負(fù)責(zé)接收Nimbus分配地任務(wù),啟動(dòng)與停止管理地Worker程,類(lèi)似于Hadoop地TaskTrackerWorker具體地邏輯處理組件ExecutorStorm零.八之后,Executor是Worker程地具體物理程,同一個(gè)Spout/Bolt地Task可能會(huì)享一個(gè)物理程,一個(gè)Executor只能運(yùn)行隸屬于同一個(gè)Spout/Bolt地TaskTask每一個(gè)Spout/Bolt具體要做地工作內(nèi)容,同時(shí)也是各個(gè)結(jié)點(diǎn)之間行分組地單位Spout在Topology產(chǎn)生數(shù)據(jù)源地組件。通常Spout獲取數(shù)據(jù)源地?cái)?shù)據(jù),再調(diào)用nextTuple函數(shù),發(fā)送數(shù)據(jù)供Bolt消費(fèi)Bolt在Topology接收Spout地?cái)?shù)據(jù),再執(zhí)行處理地組件。Bolt可以執(zhí)行過(guò)濾,函數(shù)操作,合并,寫(xiě)數(shù)據(jù)庫(kù)等操作。Bolt接收到消息后調(diào)用execute函數(shù),用戶(hù)可以在其執(zhí)行相應(yīng)地操作Tuple消息傳遞地基本單元Stream源源不斷傳遞地Tuple組成了Stream,也就是數(shù)據(jù)流Stream分組消息地分組方法。Storm提供若干實(shí)用地分組方式,包括了Shuffle,Fields,All,Global,None,Direct與LocalorShuffle等五.三.一Storm概述五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)Storm處理地?cái)?shù)據(jù)被稱(chēng)為數(shù)據(jù)流(Stream),數(shù)據(jù)流在Storm內(nèi)各組件之間地傳輸形式是一系列元組(Tuple)序列,其傳輸過(guò)程如圖所示。每個(gè)Tuple內(nèi)可以包含不同類(lèi)型地?cái)?shù)據(jù),如int,string等類(lèi)型,但不同Tuple間對(duì)應(yīng)位置上數(shù)據(jù)地類(lèi)型需要一致,這是因?yàn)門(mén)uple數(shù)據(jù)地類(lèi)型由各組件在處理前事先明確定義地。Storm集群每個(gè)結(jié)點(diǎn)每秒可以處理成百上千個(gè)Tuple,數(shù)據(jù)流在各個(gè)組件成分間類(lèi)似于水流一樣源源不斷地從前一個(gè)組件流向后一個(gè)組件,而Tuple類(lèi)似于承載數(shù)據(jù)流地管道。五.三.一Storm概述五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)Storm作為一個(gè)開(kāi)源地分布式實(shí)時(shí)計(jì)算系統(tǒng),可以簡(jiǎn)單,可靠地處理大量地?cái)?shù)據(jù)流。Storm支持水?dāng)U展,具有高容錯(cuò),保證每個(gè)消息都會(huì)得到處理,而且處理速度很快(在一個(gè)小集群,每個(gè)結(jié)點(diǎn)每秒可以處理數(shù)以百萬(wàn)計(jì)地消息)。Storm地部署與運(yùn)維都很便捷,而且更為重要地是,可以使用任意編程語(yǔ)言來(lái)開(kāi)發(fā)基于Storm地應(yīng)用,這使得Storm成為當(dāng)前大數(shù)據(jù)環(huán)境下非常流行地流數(shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)。以下是Storm地特。(一)完整:Storm采用了Acker機(jī)制,保證數(shù)據(jù)不丟失;同時(shí)采用事務(wù)機(jī)制,保證數(shù)據(jù)地精確。(二)容錯(cuò):由于Storm地守護(hù)程(Nimbus,Supervisor)都是無(wú)狀態(tài)與快速恢復(fù)地,用戶(hù)可以根據(jù)情況行重啟。當(dāng)工作程(Worker)失敗或機(jī)器發(fā)生故障時(shí),Storm可自動(dòng)分配新地Worker替換原來(lái)地Worker,而且不會(huì)產(chǎn)生額外地影響。(三)易用:Storm只需少量地安裝及配置工作便可以行部署與啟動(dòng),并且行開(kāi)發(fā)時(shí)非常迅速,用戶(hù)也易上手。(四)免費(fèi)與開(kāi)源:Storm是開(kāi)源項(xiàng)目,同時(shí),EPL協(xié)議也是一個(gè)相對(duì)自由地開(kāi)源協(xié)議,用戶(hù)有權(quán)對(duì)自己地Storm應(yīng)用開(kāi)源或封閉。(五)支持多種語(yǔ)言:Storm使用Clojure語(yǔ)言開(kāi)發(fā),接口基本上都是由Java提供,但Storm可以使用多種編程語(yǔ)言。并且Storm為多種編程語(yǔ)言實(shí)現(xiàn)了該協(xié)議地適配器,包括Ruby,Python,PHP,Perl等。五.三.二Storm組成結(jié)構(gòu)五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)Storm采用地是主從架構(gòu)模式(Master/Slave),主結(jié)點(diǎn)為Nimbus,從結(jié)點(diǎn)為Supervisor,其體系結(jié)構(gòu)如圖所示。主結(jié)點(diǎn)Nimbus負(fù)責(zé)在集群分發(fā)任務(wù)(Topology)地代碼以及監(jiān)控等。在接收一個(gè)任務(wù)后,從結(jié)點(diǎn)Supervisor會(huì)啟動(dòng)一個(gè)或多個(gè)程(稱(chēng)為Worker),來(lái)處理任務(wù)。所以實(shí)際上,任務(wù)最終都是分配到了Worker上。五.三.三Storm-Yarn概述五.三Storm——基于拓?fù)涞亓鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)Storm-Yarn是基于Storm實(shí)現(xiàn)地,兩者地框架結(jié)構(gòu)與數(shù)據(jù)處理方式基本上是一致地,只是Storm-Yarn是將Storm地有關(guān)組成部分與Hadoop地資源管理器YARN各個(gè)功能部分有關(guān)聯(lián)起來(lái),為此前行批處理地Hadoop應(yīng)用提供了低延遲地處理能力。Storm-Yarn也被視為大規(guī)模Web應(yīng)用與傳統(tǒng)企業(yè)應(yīng)用之間地橋梁。相比于將Storm部署到一個(gè)獨(dú)立地集群,Storm-Yarn帶來(lái)很多好處。(一)系統(tǒng)具有較強(qiáng)地彈。Storm地處理負(fù)載因數(shù)據(jù)流地特征與數(shù)量往往具有不同差異,從而導(dǎo)致很難準(zhǔn)確預(yù)測(cè)負(fù)載具體情況,即Storm集群地負(fù)載具有不可控。若將Storm集群部署到Hadoop地YARN框架上,則可以充分利用Hadoop地可擴(kuò)展行彈增加或釋放系統(tǒng)資源,自動(dòng)獲取Hadoop上未使用地空閑資源,使用完成后行釋放,這便提高了整個(gè)集群資源地利用率。(二)享底層存儲(chǔ)。Storm可與運(yùn)行在YARN上地其它框架享底層地一個(gè)HDFS存儲(chǔ)系統(tǒng),可避免多個(gè)集群帶來(lái)地維護(hù)成本,同時(shí)避免數(shù)據(jù)跨集群拷貝帶來(lái)地網(wǎng)絡(luò)開(kāi)銷(xiāo)與時(shí)間延遲。(三)支持多版本??赏瑫r(shí)將多個(gè)Storm版本運(yùn)行在YARN上,避免一個(gè)版本一個(gè)集群帶來(lái)地維護(hù)成本。五.四Hadoop,Spark與Storm地比較處理框架是大數(shù)據(jù)系統(tǒng)一個(gè)最基本地組件,負(fù)責(zé)對(duì)系統(tǒng)地?cái)?shù)據(jù)行計(jì)算。按照處理類(lèi)型地不同,可分為:僅批處理框架(Hadoop),僅流處理框架(Storm),混合框架(Spark)。HadoopHadoop是一種專(zhuān)用于批處理地處理框架。Hadoop重新實(shí)現(xiàn)了有關(guān)算法與組件堆棧,讓大規(guī)模批處理技術(shù)變得更易用。Hadoop包含多個(gè)組件,通過(guò)配合使用可處理批數(shù)據(jù)。Hadoop地處理功能來(lái)自MapReduce引擎。MapReduce地處理技術(shù)符合使用鍵值對(duì)地map,shuffle,reduce算法要求。由于這種方法嚴(yán)重依賴(lài)持久存儲(chǔ),每個(gè)任務(wù)需要多次執(zhí)行讀取與寫(xiě)入操作,因此速度相對(duì)較慢。但另一方面由于磁盤(pán)空間通常是服務(wù)器上最豐富地資源,這意味著MapReduce可以處理非常海量地?cái)?shù)據(jù)集。同時(shí)也意味著相比其它類(lèi)似技術(shù),Hadoop地MapReduce通常可以在廉價(jià)硬件上運(yùn)行,因?yàn)樵摷夹g(shù)并不需要將所有都存儲(chǔ)在內(nèi)存。MapReduce具備極高地縮放潛力,實(shí)際生產(chǎn)曾經(jīng)出現(xiàn)過(guò)包含數(shù)萬(wàn)個(gè)節(jié)點(diǎn)地應(yīng)用。MapReduce地學(xué)曲線較為陡峭,雖然Hadoop生態(tài)系統(tǒng)地其它周邊技術(shù)可以大幅降低這一問(wèn)題地影響,但通過(guò)Hadoop集群快速實(shí)現(xiàn)某些應(yīng)用時(shí)依然需要注意這個(gè)問(wèn)題。圍繞Hadoop已經(jīng)形成了遼闊地生態(tài)系統(tǒng),Hadoop集群本身也經(jīng)常被用作其它軟件地組成部件。很多其它處理框架與引擎通過(guò)與Hadoop集成也可以使用HDFS與YARN資源管理器。五.四Hadoop,Spark與Storm地比較Storm:Storm是一種側(cè)重于極低延遲地流處理框架,也是實(shí)時(shí)處理領(lǐng)域地最佳解決方案。該技術(shù)可處理非常大量地?cái)?shù)據(jù),通過(guò)比其它解決方案更低地延遲提供結(jié)果。如果處理速度直接影響用戶(hù)體驗(yàn),如需要將處理結(jié)果直接提供給訪客打開(kāi)地網(wǎng)站頁(yè)面,此時(shí)Storm是一個(gè)很好地選擇。Storm與Trident配合使得用戶(hù)可以用微批代替純粹地流處理。在操作方面,Storm可與Hadoop地YARN資源管理器行集成,因此可以很方便地融入現(xiàn)有Hadoop部署。除了支持大部分處理框架,Storm還可支持多種語(yǔ)言,為用戶(hù)地拓?fù)涠x提供了更多選擇。五.四Hadoop,Spark與Storm地比較Spark:Spark是一種包含流處理能力地下一代批處理框架。與Hadoop地MapReduce引擎基于各種相同原則開(kāi)發(fā)而來(lái)地Spark主要側(cè)重于通過(guò)完善地內(nèi)存計(jì)算與處理優(yōu)化機(jī)制加快批處理工作負(fù)載地運(yùn)行速度。Spark可作為獨(dú)立集群部署(需要相應(yīng)存儲(chǔ)層地配合),或可與Hadoop集成并取代MapReduce引擎。Spark在內(nèi)存處理數(shù)據(jù)地方式已大幅改善能,而且,Spark在處理與磁盤(pán)有關(guān)地任務(wù)時(shí)速度也有很大提升,因?yàn)橥ㄟ^(guò)提前對(duì)整個(gè)任務(wù)集行分析可以實(shí)現(xiàn)更完善地整體式優(yōu)化。為此Spark可創(chuàng)建代表所需執(zhí)行地全部操作,需要操作地?cái)?shù)據(jù),以及操作與數(shù)據(jù)之間關(guān)系地有向無(wú)環(huán)圖(DirectedAcyclicGraph,DAG),借此處理器可以對(duì)任務(wù)行更智能地協(xié)調(diào)。使用Spark而非Hadoop或MapReduce地主要優(yōu)勢(shì)是速度。在內(nèi)存計(jì)算策略與先地DAG調(diào)度等機(jī)制地幫助下,Spark可以用更快速度處理相同地?cái)?shù)據(jù)集。Spark地另一個(gè)重要優(yōu)勢(shì)在于多樣。該產(chǎn)品可作為獨(dú)立集群部署,或與現(xiàn)有Hadoop集群集成。該產(chǎn)品可運(yùn)行批處理與流處理,運(yùn)行一個(gè)集群即可處理不同類(lèi)型地任務(wù)。除了引擎自身地能力外,圍繞Spark還建立了包含各種庫(kù)地生態(tài)系統(tǒng),可為機(jī)器學(xué),互式查詢(xún)等任務(wù)提供更好地支持。相比于其它框架,Spark任務(wù)更加易于編寫(xiě),因此可大幅提高生產(chǎn)力。五.四Hadoop,Spark與Storm地比較Hadoop地適用場(chǎng)景:①海量數(shù)據(jù)地離線分析處理;②大規(guī)模Web信息搜索;③數(shù)據(jù)密集型并行計(jì)算。Storm地適用場(chǎng)景:①流數(shù)據(jù)處理,Storm可以用來(lái)處理源源不斷流來(lái)地消息,處理之后將結(jié)果寫(xiě)入到某個(gè)存儲(chǔ)去。②分布式RPC,由于Storm地處理組件是分布式地,而且處理延遲極低,所以可以作為一個(gè)通用地分布式RPC框架來(lái)使用。Spark地適用場(chǎng)景:①多次操作特定數(shù)據(jù)集地應(yīng)用場(chǎng)合;Spark是基于內(nèi)存地迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集地應(yīng)用場(chǎng)合。需要反復(fù)操作地次數(shù)越多,所需讀取地?cái)?shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大地場(chǎng)合,受益就相對(duì)較小。②粗粒度更新?tīng)顟B(tài)地應(yīng)用;由于RDD地特,Spark不適用那種異步細(xì)粒度更新?tīng)顟B(tài)地應(yīng)用,例如Web服務(wù)地存儲(chǔ)或者是增量地Web爬蟲(chóng)與索引。就是對(duì)于那種增量修改地應(yīng)用模型不適合。Storm,Spark與Hadoop這三種框架,每個(gè)框架都有自己地最佳應(yīng)用場(chǎng)景。所以,在不同地應(yīng)用場(chǎng)景下,應(yīng)該選擇不同地框架。Spark是多樣化工作負(fù)載處理任務(wù)地最佳選擇。Spark批處理能力以更高內(nèi)存占用為代價(jià)提供了無(wú)與倫比地速度優(yōu)勢(shì)。對(duì)于重視吞吐率而非延遲地工作負(fù)載,則比較適合使用SparkStreaming作為流處理解決方案。Hadoop及其MapReduce處理引擎提供了一套久經(jīng)考驗(yàn)地批處理模型,最適合處理對(duì)時(shí)間要求不高地非常大規(guī)模數(shù)據(jù)集。通過(guò)非常低成本地組件即可搭建完整功能地Hadoop集群,使得這一廉價(jià)且高效地處理技術(shù)可以靈活應(yīng)用在很多案例。與其它框架與引擎地兼容與集成能力使得Hadoop可以成為使用不同技術(shù)地多種工作負(fù)載處理臺(tái)地底層基礎(chǔ)。對(duì)于延遲需求很高地純粹地流處理工作負(fù)載,Storm可能是最適合地技術(shù)。該技術(shù)可以保證每條消息都被處理,可配合多種編程語(yǔ)言使用。由于Storm無(wú)法行批處理,如果需要這些能力可能還需要使用其它軟件。如果對(duì)嚴(yán)格地一次處理保證有比較高地要求,此時(shí)可考慮使用Storm與Trident配合處理。不過(guò)這種情況下其它流處理框架也許更適合。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較互聯(lián)網(wǎng)是通過(guò)TCP/IP協(xié)議族互相連接在一起地計(jì)算機(jī)網(wǎng)絡(luò),而Web是運(yùn)行在互聯(lián)網(wǎng)上地一個(gè)超大規(guī)模地分布式系統(tǒng)。Web設(shè)計(jì)初衷是一個(gè)靜態(tài)信息資源發(fā)布媒介,通過(guò)超文本標(biāo)記語(yǔ)言(HTML)描述信息資源,通過(guò)統(tǒng)一資源標(biāo)識(shí)符(URI)定位信息資源,通過(guò)超文本轉(zhuǎn)移協(xié)議(HTTP)請(qǐng)求信息資源。HTML,URL與HTTP三個(gè)規(guī)范構(gòu)成了Web地核心體系結(jié)構(gòu),是支撐著Web運(yùn)行地基石。用通俗地一點(diǎn)地話來(lái)說(shuō),客戶(hù)端(一般為瀏覽器)通過(guò)URL找到網(wǎng)站(如.google.),發(fā)出HTTP請(qǐng)求,服務(wù)器收到請(qǐng)求后返回HTML頁(yè)面??梢?jiàn),Web是基于TCP/IP協(xié)議地,TCP/IP協(xié)議把計(jì)算機(jī)連接在一起,而Web在這個(gè)協(xié)議族之上,一步將計(jì)算機(jī)地信息資源連接在一起,形成我們說(shuō)地萬(wàn)維網(wǎng)。而開(kāi)發(fā)地Web應(yīng)用本質(zhì)上就是可以提供信息或者功能地Web資源,成為Web這個(gè)全球超大規(guī)模分布式系統(tǒng)地一部分。早期地Web開(kāi)發(fā)主要是靜態(tài)頁(yè)面地瀏覽,這些靜態(tài)頁(yè)面使用HTML語(yǔ)言編寫(xiě),放在服務(wù)器上,用戶(hù)使用瀏覽器通過(guò)HTTP協(xié)議請(qǐng)求服務(wù)器上地Web頁(yè)面,服務(wù)器上地Web服務(wù)器軟件接受到用戶(hù)發(fā)送地請(qǐng)求后,讀取請(qǐng)求URI所標(biāo)識(shí)地資源,發(fā)送給客戶(hù)端地瀏覽器,瀏覽器解析響應(yīng)地HTML數(shù)據(jù),向用戶(hù)呈現(xiàn)多姿多彩地HTML頁(yè)面。靜態(tài)HTML頁(yè)面生成過(guò)程如圖所示。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較CGI(monGatewayInterface)地出現(xiàn)使得Web上地動(dòng)態(tài)信息服務(wù)開(kāi)始蓬勃興起。CGI定義了Web服務(wù)器與外部應(yīng)用程序之間地通信接口標(biāo)準(zhǔn),因此Web服務(wù)器可以通過(guò)CGI執(zhí)行外部程序,讓外部程序根據(jù)Web請(qǐng)求內(nèi)容生成動(dòng)態(tài)地內(nèi)容。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較CGI對(duì)每個(gè)請(qǐng)求都會(huì)啟動(dòng)一個(gè)程來(lái)處理,如網(wǎng)站訪問(wèn)地計(jì)數(shù),因此能上地?cái)U(kuò)展不高。為了處理更復(fù)雜地應(yīng)用,起初是把HTML返回固定地部分存起來(lái)(稱(chēng)為模版),把動(dòng)態(tài)地部分標(biāo)記出來(lái),Web請(qǐng)求處理地時(shí)候,程序先生成動(dòng)態(tài)地內(nèi)容,再把模版讀入來(lái),把動(dòng)態(tài)內(nèi)容填充去,形成最終返回。但是這樣做顯然太繁瑣且重復(fù),于是PHP誕生了,PHP可以把程序(動(dòng)態(tài)內(nèi)容)嵌入到HTML(模版)去執(zhí)行,不僅能更好地組織Web應(yīng)用地內(nèi)容,而且執(zhí)行效率比CGI還更高。之后出現(xiàn)地ASP與JSP本質(zhì)上也都可以看成是一種支持某種腳本語(yǔ)言編程(分別是VB與Java)地模版引擎。CSS允許開(kāi)發(fā)者用外聯(lián)地樣式表來(lái)取代難以維護(hù)地內(nèi)嵌樣式,而不需要逐個(gè)去修改HTML元素,這讓HTML頁(yè)面更加容易創(chuàng)建與維護(hù)。此時(shí),有了這些腳本語(yǔ)言,搭配上后端地?cái)?shù)據(jù)庫(kù)技術(shù),Web真正變?yōu)榱艘粋€(gè)分布式地計(jì)算臺(tái)。引入Web編程腳本語(yǔ)言后地流程如圖所示。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較Web開(kāi)始廣泛用于構(gòu)建大型應(yīng)用時(shí),在安全,事務(wù)等方面地要求催生了JavaEE(原名為J二EE)臺(tái)地誕生,從那時(shí)開(kāi)始為企業(yè)應(yīng)用提供支撐臺(tái)地各種應(yīng)用服務(wù)器也開(kāi)始大行其道。JavaServlet,JavaServerPages(JSP)與EnterpriseJavaBean(EJB)是JavaEE地核心規(guī)范,Servlet與JSP是運(yùn)行在服務(wù)器端地Web組件,EJB是運(yùn)行在服務(wù)器端地業(yè)務(wù)組件,是一種分布式組件技術(shù)。而之后地.臺(tái),其ASP.構(gòu)件化地Web開(kāi)發(fā)方式以及VisualStidio.開(kāi)發(fā)環(huán)境地強(qiáng)大支持,大大降低了開(kāi)發(fā)企業(yè)應(yīng)用地復(fù)雜度。ASP.第一次讓程序員可以像拖拽組件來(lái)創(chuàng)建WindowsForm程序那樣來(lái)組件化地創(chuàng)建Web頁(yè)面。.流程如圖所示。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較Web開(kāi)始廣泛用于構(gòu)建大型應(yīng)用時(shí),在安全,事務(wù)等方面地要求催生了JavaEE(原名為J二EE)臺(tái)地誕生,從那時(shí)開(kāi)始為企業(yè)應(yīng)用提供支撐臺(tái)地各種應(yīng)用服務(wù)器也開(kāi)始大行其道。JavaServlet,JavaServerPages(JSP)與EnterpriseJavaBean(EJB)是JavaEE地核心規(guī)范,Servlet與JSP是運(yùn)行在服務(wù)器端地Web組件,EJB是運(yùn)行在服務(wù)器端地業(yè)務(wù)組件,是一種分布式組件技術(shù)。而之后地.臺(tái),其ASP.構(gòu)件化地Web開(kāi)發(fā)方式以及VisualStidio.開(kāi)發(fā)環(huán)境地強(qiáng)大支持,大大降低了開(kāi)發(fā)企業(yè)應(yīng)用地復(fù)雜度。ASP.第一次讓程序員可以像拖拽組件來(lái)創(chuàng)建WindowsForm程序那樣來(lái)組件化地創(chuàng)建Web頁(yè)面。.流程如圖所示。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較雖然腳本語(yǔ)言大大提高了應(yīng)用開(kāi)發(fā)效率,但是試想一個(gè)復(fù)雜地大型Web應(yīng)用,訪問(wèn)各種功能地URL地址紛繁復(fù)雜,涉及到地Web頁(yè)面多種多樣,同時(shí)還管理著大量地后臺(tái)數(shù)據(jù),因此我們需要在架構(gòu)層面上解決維護(hù)與擴(kuò)展等問(wèn)題。這時(shí)MVC(Model,View,Controller)被應(yīng)用到Web應(yīng)用上,模型Model用于封裝與業(yè)務(wù)邏輯有關(guān)地?cái)?shù)據(jù)與數(shù)據(jù)處理方法,視圖View是數(shù)據(jù)地HTML展現(xiàn),控制器Controller負(fù)責(zé)響應(yīng)請(qǐng)求,協(xié)調(diào)Model與View。Model,View與Controller地分開(kāi),是一種典型地模塊化思想,不僅使得代碼復(fù)用與組織更好,使得Web應(yīng)用地配置與靈活更好。MVC框架如圖所示。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較此外,數(shù)據(jù)訪問(wèn)也逐漸通過(guò)面向?qū)ο蟮胤绞絹?lái)替代直接地SQL訪問(wèn),出現(xiàn)了ORM(ObjectRelationMapping)地概念,Hibernate就是其地佼佼者,已經(jīng)成為Java持久層地規(guī)范JPA地主要參考與實(shí)現(xiàn)。之后更多地全??蚣荛_(kāi)始出現(xiàn),如Spring,同時(shí)更多地動(dòng)態(tài)語(yǔ)言也被加入到Web編程語(yǔ)言地陣營(yíng),Ruby開(kāi)發(fā)框架Rails,Python開(kāi)發(fā)框架Django。Web開(kāi)發(fā)涉及瀏覽器端與服務(wù)器端。在客戶(hù)端JavaScript被用作瀏覽器上運(yùn)行腳本語(yǔ)言為網(wǎng)頁(yè)增加動(dòng)態(tài)。JavaScript可以響應(yīng)瀏覽器端地用戶(hù),檢測(cè)表單地正確,動(dòng)態(tài)修改HTML頁(yè)面結(jié)構(gòu)DOM,因此可以減少與服務(wù)器端地通信開(kāi)銷(xiāo),并且做出很精彩地頁(yè)面動(dòng)態(tài)效果。這使得JavaScript大放異彩。五.五.一Web應(yīng)用開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較AJAX(AsynchronousJavaScriptandXML,異步地JavaScript與XML技術(shù))是一套綜合了多項(xiàng)技術(shù)地瀏覽器端網(wǎng)頁(yè)開(kāi)發(fā)技術(shù),可以基于JavaScript地XmlHttpRequest地用于創(chuàng)建互更強(qiáng)地Web應(yīng)用。AJAX是一種已有技術(shù)地mashup,多種技術(shù)組合在一起形成了其特色與優(yōu)勢(shì)。AJAX應(yīng)用僅向服務(wù)器發(fā)送并取回需要地?cái)?shù)據(jù),并在客戶(hù)端采用JavaScript處理來(lái)自服務(wù)器響應(yīng),更新頁(yè)面地局部信息。這樣不僅瀏覽器與服務(wù)器地?cái)?shù)據(jù)換大大減少,而且客戶(hù)端也可以更加快速地響應(yīng)用戶(hù)操作。AJAX框架如圖所示。AJAX以及如EXTJS,DOJO等一些前端開(kāi)發(fā)框架地出現(xiàn),也使得單頁(yè)應(yīng)用(SinglePageApplication)流行起來(lái)。這種模式下,前后端地分工非常清晰,前后端地關(guān)鍵協(xié)作點(diǎn)是AJAX接口,規(guī)定好互接口后,前后端工程師就可以根據(jù)約定,分頭開(kāi)工,開(kāi)發(fā)環(huán)境通過(guò)Mock等方式行測(cè)試,同時(shí)在特定時(shí)間節(jié)點(diǎn)行前后端集成測(cè)試。五.五.二大數(shù)據(jù)開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較大數(shù)據(jù)開(kāi)發(fā)是對(duì)海量數(shù)據(jù)存儲(chǔ),計(jì)算,統(tǒng)計(jì),分析等一系列處理,是傳統(tǒng)數(shù)據(jù)處理手段無(wú)法完成地,涉及分布式計(jì)算,高并發(fā)處理,集群,實(shí)時(shí)計(jì)算等。五.五.二大數(shù)據(jù)開(kāi)發(fā)技術(shù)簡(jiǎn)介五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較家規(guī)劃大數(shù)據(jù)產(chǎn)業(yè)發(fā)展戰(zhàn)略,各行各業(yè)需要大數(shù)據(jù)技術(shù)支撐指數(shù)級(jí)地?cái)?shù)據(jù)增量服務(wù),大數(shù)據(jù)方面市場(chǎng)需求呈爆發(fā)式增長(zhǎng)。而學(xué)大數(shù)據(jù)開(kāi)發(fā)技術(shù),就會(huì)涉及以下方面。(一)第一階段:JavaSE+MySql+Linux:Java基礎(chǔ)→OOP編程→Java集合→IO/NIO→Eclipse→IntellijIDEA→Socket網(wǎng)絡(luò)技術(shù)→Mysql數(shù)據(jù)庫(kù)→JDBCApi→JVM內(nèi)存結(jié)構(gòu)→階段項(xiàng)目實(shí)戰(zhàn)→Linux(VMware,CentOS,目錄結(jié)構(gòu),Linux命令)。(二)第二階段:Hadoop與生態(tài)系統(tǒng):Hadoop→MapReduce→Hive→Avro與Protobuf→ZooKeeper→HBase→phoenix→Redis→Flume分布式→SSM(Spring,SpringMVC,Mybatis)→Kafka架構(gòu)。(三)第三階段Storm與Spark及其生態(tài)圈:Scala→SparkJob→SparkRDD→sparkjob部署與資源分配→Sparkshuffle→SparkSQL→SparkStreaming→SparkML→azkaban。(四)第四階段其它:Python與數(shù)據(jù)分析。(五)第五階段項(xiàng)目實(shí)戰(zhàn),技術(shù)綜合運(yùn)用:實(shí)操企業(yè)大數(shù)據(jù)處理業(yè)務(wù)場(chǎng)景,分析需求,解決方案實(shí)施,綜合技術(shù)實(shí)戰(zhàn)應(yīng)用。五.五.三大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地應(yīng)用環(huán)境五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較隨著大數(shù)據(jù)技術(shù)地飛速發(fā)展,大數(shù)據(jù)開(kāi)發(fā)已經(jīng)融入各行各業(yè)。整體來(lái)看,大數(shù)據(jù)行業(yè)地發(fā)展呈穩(wěn)步上升趨勢(shì),二零一七年市場(chǎng)規(guī)模達(dá)到了二三四億元,與去年相比增速超過(guò)三九%。隨著政策地支持與資本地加入,未來(lái)幾年大數(shù)據(jù)規(guī)模還將繼續(xù)增長(zhǎng)。大數(shù)據(jù)行業(yè)整體市場(chǎng)規(guī)模及預(yù)測(cè)如圖所示。五.五.三大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地應(yīng)用環(huán)境五.五大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)發(fā)技術(shù)地比較大數(shù)據(jù)在各行各業(yè)地具體應(yīng)用:(一)制造業(yè),利用工業(yè)大數(shù)據(jù)提升制造業(yè)水,包括產(chǎn)品故障診斷與預(yù)測(cè),分析工藝流程,改生產(chǎn)工藝,優(yōu)化生產(chǎn)過(guò)程能耗,工業(yè)供應(yīng)鏈分析與優(yōu)化,生產(chǎn)計(jì)劃與排程。(二)金融行業(yè),大數(shù)據(jù)在高頻易,社情緒分析與信貸風(fēng)險(xiǎn)分析三大金融創(chuàng)新領(lǐng)域發(fā)揮重大作用。(三)汽車(chē)行業(yè),利用大數(shù)據(jù)與物聯(lián)網(wǎng)技術(shù)地?zé)o駕駛汽車(chē),在不遠(yuǎn)地將來(lái)將走入我們地日常生活。(四)互聯(lián)網(wǎng)行業(yè),借助于大數(shù)據(jù)技術(shù),可以分析客戶(hù)行為,行商品推薦與針對(duì)廣告投放。(五)餐飲行業(yè),利用大數(shù)據(jù)實(shí)現(xiàn)餐飲O二O模式,徹底改變傳統(tǒng)餐飲經(jīng)營(yíng)方式。(六)電信行業(yè),利用大數(shù)據(jù)技術(shù)實(shí)現(xiàn)客戶(hù)離網(wǎng)分析,及時(shí)掌握客戶(hù)離網(wǎng)傾向,出臺(tái)客戶(hù)挽留措施。(七)能源行業(yè),隨著智能電網(wǎng)地發(fā)展,電力公司可以掌握海量地用戶(hù)用電信息,利用大數(shù)據(jù)技術(shù)分析用戶(hù)用電模式,可以改電網(wǎng)運(yùn)行,合理設(shè)計(jì)電力需求響應(yīng)系統(tǒng),確保電網(wǎng)運(yùn)行安全。五.五.三大數(shù)據(jù)開(kāi)發(fā)與Web應(yīng)用開(kāi)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論