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

下載本文檔

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

文檔簡介

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論