《云計算與大數(shù)據(jù)技術應用》Spark-基于內存的大數(shù)據(jù)計算框架_第1頁
《云計算與大數(shù)據(jù)技術應用》Spark-基于內存的大數(shù)據(jù)計算框架_第2頁
《云計算與大數(shù)據(jù)技術應用》Spark-基于內存的大數(shù)據(jù)計算框架_第3頁
《云計算與大數(shù)據(jù)技術應用》Spark-基于內存的大數(shù)據(jù)計算框架_第4頁
《云計算與大數(shù)據(jù)技術應用》Spark-基于內存的大數(shù)據(jù)計算框架_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

云計算與大數(shù)據(jù)技術應用

Spark-基于內存的大規(guī)模計算框架《云計算與大數(shù)據(jù)技術應用》

第10章Spark-基于內存的大數(shù)據(jù)計算框架10.1

Spark概述10.2

Spark的運行機制10.3Spark的運行模式10.3.1Standalone模式10.3.2SparkYARN模式10.3.3SparkMesos模式10.4

SparkRDD10.4.1RDD的特點10.4.2RDD的創(chuàng)建10.4.3RDD基本操作10.4.4RDD持久化(緩存)10.4.5Spark共享變量第10章Spark-基于內存的大數(shù)據(jù)計算框架10.5Spark生態(tài)系統(tǒng)10.5.1SparkSQL10.5.2SparkStreaming10.5.3GraphX10.5.4MLlib10.1Spark概述Spark是一種快速、通用、可擴展的大數(shù)據(jù)分析引擎,是由UCBerkeleyAMPlab(加州大學伯克利分校的AMP實驗室)在2009年所開源的類HadoopMapReduce的通用并行框架,擁有HadoopMapReduce所有的優(yōu)點,與MapReduce不同的是中間輸出結果保存在內存中,因此Spark也是基于內存的大數(shù)據(jù)計算框架,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實時性,同時保證了高容錯性和高伸縮性,允許用戶將Spark集群部署在廉價的硬件之上,其Logo如圖所示Spark在2010年開源,2013年6月成為Apache的孵化項目,2014年2月被Apache確定為頂級項目。目前,Spark的生態(tài)系統(tǒng)主要有SparkSQL、SparkStreaming、GraphX、MLlib等子項目。同時Spark得到了眾多互聯(lián)網(wǎng)公司的青睞,如IBM、Cloudera、Hortonworks、百度、阿里、騰訊、京東、優(yōu)酷等。百度將Spark應用在大搜索、直達號等業(yè)務;阿里利用GraphX構建了大規(guī)模的圖計算和圖挖掘系統(tǒng),實現(xiàn)了很多應用系統(tǒng)的推薦算法;騰訊的Spark集群已經(jīng)達到8000臺,是當前世界上已知最大的Spark集群。Spark具有快、易用、通用、兼容性好四個特點。與Hadoop的MapReduce相比,Spark基于內存的運算要快100倍以上,基于磁盤的Spark運算也要也要比MapReduce快10倍以上。Spark實現(xiàn)了高效的DAG(DatabaseAvailabilityGroup,數(shù)據(jù)庫可用性組)執(zhí)行引擎,支持通過內存計算高效處理數(shù)據(jù)流??梢允褂肑ava、Scala、Python、R語言編寫程序,提供了超過80個的高級算子,可以輕松構建并行應用程序。而且Spark支持交互式的Python和Scala的Shell,可以非常方便地在這些Shell中使用Spark集群來驗證解決問題的方法。Spark提供了一堆庫,如用于機器學習的MLlib、圖計算的GraphX和實時流處理的SparkStreaming,這些庫可以在同一個應用程序中實現(xiàn)無縫組合。Spark可以使用Hadoop的YARN和ApacheMesos作為資源管理和調度器,同時也實現(xiàn)了Standalone作為其內置的資源管理和調度框架,可以訪問不同的數(shù)據(jù)源,如HDFS、HBase、Cassandra、S3。10.1Spark概述1.Spark的運行架構Spark的運行架構主要由四部分組成:集群資源管理器(ClusterManager)、運行作業(yè)任務的工作結點(WorkerNode)、每個應用的任務控制結點(Driver)和每個工作結點上負責具體任務的執(zhí)行進程(Executor)。Spark的運行架構如圖所示。Driver負責運行用戶編寫的Spark應用程序的main函數(shù),并創(chuàng)建SparkContext,準備應用程序的運行環(huán)境。SparkContext負責與集群資源管理器通信,進行資源申請、任務的分配與監(jiān)控,啟動Executor進程并向Executor發(fā)送應用程序代碼和文件,當Executor進程執(zhí)行完后,Driver將SparkContext關閉。ClusterManager可以是Spark自帶的資源管理器(Standalone模式),也可以是Yarn或Mesos等資源管理器。WorkerNode是指集群中任何可以運行應用程序代碼的結點,在Standalone模式中指的是通過Slave文件配置的Worker結點,在SparkYarn模式中指的是NodeManager結點,在SparkMesos模式中指的是MesosSlave結點。Executor是運行在工作結點(WorkerNode)上的一個進程,負責運行Task(任務),并負責將數(shù)據(jù)存在內存或者磁盤上。10.2Spark的運行機制圖:Spark的運行架構10.2Spark的運行機制Spark采用的Executor進程有兩個優(yōu)點:一是Executor利用多線程來執(zhí)行具體的任務(HadoopMapReduce采用的是進程來執(zhí)行具體的任務),從而減少任務的啟動開銷;二是

Executor

中有一個BlockManager存儲模塊,會將內存和磁盤共同作為存儲設備,當需要多輪迭代計算時,可以將中間結果存儲到這個存儲模塊里,下次需要時,就可以直接讀該存儲模塊里的數(shù)據(jù),而不需要讀寫到

HDFS

等文件系統(tǒng)里,因而有效減少了I/O開銷;或者在交互式查詢場景下,預先將表緩存到該存儲系統(tǒng)上,從而提高讀寫I/O的性能。Spark的運行架構具有三個特點:每個應用都有自己專屬的Executor進程,并且該進程在應用運行期間一直存在;Spark的運行過程與資源管理器無關,只要能夠獲取Executor進程并保持通信即可;任務(Task)采用了數(shù)據(jù)本地化和推測執(zhí)行等優(yōu)化機制。10.2Spark的運行機制圖:Spark運行任務的基本流程10.2Spark的運行機制2.Spark運行任務的基本流程1)當一個Spark應用被提交時,首先需要為這個應用構建基本的運行環(huán)境,即由任務控制結點(Driver)創(chuàng)建一個

SparkContext,由

SparkContext

負責和資源管理器(ClusterManager)的通信以及進行資源的申請、任務的分配和監(jiān)控等。SparkContext會向資源管理器注冊并申請運行Executor的資源。2)資源管理器為Executor分配資源,并啟動Executor進程,Executor的運行情況會發(fā)送到資源管理器上。3)SparkContext根據(jù)RDD的依賴關系構建DAG圖,DAG圖提交給DAG調度器(DAGScheduler)進行解析,將DAG圖分解成多個階段(每個階段都是一個任務集),并且計算出各個階段之間的依賴關系,然后把一個個任務集提交給底層的任務調度器(TaskScheduler)進行處理;Executor向SparkContext申請任務,任務調度器將任務分發(fā)給Executor運行,同時,SparkContext將應用程序代碼發(fā)放給Executor。4)任務在Executor上運行,把執(zhí)行結果反饋給任務調度器,然后反饋給DAG調度器,運行完畢后寫入數(shù)據(jù)并釋放所有資源。10.2Spark的運行機制10.3.1

Standalone模式Standalone模式是Spark實現(xiàn)的資源調度框架,其主要的節(jié)點有Client節(jié)點、Master節(jié)點和Worker節(jié)點。其中Driver既可以運行在Master節(jié)點上,也可以運行在本地Client端。10.3.2

SparkYARN模式YARN是一種統(tǒng)一資源管理機制,在其上面可以運行多種計算框架。目前大多數(shù)公司除了使用Spark來進行數(shù)據(jù)計算,由于歷史原因或者單方面業(yè)務處理的性能考慮而使用著其他的計算框架,如MapReduce、Storm等。Spark基于此種情況開發(fā)了SparkonYARN的運行模式,由于借助了YARN良好的彈性資源管理機制,不僅部署Application更加方便,而且用戶在YARN集群中運行的服務和Application的資源也完全隔離,更具實踐應用價值的是YARN可以通過隊列的方式,管理同時運行在集群中的多個服務。SparkonYARN模式根據(jù)Driver在集群中的位置分為兩種模式:一種是YARN-Client模式,另一種是YARN-Cluster(或稱為YARN-Standalone模式)。10.3.2

SparkYARN模式1.YARN框架流程ResourceManager負責將集群的資源分配給各個應用使用,而資源分配和調度的基本單位是Container,其中封裝了機器資源,如內存、CPU、磁盤和網(wǎng)絡等,每個任務會分配一個Container,該任務只能在該Container中執(zhí)行,并使用該Container封裝的資源。NodeManager是一個個的計算節(jié)點,主要負責啟動Application所需的Container,監(jiān)控資源(內存、CPU、磁盤和網(wǎng)絡等)的使用情況并將之匯報給ResourceManager。ResourceManager與NodeManager共同組成整個數(shù)據(jù)計算框架,ApplicationMaster與具體的Application相關,主要負責同ResourceManager協(xié)商以獲取合適的Container,并跟蹤這些Container的狀態(tài)和監(jiān)控其進度。10.3.2

SparkYARN模式2.YARN-Cluster模式在YARN-Cluster模式中,當用戶向YARN中提交一個應用程序后,YARN將分兩個階段運行該應用程序:第一個階段是把Spark的Driver作為一個ApplicationMaster在YARN集群中先啟動;第二個階段是由ApplicationMaster創(chuàng)建應用程序,然后為它向ResourceManager申請資源,并啟動Executor來運行Task,同時監(jiān)控它的整個運行過程,直到運行完成。YARN-Cluster的工作流程如下所示:10.3.2

SparkYARN模式3.YARN-Client模式Yarn-Client模式中,Driver在客戶端本地運行,這種模式可以使得SparkApplication和客戶端進行交互,因為Driver在客戶端,所以可以通過webUI訪問Driver的狀態(tài),默認是http://master地址:4040訪問,而YARN通過http://master地址:8088訪問。YARN-Client的工作流程如下所示:10.3.3

SparkMesos模式Spark可以運行在ApacheMesos管理的硬件集群上。使用Mesos部署Spark的優(yōu)點有兩個:①Spark和其他framework之間的動態(tài)分區(qū);②可以在多個Spark實例之間進行可伸縮的分區(qū)。在獨立的集群部署中,如圖所示,集群管理器是一個Spark主節(jié)點(master)。在使用Mesos時,Mesosmaster會代替Sparkmaster作為集群管理器。10.3.3

SparkMesos模式Spark可以運行在ApacheMesos管理的硬件集群上。使用Mesos部署Spark的優(yōu)點有兩個:①Spark和其他framework之間的動態(tài)分區(qū);②可以在多個Spark實例之間進行可伸縮的分區(qū)。在獨立的集群部署中,如圖所示,集群管理器是一個Spark主節(jié)點(master)。在使用Mesos時,Mesosmaster會代替Sparkmaster作為集群管理器。10.3.3

SparkMesos模式當一個驅動程序創(chuàng)建一個作業(yè)并開始執(zhí)行調度任務時,Mesos將決定什么機器處理什么任務。多個框架可以在同一個集群上共存,而不必依賴于資源的無定向劃分。Mesos與YARN一樣,也分為client和cluster兩種模式。在client模式中,SparkMesos框架直接在客戶端機器上啟動,并等待驅動程序輸出,如果客戶端關閉,那么驅動程序停止運行。在Mesos的cluster模式中,driver程序在集群中運行,客戶端的關閉不影響程序的運行。Spark可以在Mesos的兩種模式下運行:粗粒度模式(coarse-grained)和細粒度模式(fine-grained),粗粒度是默認模式,但細粒度模式在Spark2.0后已被棄用。粗粒度模式下,Mesos在每臺機器上只啟動一個長期運行的Spark任務,而Spark任務則會作為其內部的“mini-tasks”來動態(tài)調度。這樣做的好處是,啟動延遲會比較低,但同時,也會增加一定的資源消耗,因為Mesos需要在整個生命周期內為這些長期運行的Spark任務保留其所需的資源。在細粒度模式下,每個Spark任務都作為獨立的Mesos任務運行。這使得多個Spark實例(或者其他計算框架)可以比較細粒度地共享機器資源,每個應用所獲得的機器資源也會隨著應用的啟動和關閉而增加或減少,但同時每個任務的啟動也會有相應的延遲。這種模式可能不適用于一些低延遲的場景,如交互式查詢,響應Web請求等。10.4SparkRDD

Spark

提供了一個主要的數(shù)據(jù)抽象是彈性分布式數(shù)據(jù)集(ResilientDistributedDatasets,RDD),是分布式內存的一個抽象概念。RDD

是跨集群的結點之間的一個集合,可以并行地進行操作。RDD

具有自動容錯、位置感知性調度和可伸縮性的特點,可以讓用戶數(shù)據(jù)存儲在磁盤和內存中,并能控制數(shù)據(jù)的分區(qū)。用戶還可以要求

Spark

在內存中持久化一個

RDD,以便在并行操作中高效地重用它。而且RDD可以從結點故障中自動恢復。對開發(fā)者而言,RDD可以看作是

Spark

的一個對象,它本身運行于內存中,如讀文件是一個

RDD,對文件計算是一個

RDD,結果集也是一個

RDD,不同的分片、數(shù)據(jù)之間的依賴、key-value類型的map數(shù)據(jù)都可以看作是RDD。10.4.1RDD的特點

通常數(shù)據(jù)處理的模型有四種:迭代算法(IterativeAlgorithms)、關系查詢(RelationalQueries)、MapReduce、流式處理(StreamProcessing)。Hadoop采用了MapReduce模型,Strom采用了流式處理模型。而RDD實現(xiàn)了以上四種模型,使得Spark可以應用于各種大數(shù)據(jù)處理場景。同時RDD還提供了一組豐富的操作來對數(shù)據(jù)進行計算。RDD的五大特征:Partition(分區(qū)):數(shù)據(jù)集的基本組成單位,一個RDD會有若干個分區(qū),分區(qū)的大小決定了并行計算的粒度,每個分區(qū)的計算都被一個單獨的任務處理。用戶可以在創(chuàng)建RDD時指定RDD的分區(qū)個數(shù),默認是程序所分配到的CPUCore的數(shù)目。Compute(Compute函數(shù)):是計算每個分區(qū)的函數(shù)。Spark中的計算都是以分區(qū)為基本單位的,每個RDD都會通過Compute函數(shù)來達到計算的目的。Compute函數(shù)只是對迭代器進行復合,并不保存每次計算的結果。Dependencies(依賴):RDD之間存在依賴關系,主要是寬窄依賴關系。如果RDD的每個分區(qū)最多只能被一個ChildRDD的一個分區(qū)使用,則稱之為窄依賴(narrowdependency)。若多個ChildRDD分區(qū)都可以依賴,則稱之為寬依賴(widedependency)。具有窄依賴關系的RDD可以在同一個stage中進行計算。10.4.1

RDD的特點

10.4.1

RDD的特點圖為:窄依賴關系圖為:寬依賴關系RDD的五大特征:Partitioner(分區(qū)函數(shù)):目前,Spark實現(xiàn)了兩種類型的分區(qū)函數(shù),一個是基于哈希的HashPartitioner,另一個是基于范圍的RangePartitioner。Partitioner只存在于key-value的RDD中,非key-value類型的RDD的Parititioner值是None。Partitioner函數(shù)不但決定了RDD本身的分片數(shù)量,也決定了parentRDDShuffle輸出時的分片數(shù)量。PreferedLocations(優(yōu)先位置):按照“移動數(shù)據(jù)不如移動計算”的原則,Spark在進行任務調度時,會優(yōu)先將任務分配到數(shù)據(jù)塊存儲的位置。10.4.1

RDD的特點RDD的兩種創(chuàng)建方式:(1)在驅動程序中并行化現(xiàn)有的集合。并行集合是通過在驅動程序(ScalaSeq)中的現(xiàn)有集合中調用SparkContext的parallelize()方法實現(xiàn)的。復制集合中的元素,形成可以并行操作的分布式數(shù)據(jù)集。如創(chuàng)建一個1-5的集合,對該集合進行并行化操作。scala>valdata=Array(1,2,3,4,5)data:Array[Int]=Array(1,2,3,4,5)scala>valrdd1=sc.parallelize(data)rdd1:org.apache.spark.rdd.RDD[Int]=ParallelCollectionRDD[2]atparallelizeat<console>:2610.4.2

RDD的創(chuàng)建(2)引用外部存儲系統(tǒng)中的數(shù)據(jù)集,如共享文件系統(tǒng)、HDFS、HBase或任何提供HadoopInputFormat的數(shù)據(jù)源。

Spark可以讀取Hadoop支持的任何存儲源來創(chuàng)建分布式數(shù)據(jù)集,包括本地文件系統(tǒng)、HDFS、Cassandra、HBase、AmazonS3等。通過調用SparkContext的textFile()方法創(chuàng)建文本文件RDD。該方法為文件選取一個路徑(在機器上的本地路徑,或hdfs://,s3n://等路徑),并將其作為行集合讀取。如讀取/home/student/data路徑下的movies.dat文件創(chuàng)建RDD。scala>valrdd2=sc.textFile("/home/student/data/movies.dat")rdd2:org.apache.spark.rdd.RDD[String]=/home/student/data/movies.datMapPartitionsRDD[4]attextFileat<console>:2410.4.2RDD的創(chuàng)建RDD支持兩種類型的操作:轉換(Transformation)和行動(Action)。轉換操作是從現(xiàn)有的數(shù)據(jù)集上創(chuàng)建新的數(shù)據(jù)集;行動操作是在數(shù)據(jù)集上運行計算后返回一個值給驅動程序,或把結果寫入外部系統(tǒng),觸發(fā)了實際運算。如map是一個轉換操作,通過函數(shù)傳遞數(shù)據(jù)集元素,并返回一個表示結果的新RDD。reduce是一個行動操作,它使用一些函數(shù)聚合RDD的所有元素,并將最終結果返回給驅動程序。查看返回值類型可以判斷函數(shù)是屬于轉換操作還是行動操作:轉換操作的返回值是RDD,行動操作的返回值是數(shù)據(jù)類型。Spark中的所有轉換都是惰性的,因為它們不會立即計算結果。相反,它們只記得應用于一些基本數(shù)據(jù)集(如文件)的轉換。只有當操作需要返回到驅動程序時,轉換所記錄的操作才會被計算。該設計使Spark能夠更高效地運行。如我們可以認識到通過map創(chuàng)建的數(shù)據(jù)集將被用于reduce,而只會將reduce的結果返回給驅動程序,而不是更大的映射數(shù)據(jù)集。10.4.3

RDD基本操作Spark最重要的功能之一是在內存中持久化(或緩存)數(shù)據(jù)集。對一個RDD進行持久化操作后,每個節(jié)點都將把計算的分區(qū)結果保存在內存中,并在該數(shù)據(jù)集(或其衍生的數(shù)據(jù)集)的其他操作中重新使用它們。持久化會加快后續(xù)操作執(zhí)行速度(通常超過10倍),緩存是迭代算法和快速交互查詢的關鍵工具??梢允褂胮ersist()方法或者cache()方法持久化一個RDD,但這兩個方法被調用時并沒有立即緩存,只有當?shù)谝淮卧诓僮髦杏嬎闼鼤r,該RDD將被保存在節(jié)點上的內存中,以供后續(xù)操作重用。Spark的緩存是容錯的——如果丟失了RDD的任何分區(qū),它將使用最初創(chuàng)建的轉換自動重新計算并創(chuàng)建出該分區(qū)。10.4.4

RDD持久化(緩存)另外,每個持久化的RDD都可以使用不同的存儲級別來存儲,如允許在磁盤上保存數(shù)據(jù)集,作為序列化的Java對象保存在內存中,還可以跨節(jié)點進行復制。這些級別是通過傳遞一個StorageLevel對象給persist()方法來進行設置的。cache()方法使用默認存儲級別—StorageLevel.MEMORY_ONLY(將反序列化的對象存儲在內存中)。10.4.4

RDD持久化(緩存)1.廣播變量廣播變量用于緩存所有節(jié)點上的內存值,允許程序員將只讀變量保存在每臺機器上,而不是將其復制到任務中。廣播變量可被用于有效地給每個節(jié)點提供一個大型輸入數(shù)據(jù)集的副本。Spark還嘗試使用高效的廣播算法來分配廣播變量,以降低通信成本。Spark動作通過一系列的步驟執(zhí)行,這些步驟由分布式的shuffle操作分隔。Spark會自動地在每個階段中廣播任務所需的公共數(shù)據(jù)。這些廣播數(shù)據(jù)以序列化形式緩存,并在運行每個任務之前進行反序列化。這意味著當我們需要在多個階段的任務之間使用相同的數(shù)據(jù),或者以反序列化形式緩存數(shù)據(jù)時,顯式地創(chuàng)建廣播變量才有用。

廣播變量通過在一個變量v上調用SparkContext.broadcast(v)方法創(chuàng)建。廣播變量是一個圍繞v的封裝,可以通過調用value方法來訪問。如:scala>valbroadcastVar=sc.broadcast(Array(1,2,3))broadcastVar:org.apache.spark.broadcast.Broadcast[Array[Int]]=Broadcast(0)scala>broadcastVar.value res0:Array[Int]=Array(1,2,3)10.4.5

Spark共享變量10.4.5

Spark共享變量2.累加器

累加器是被相關操作累加的變量,因此可以在并行中得到有效的支持。它們可以用于實現(xiàn)計數(shù)器或者求和。Spark原生地只支持數(shù)字類型的累加器,而程序員可以增加新類型的支持。

作為用戶,可以創(chuàng)建命名的或未命名的累加器。如圖所示,一個命名的累加器counter可在修改累加器的階段在Spark的Web界面中顯示,同時Spark任務表中顯示被任務修改的每個累加器的值。在UI中跟蹤累加器,有利于理解每個執(zhí)行階段的進程(注意:在Python中還沒有得到支持)10.4.5

Spark共享變量

數(shù)字累加器可以通過調用SparkContext.longAccumulator()或SparkContext.doubleAccumulator()來創(chuàng)建針對Long或者Double類型的累加器。在集群上運行的任務可以通過add方法進行累加操作,但是不能讀取它的值。只有驅動程序通過使用value方法才可以讀取累加器的值。下面的代碼顯示了如何把一個數(shù)組中的所有元素累加到累加器上。scala>valaccum=sc.longAccumulator("MyAccumulator")accum:org.apache.spark.util.LongAccumulator=LongAccumulator(id:0,name:Some(MyAccumulator),value:0)scala>sc.parallelize(Array(1,2,3,4)).foreach(x=>accum.add(x))...18/01/1918:41:08INFOSparkContext:Tasksfinishedin0.317106sscala>accum.valueres2:Long=1010.5.1

SparkSQLSparkSQL是Spark用來處理結構化數(shù)據(jù)的一個模塊。不同于SparkRDD的基本API,SparkSQL接口提供了更多關于數(shù)據(jù)結構和正在執(zhí)行的計算的信息。在Spark內部,SparkSQL利用這些信息去更好地進行優(yōu)化??赏ㄟ^SQL與DatasetAPI與SparkSQL進行交互。當相同的引擎被用來執(zhí)行一個計算時,有不同的API和語言種類可供選擇。這種統(tǒng)一性意味著開發(fā)人員可以來回輕松切換各種最熟悉的API來完成同一個計算工作。SparkSQL具有如下特征:(1)易整合:無縫地將SQL查詢與Spark程序整合。SparkSQL允許使用SQL或熟悉的DataFrameAPI在Spark程序中查詢結構化數(shù)據(jù)。支持Java、Scala、Python和R語言。(2)統(tǒng)一數(shù)據(jù)訪問方式:以同樣的方式連接到任何數(shù)據(jù)源。DataFrame和SQL提供了訪問各種數(shù)據(jù)源的常用方法,包括Hive、Avro、Parquet、ORC、JSON和JDBC。(3)兼容Hive:在現(xiàn)有倉庫上運行SQL或HiveQL查詢。SparkSQL支持HiveQL語法以及HiveSerDes和UDFs,允許訪問現(xiàn)有的Hive倉庫。(4)標準的數(shù)據(jù)連接:通過JDBC或ODBC連接。支持商業(yè)智能軟件等外部工具通過標準數(shù)據(jù)庫連接器(JDBC/ODBC)連接SparkSQL進查詢。10.5.2

SparkStreamingSparkStreaming是Spark核心API的一個擴展,它支持可伸縮、高吞吐量、容錯的處理實時數(shù)據(jù)流。支持從多種數(shù)據(jù)源獲取數(shù)據(jù),如Kafka、Flume、Kinesis和TCP套接字,獲取數(shù)據(jù)后可以通過map、reduce、join和window等高級函數(shù)對數(shù)據(jù)進行處理。最后,還可以將處理結果推送到文件系統(tǒng)、數(shù)據(jù)庫等。另外SparkStreaming也能和MLlib(機器學習)以及GraphX完美融合,如圖所示:

內部工作流程如下所示。SparkStreaming接收實時數(shù)據(jù)流并將數(shù)據(jù)分解成批處理,然后由SparkEngine處理,以批量生成最終的結果流。10.5.2

SparkStreamingSparkStreaming提供了一個高級抽象稱為discretizedstream或DStream,它代表連續(xù)的數(shù)據(jù)流和經(jīng)過各種Spark原語操作后的結果數(shù)據(jù)流。在內部,DStream用一系列連續(xù)的RDD來表示。每個RDD都包含來自特定時間間隔的數(shù)據(jù)。DStream可以由外部輸入源創(chuàng)建,也可以對其他DStream進行轉換操作得到新的DStream。對數(shù)據(jù)的操作也是以RDD為單位來進行的。在流數(shù)據(jù)分成一批一批后,生成一個先進先出的隊列,然后SparkEngine從該隊列中依次取出一個個批數(shù)據(jù),把批數(shù)據(jù)封裝成一個RDD,然后進行處理。10.5.3

GraphXGraphX是用于圖形并行計算的Spark中的一個新組件。GraphX的核心抽象是ResilientDistributedPropertyGraph,一種點和邊都帶屬性的有向多重圖。它擴展了SparkRDD的抽象,有Table和Graph兩種視圖,但只需

溫馨提示

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

評論

0/150

提交評論