版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Spark入門及實(shí)戰(zhàn),綱要,,Spark架構(gòu),3,,BDAS簡(jiǎn)介,4,,函數(shù)式編程簡(jiǎn)介,7,,Spark應(yīng)用實(shí)例,6,,Spark安裝部署,5,一、Spark綜述,Spark是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架。Spark基于內(nèi)存計(jì)算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實(shí)時(shí)性,同時(shí)保證了高容錯(cuò)性和高可伸縮性,允許用戶將Spark部署在大量廉價(jià)硬件之上,形成集群。Spark于2009年誕生于加州大學(xué)伯克利分校AMPLab。并且于2010年開源
2、。2013年6月Spark進(jìn)入Apache孵化器。目前,已經(jīng)成為Apache軟件基金會(huì)旗下的頂級(jí)開源項(xiàng)目。,http://people.csail.mit.edu/matei/,Matai zaharia,一、Spark綜述,Spark相比HadoopMapRedue的優(yōu)勢(shì)如下:1、中間結(jié)果輸出 基于MapReduce的計(jì)算模型會(huì)將中間結(jié)果序列化到磁盤上。而Spark將執(zhí)行模型抽象為通用的有向無(wú)環(huán)圖執(zhí)行計(jì)劃。且可以將中
3、間結(jié)果緩存內(nèi)存中。2、數(shù)據(jù)格式和內(nèi)存布局 Spark抽象出分布式內(nèi)存存儲(chǔ)結(jié)構(gòu)RDD,進(jìn)行數(shù)據(jù)存儲(chǔ)。Spark能夠控制數(shù)據(jù)在不同節(jié)點(diǎn)上的分區(qū),用戶可以自定義分區(qū)策略。,一、Spark綜述,3、執(zhí)行策略 MapReduce在數(shù)據(jù)shuffle之前總是花費(fèi)大量時(shí)間來(lái)排序。Spark支持基于Hash的分布式聚合,在需要的時(shí)候再進(jìn)行實(shí)際排序。4、任務(wù)調(diào)度的開銷 MapReduce上的不同作業(yè)在
4、同一個(gè)節(jié)點(diǎn)運(yùn)行時(shí),會(huì)各自啟動(dòng)一個(gè)JVM。而Spark同一節(jié)點(diǎn)的所有任務(wù)都可以在一個(gè)JVM上運(yùn)行。,一、Spark綜述,Spark生態(tài)隨著BDAS的完善,已經(jīng)成型。Spark全面兼容Hadoop的數(shù)據(jù)持久層。從而讓把計(jì)算任務(wù)從原來(lái)的MapReduce計(jì)算任務(wù)遷移到Spark中更加簡(jiǎn)單。目前Spark的工業(yè)應(yīng)用在國(guó)內(nèi)已經(jīng)大范圍落地。包括BAT在內(nèi)的一眾互聯(lián)網(wǎng)公司都建立了自己的Spark集群,綱要,,Spark架構(gòu),3,,BDAS簡(jiǎn)介,4
5、,,函數(shù)式編程簡(jiǎn)介,7,,Spark應(yīng)用實(shí)例,6,,Spark安裝部署,5,二、Spark關(guān)鍵技術(shù),RDD的全稱是彈性分布式數(shù)據(jù)集(resilient distributed dataset)是Spark的核心數(shù)據(jù)模型,RDD是Spark中待處理的數(shù)據(jù)的抽象,它是邏輯中的實(shí)體。對(duì)于使用者來(lái)說(shuō),你得到的數(shù)據(jù)操作接口就是RDD,在對(duì)RDD進(jìn)行處理的時(shí)候不需要考慮底層的分布式集群,就像在單機(jī)上一樣即可,這也正是Spark的優(yōu)勢(shì)之一。,二、
6、Spark關(guān)鍵技術(shù),從Hadoop文件系統(tǒng)輸入(比如HDFS)創(chuàng)建。從父RDD轉(zhuǎn)換得到新的RDD。將數(shù)組或者集合這樣的數(shù)據(jù)結(jié)構(gòu)并行化,轉(zhuǎn)化成RDD。通過(guò)cache()函數(shù)將計(jì)算后的RDD緩存到內(nèi)存中。,二、Spark關(guān)鍵技術(shù),,從邏輯上來(lái)看,RDD就是數(shù)據(jù)。而實(shí)際上,從物理上來(lái)看,RDD是一種分布式內(nèi)存的抽象。Spark中的數(shù)據(jù)實(shí)際上是像HDFS那樣分塊存儲(chǔ),二、Spark關(guān)鍵技術(shù),分區(qū)列表計(jì)算每個(gè)分片的函數(shù)對(duì)父RDD的依賴
7、對(duì)“鍵值對(duì)”數(shù)據(jù)類型RDD的分區(qū)器,控制分區(qū)策略和分區(qū)數(shù)。每個(gè)數(shù)據(jù)分區(qū)的地址列表。,所以RDD實(shí)際上只是一個(gè)元數(shù)據(jù)對(duì)象,用于將對(duì)數(shù)據(jù)集的操作映射到物理存儲(chǔ)之上。RDD的重要內(nèi)部屬性如下:,二、Spark關(guān)鍵技術(shù),RDD中的依賴關(guān)系RDD之間的依賴關(guān)系可以分為兩類:窄依賴:每個(gè)父 RDD 的分區(qū)都至多被一個(gè)子 RDD 的分區(qū)使用;窄依賴允許在單個(gè)集群節(jié)點(diǎn)上流水線式執(zhí)行,這個(gè)節(jié)點(diǎn)可以計(jì)算所有父級(jí)分區(qū)。在窄依賴中,節(jié)點(diǎn)失敗后的恢
8、復(fù)更加高效。因?yàn)橹挥衼G失的父級(jí)分區(qū)需要重新計(jì)算,并且這些丟失的父級(jí)分區(qū)可以并行地在不同節(jié)點(diǎn)上重新計(jì)算。 寬依賴:多個(gè)子 RDD 的分區(qū)依賴一個(gè)父 RDD 的分區(qū)。寬依賴需要所有的父 RDD 數(shù)據(jù)可用并且數(shù)據(jù)已經(jīng)通過(guò)類 MapReduce 的操作shuffle 完成。在寬依賴的繼承關(guān)系中,單個(gè)失敗的節(jié)點(diǎn)可能導(dǎo)致一個(gè) RDD 的所有先祖 RDD 中的一些分區(qū)丟失,導(dǎo)致計(jì)算的重新執(zhí)行。,二、Spark關(guān)鍵技術(shù),寬依賴和窄依賴的樣例。
9、每一個(gè)方框表示一個(gè) RDD,其內(nèi)的陰影矩形表示 RDD 的分區(qū)。,二、Spark關(guān)鍵技術(shù),TransformationTransformation操作是延遲計(jì)算的,也就是說(shuō)從一個(gè)RDD轉(zhuǎn)換生成另一個(gè)RDD的轉(zhuǎn)換操作不是立即執(zhí)行的,而是需要等到Action操作是才真正出發(fā)運(yùn)算。ActionAction算子會(huì)觸發(fā)Spark提交作業(yè),并將數(shù)據(jù)輸出到Spark系統(tǒng)。,RDD操作算子,RDD中的操作算子可以分為兩類:Transforma
10、tion(變換)算子 與 Action(行動(dòng))算子。,二、Spark關(guān)鍵技術(shù),RDD算子操作舉例如下:,Val line = sc.textFile(Test.txt)line.map(n=>Integer.parseInt(n)*Integer.parseInt(n)).reduce(_+_),二、Spark關(guān)鍵技術(shù),二、Spark關(guān)鍵技術(shù),基于血統(tǒng)的容錯(cuò)機(jī)制(lineage):在spark中RDD具有不變性,在數(shù)據(jù)處理過(guò)程
11、中,spark通過(guò)lineage圖記錄了各個(gè)RDD之間的變換關(guān)系,一旦某個(gè)數(shù)據(jù)處理過(guò)程出現(xiàn)錯(cuò)誤,spark可以根據(jù)lineage圖快速進(jìn)行容錯(cuò)恢復(fù)。特別是對(duì)于map操作來(lái)說(shuō),當(dāng)某個(gè)節(jié)點(diǎn)的任務(wù)失敗,spark只需要重新計(jì)算相應(yīng)分區(qū)的數(shù)據(jù),而不必將整個(gè)任務(wù)重新計(jì)算。在很多分布式數(shù)據(jù)處理系統(tǒng)中通過(guò)備份來(lái)進(jìn)行容錯(cuò),相比于這種會(huì)導(dǎo)致巨大存儲(chǔ)消耗的容錯(cuò)方式,spark的lineage圖只需要十幾kb的存儲(chǔ)空間。Spark允許用戶將數(shù)據(jù)c
12、ache下來(lái),對(duì)于將來(lái)可能頻繁使用的某個(gè)計(jì)算結(jié)果,將這個(gè)RDDcache下來(lái)是明智的選擇。,二、Spark關(guān)鍵技術(shù),檢查點(diǎn)支持:雖然 lineage 可用于錯(cuò)誤后 RDD 的恢復(fù),但對(duì)于很長(zhǎng)的 lineage 的 RDD 來(lái)說(shuō),這樣的恢復(fù)耗時(shí)較長(zhǎng)。由此,可以考慮將某些 RDD 進(jìn)行檢查點(diǎn)操作(Checkpoint)保存到穩(wěn)定存儲(chǔ)上。Spark 當(dāng)前提供了為 RDD 設(shè)置檢查點(diǎn)操作的 API , 讓用戶自行決定需要為哪些數(shù)據(jù)設(shè)置檢
13、查點(diǎn)操作。由于 RDD 的只讀特性使得比常用的共享內(nèi)存更容易做 checkpoint.由于不需要關(guān)心一致性的問題,RDD 的寫出可在后臺(tái)進(jìn)行,而不需要程序暫?;蜻M(jìn)行分布式快照,綱要,,BDAS簡(jiǎn)介,4,,Scala簡(jiǎn)介,7,,Spark應(yīng)用實(shí)例,6,,Spark安裝部署,5,三、Spark體系架構(gòu),MasterWorker,三、Spark體系架構(gòu),三、Spark體系架構(gòu),Master進(jìn)程和Worker進(jìn)程,對(duì)整個(gè)集群進(jìn)行控制。
14、Driver 程序是應(yīng)用邏輯執(zhí)行的起點(diǎn),負(fù)責(zé)作業(yè)的調(diào)度,即Task任務(wù)的分發(fā)Worker用來(lái)管理計(jì)算節(jié)點(diǎn)和創(chuàng)建Executor并行處理任務(wù)。Executor對(duì)相應(yīng)數(shù)據(jù)分區(qū)的任務(wù)進(jìn)行處理。,三、Spark體系架構(gòu),Client 提交應(yīng)用,Master找到一個(gè)Worker啟動(dòng)DriverDriver向Master或者資源管理器申請(qǐng)資源,之后將應(yīng)用轉(zhuǎn)化為RDD GraphDAGScheduler將RDD Graph轉(zhuǎn)化為Sta
15、ge的有向無(wú)環(huán)圖提交給TaskSchedulerTaskScheduler提交任務(wù)給Executor執(zhí)行。,綱要,,Spark架構(gòu),3,,Scala簡(jiǎn)介,7,,Spark應(yīng)用實(shí)例,6,,Spark安裝部署,5,四、BDAS簡(jiǎn)介,目前,Spark已經(jīng)發(fā)展成為包含眾多子項(xiàng)目的大數(shù)據(jù)計(jì)算平臺(tái)。伯克利將Spark的整個(gè)生態(tài)系統(tǒng)稱為伯克利數(shù)據(jù)分析棧(BDAS),目前包含四個(gè)已經(jīng)比較成熟的組件。,四、BDAS簡(jiǎn)介,談到Spark SQL:首先需
16、要從Shark說(shuō)起。,四、BDAS簡(jiǎn)介,,為了給熟悉RDBMS但又不理解MapReduce的技術(shù)人員提供快速上手的工具,Hive應(yīng)運(yùn)而生,它是當(dāng)時(shí)唯一運(yùn)行在Hadoop上的SQL-on-Hadoop工具。但是MapReduce計(jì)算過(guò)程中大量的中間磁盤落地過(guò)程消耗了大量的I/O,降低的運(yùn)行效率,為了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具開始產(chǎn)生。其中就包括Shark,四、BDAS簡(jiǎn)介,Shark基于Hi
17、ve修改了內(nèi)存管理、物理計(jì)劃、執(zhí)行三個(gè)模塊,并使之能運(yùn)行在Spark引擎上,從而使得SQL查詢的速度得到10-100倍的提升,四、BDAS簡(jiǎn)介,Shark缺陷:Shark對(duì)于Hive的太多依賴,制約了Spark的One Stack Rule Them All的既定方針,制約了Spark各個(gè)組件的相互集成SparkSQL拋棄原有Shark的代碼,汲取了Shark的一些優(yōu)點(diǎn),如內(nèi)存列存儲(chǔ)(In-Memory Columnar Stor
18、age)、Hive兼容性等,重新開發(fā)了SparkSQL代碼;由于擺脫了對(duì)Hive的依賴性,SparkSQL無(wú)論在數(shù)據(jù)兼容、性能優(yōu)化、組件擴(kuò)展方面都得到了極大的方便,四、BDAS簡(jiǎn)介,*數(shù)據(jù)兼容方面 不但兼容Hive,還可以從RDD、JSON文件中獲取數(shù)據(jù)*性能優(yōu)化方面 采取In-Memory Columnar Storage、byte-code generation等優(yōu)化技術(shù)*組件擴(kuò)展方面 無(wú)論是SQL的語(yǔ)法解析器、分
19、析器還是優(yōu)化器都可以重新定義,進(jìn)行擴(kuò)展。,四、BDAS簡(jiǎn)介,,Spark SQL是一個(gè)用于結(jié)構(gòu)化的數(shù)據(jù)處理的模塊。Spark SQL和Spark RDD API的區(qū)別如下:1、Spark SQL的接口提供更多的關(guān)于數(shù)據(jù)以及操作的結(jié)構(gòu)方面的信息。2、Spark SQL會(huì)利用這些信息對(duì)數(shù)據(jù)操作進(jìn)行額外的優(yōu)化??梢酝ㄟ^(guò)三種方式與Spark SQL進(jìn)行交互:SQL、DataFrames API 、Datasets API這三種API
20、/語(yǔ)言最終都同一個(gè)執(zhí)行引擎完成操作。所以你可以選擇任何一種舒服的方式來(lái)書寫自己的數(shù)據(jù)處理邏輯。,四、BDAS簡(jiǎn)介,,Spark SQL的使用方式之一是用來(lái)執(zhí)行SQL查詢。特性如下:同時(shí)支持標(biāo)準(zhǔn)的SQL語(yǔ)句和HiveQL能夠從Hive表中讀取數(shù)據(jù)(需要進(jìn)行配置)查詢結(jié)果將返回一個(gè)DataFrame支持在交互式環(huán)境中使用SQL語(yǔ)句,四、BDAS簡(jiǎn)介,,DataFrame用來(lái)描述結(jié)構(gòu)化的數(shù)據(jù)。Spark官方給出的定義為:
21、A DataFrame is a distributed collection of data organized into named columns.DataFrame概念上等同于關(guān)系型數(shù)據(jù)庫(kù)中的一個(gè)表或者R/Python語(yǔ)言中的data frame, 不同的是Spark提供更豐富的優(yōu)化。DataFrame可從多種資源中構(gòu)建:結(jié)構(gòu)化的數(shù)據(jù)文件、hive中的表、外部數(shù)據(jù)庫(kù)、現(xiàn)有的RDD等。DataFrame提供
22、了豐富的API。,四、BDAS簡(jiǎn)介,Spark Streaming是建立在Spark上的實(shí)時(shí)計(jì)算框架,通過(guò)它提供的豐富的API、基于內(nèi)存的高速執(zhí)行引擎,用戶可以結(jié)合流式、批處理和交互試查詢應(yīng)用。Spark Streaming通過(guò)將流數(shù)據(jù)按指定時(shí)間片累積為RDD,然后將每個(gè)RDD進(jìn)行批處理,進(jìn)而實(shí)現(xiàn)大規(guī)模的流數(shù)據(jù)處理。其吞吐量能夠超越現(xiàn)有主流流處理框架Storm,并提供豐富的API用于流數(shù)據(jù)計(jì)算。,四、BDAS簡(jiǎn)介,Spark Str
23、eaming是將流式計(jì)算分解成一系列短小的批處理作業(yè)。把Spark Streaming的輸入數(shù)據(jù)按照batch size(如1秒)分成一段一段的數(shù)據(jù),每一段數(shù)據(jù)都轉(zhuǎn)換成Spark中的RDD將Spark Streaming中對(duì)DStream的Transformation操作變?yōu)獒槍?duì)Spark中對(duì)RDD的Transformation操作將RDD經(jīng)過(guò)操作變成中間結(jié)果保存在內(nèi)存中。整個(gè)流式計(jì)算根據(jù)業(yè)務(wù)的需求可以對(duì)中間的結(jié)果進(jìn)行疊加,或者
24、存儲(chǔ)到外部設(shè)備。,四、BDAS簡(jiǎn)介,四、BDAS簡(jiǎn)介,處理模型,延遲:Storm處理的是每次傳入的一個(gè)事件,而Spark Streaming是處理某個(gè)時(shí)間段窗口內(nèi)的事件流。容錯(cuò)、數(shù)據(jù)保證:Spark Streaming使用Spark的血統(tǒng)容錯(cuò)機(jī)制,Storm單獨(dú)跟蹤每條記錄,在錯(cuò)誤恢復(fù)時(shí)可能出錯(cuò)。另一方面,Spark Streaming只需要在批級(jí)別進(jìn)行跟蹤處理,因此即便一個(gè)節(jié)點(diǎn)發(fā)生故障,也可以有效地保證每個(gè)batch將完全被處
25、理一次。簡(jiǎn)而言之,如果你需要秒內(nèi)的延遲,Storm是一個(gè)不錯(cuò)的選擇,而且沒有數(shù)據(jù)丟失。如果你需要有狀態(tài)的計(jì)算,而且要完全保證每個(gè)事件只被處理一次,Spark Streaming則更好。,四、BDAS簡(jiǎn)介,Graphx是Spark生態(tài)中的非常重要的組件,可以對(duì)圖這種數(shù)據(jù)結(jié)構(gòu)進(jìn)行并行的處理計(jì)算。GraphX基于BSP(整體同步并行計(jì)算模型)模型,在Spark之上封裝類似Pregel(google的圖計(jì)算框架)的接口。GraphX
26、通過(guò)引入**Resilient Distributed Property Graph**擴(kuò)展了Spark RDD這種抽象數(shù)據(jù)結(jié)構(gòu),四、BDAS簡(jiǎn)介,四、BDAS簡(jiǎn)介,graphx借鑒powerGraph,使用的是vertexcut(點(diǎn)分割)方式存儲(chǔ)圖。,優(yōu)點(diǎn):任何一條邊只會(huì)出現(xiàn)在一臺(tái)機(jī)器上,對(duì)邊的操作進(jìn)行起來(lái)比較簡(jiǎn)單。網(wǎng)絡(luò)開銷小,缺點(diǎn):每個(gè)點(diǎn)可能要存儲(chǔ)多份, 更新點(diǎn)要有數(shù)據(jù)同步開銷。,四、BDAS簡(jiǎn)介,1、對(duì)Graph視圖的所有操作
27、,最終都會(huì)轉(zhuǎn)換成其關(guān)聯(lián)的Table視圖的RDD操作來(lái)完成。2、兩種視圖底層共用的物理數(shù)據(jù),由RDD[Vertex-Partition]和RDD[EdgePartition]這兩個(gè)RDD組成。3、圖的分布式存儲(chǔ)采用點(diǎn)分割模式,而且使用partitionBy方法,由用戶指定不同的劃分策略。,四、BDAS簡(jiǎn)介,MLlib是構(gòu)建在Spark上的分布式機(jī)器學(xué)習(xí)庫(kù),充分利用了Spark的內(nèi)存計(jì)算和適合迭代型計(jì)算的優(yōu)勢(shì),使性能大幅提升,同時(shí)S
28、park算子豐富的表現(xiàn)力,讓大規(guī)模機(jī)器學(xué)習(xí)的算法開發(fā)不再?gòu)?fù)雜。MLlib包含了分類、回歸、聚類、協(xié)同過(guò)濾、數(shù)據(jù)降維等基本機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)。使用者也能夠根據(jù)自己的業(yè)務(wù)需要,在這些算法之上進(jìn)行進(jìn)一步開發(fā)。,綱要,,Spark架構(gòu),3,,BDAS簡(jiǎn)介,4,,函數(shù)式編程簡(jiǎn)介,7,,Spark應(yīng)用開發(fā)實(shí)戰(zhàn),6,五、Spark安裝部署,Spark有三種部署模式:1、standalone2、Spark on Yarn3、Spark o
29、n Mesos,五、Spark安裝部署,自帶完整的服務(wù),包括資源調(diào)度和文件管理都由自己完成,可單獨(dú)部署到一個(gè)集群中。無(wú)需依賴任何其他資源管理系統(tǒng)。目前Spark在standalone模式下是沒有任何單點(diǎn)故障問題的,這是借助zookeeper實(shí)現(xiàn)的,思想類似于Hbase master單點(diǎn)故障解決方案。,五、Spark安裝部署,Mesos是AMPlab開發(fā)的資源調(diào)度器,Spark可以在其上以插件的形式運(yùn)行。正因?yàn)镸esos與Spar
30、k同出一源,所以Spark運(yùn)行在Mesos更加靈活,自然。Spark On Mesos有兩種調(diào)度模式:粗粒度模式(Coarse-grained Mode)細(xì)粒度模式(Fine-grained Mode),五、Spark安裝部署,這是一種最有前景的部署模式。但限于YARN自身的發(fā)展,目前僅支持粗粒度模式(Coarse-grained Mode)。,YARN上的Container資源是不可以動(dòng)態(tài)伸縮的,一旦Container啟動(dòng)
31、之后,可使用的資源不能再發(fā)生變化,不過(guò)這個(gè)已經(jīng)在YARN計(jì)劃中了。,五、Spark安裝部署,給大家演示Spark on Yarn的部署過(guò)程。部署在最簡(jiǎn)單的集群之上:兩個(gè)節(jié)點(diǎn),一個(gè)master和一個(gè)slave服務(wù)器操作系統(tǒng)是ubuntu12Hadoop版本:2.2.0Spark版本:1.0.2JDK版本:1.7Scala版本:2.10.4Master:192.168.1.131Slave:192.168.1.125,五、S
32、park安裝部署,首先安裝Scala:下載地址:http://www.scala-lang.org/download/下載完成后將Scala-2.10.4.tgz上傳至linux主機(jī)中,解壓: tar -zxvf Scala-2.10.4.tgz -C /cloud/ 配置環(huán)境變量:在/etc/profile文件中添加: export SCALA_HOME=/cloud/scala-2.10.4 export P
33、ATH=${SCALA_HOME}/bin:$PATH 保存退出, source /etc/profile 使配置生效。,五、Spark安裝部署,安裝Spark進(jìn)入官網(wǎng)下載Spark程序包,下載地址:http://spark.apache.org/downloads.html下載spark-1.0.2-bin-hadoop2.tgz解壓: tar-zxvf spark-1.0.2-bin-hadoop2.tgz -C /
34、cloud 接下來(lái)修改Spark的配置文件,這里對(duì)Spark進(jìn)行簡(jiǎn)單配置,五、Spark安裝部署,1、修改conf/spark-env.sh,在文件中添加以下參數(shù): export SCALA_HOME=/cloud/scala-2.10.4 export JAVA_HOME=/cloud/jdk1.7.0_80 export SPARK_WORKER_MEMORY=6g export SPARK_MASTER_IP=
35、192.168.1.131 export MASTER=spark://192.168.1.131:7077 2、修改conf/slaves文件:本次示例集群有兩個(gè)節(jié)點(diǎn),一個(gè)master節(jié)點(diǎn)和一個(gè)slave1節(jié)點(diǎn)。所以在slaves文件中只需要添加: slave1,五、Spark安裝部署,接下來(lái)同步至slave節(jié)點(diǎn):首先,同步scala。scp -r /cloud/scala-2.10.4username@master:
36、/cloud 然后是spark: scp -r /cloud/spark-1.0.2-bin-hadoop2/ username@master:/cloud/ 最后修改slave1上的 /etc/profile 文件和master節(jié)點(diǎn)一致。記得source /etc/profile。提示:如果有多個(gè)從節(jié)點(diǎn),這樣同步會(huì)很麻煩,可以用pssh批量操作。,五、Spark安裝部署,啟動(dòng)Spark首先啟動(dòng)Hadoop:Sta
37、rt-all.sh然后啟動(dòng)Sparkcd /cloud/spark-1.0.2-bin-hadoop2/sbin ./start-all.sh 正常情況下,master節(jié)點(diǎn)會(huì)出現(xiàn)master進(jìn)程,可以用jps查看:,#jps23489 Jps1258 Worker1364 DataNode24587 NodeManager,#jps23526 Jps2112 Master7235 NameNode7598
38、SecondaryNameNode7569 ResourceManagerworker節(jié)點(diǎn)會(huì)有worker進(jìn)程:,綱要,,Spark架構(gòu),3,,BDAS簡(jiǎn)介,4,,函數(shù)式編程簡(jiǎn)介,7,,Spark安裝部署,5,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),Wordcount相當(dāng)于大數(shù)據(jù)應(yīng)用程序中的“Hello World”本次演示的WordCount是在eclipse下編寫目前大部分的Scala開發(fā)者都比較推崇IntelliJ IDEA。如果
39、電腦配置還不錯(cuò)的話,推薦用這個(gè)IDEA.以上開發(fā)工具都可以在Scala官網(wǎng)找到下載鏈接http://scala-ide.org/,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),首先FIle->New->Scala project :新建一個(gè)Scala工程,名稱就叫TestSpark_01好了。JRE選擇1.7/1.8都可以。,然后在工程中的src文件夾上面右擊->new ->Package,建立一個(gè)包。最后在包上面右擊-
40、>New->Scala Object,這里要注意一下,選擇的是Scala Object,而不是 Scala Class。,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),注意在寫代碼之前一定要先導(dǎo)入相關(guān)的依賴。首先要將工程中自動(dòng)生成的Scala library container文件夾刪除,否則工程會(huì)由于Scala版本沖突出現(xiàn)錯(cuò)誤。然后在Spark安裝目錄的lib目錄下找到spark-assembly-1.3.0-hadoop2.3.0
41、.jar這個(gè)文件,以“spark-assembly-”開頭,后面的因版本而異。這個(gè)就是Spark程序的依賴jar包。在工程上右擊,新建一個(gè)名為lib的文件夾,將jar包復(fù)制過(guò)來(lái),然后在jar包上右擊->buildpath->add to buildpath即可。,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),1.package cn.hunan 2. 3.import org.apache.spark._ 4.impo
42、rt org.apache.spark.SparkContext._ 5. 6.object WordCount { 7. def main(args: Array[String]){ 8. val conf = new SparkConf() 9. val sc = new SparkContext(conf) 10. val line = sc.textFile(args(0)
43、) 11. val result = line.flatMap(_.split("[^a-zA-Z]+")).map((_, 1)).reduceByKey(_+_) 13. result.saveAsTextFile(args(1)) 14. sc.stop() 15. } 16.},六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),接下來(lái)就可以導(dǎo)出jar包了。在Wor
44、dCount.Scala文件上右擊->Export,然后選擇JAR file,包名為WC.jar,存放在E:\myjar目錄下。接下來(lái)需要把Jar包上傳至Spark集群。我用的是SecureCRT這個(gè)工具,用這個(gè)工具鏈接master節(jié)點(diǎn)后,按alt+p即可調(diào)出SFTP文件傳輸窗口。,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),在HDFS上傳一個(gè)測(cè)試文本,用于wordcount。hadoop fs -put Jane1.txt /Spark/Ja
45、ne1.txt,切換到目錄SPARK_HOME/bin目錄下:在linux shell中執(zhí)行以下命令:./spark-submit --class cn.hunan.WordCount --master yarn ~/HunanJar/WC.jar /Spark/Jane1.txt /Spark/out,六、Spark應(yīng)用開發(fā)實(shí)戰(zhàn),等待執(zhí)行結(jié)束后就可以看到在
46、HDFS://Spark/out目錄下生成了以下文件:,七、函數(shù)式編程簡(jiǎn)介,Scala是Spark的原生語(yǔ)言。而Spark又是一個(gè)開源項(xiàng)目,開源項(xiàng)目一般是免費(fèi)供大家使用,源代碼也是完全公開。這是開源的優(yōu)勢(shì)。但是開源軟件正因?yàn)槭敲赓M(fèi)的,所以在遇到問題的時(shí)候,軟件作者并沒有義務(wù)為你解決問題,如果用的是收費(fèi)的商業(yè)軟件,就有很多的售后支持。所以,對(duì)于開源使用者來(lái)說(shuō),了解源碼是必須要做的功課。而且這些源碼都是世界頂尖的程序猿所寫,在閱讀源代碼的
47、過(guò)程中也能夠?qū)W到很多編程的技巧。,Scala是一門多范式的編程語(yǔ)言,并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。這種語(yǔ)言和Java語(yǔ)言一樣,運(yùn)行在Java虛擬機(jī)JVM之上所以,Scala能夠和Java無(wú)縫集成,只要將jar包導(dǎo)進(jìn)來(lái),里面的類可以隨便用。所以Java程序猿能夠很快上手Scala。對(duì)于熟悉Python的同學(xué)來(lái)說(shuō)也同樣。,七、函數(shù)式編程簡(jiǎn)介,Scala作為一個(gè)多范式編程語(yǔ)言。雖然Scala不強(qiáng)求開發(fā)者使用函數(shù)式編程,不強(qiáng)
48、求變量都是不可變的(通過(guò)val定義的),但是還是鼓勵(lì)使用函數(shù)式編程?,F(xiàn)在的計(jì)算機(jī)都是多核CPU,想充分利用其多核處理,我們需要寫可并行計(jì)算的代碼。而函數(shù)式編程在并行操作性有著天生的優(yōu)勢(shì),函數(shù)式編程沒有可變變量,那么就不會(huì)有內(nèi)存共享的問題,也不會(huì)產(chǎn)生副作用(side effect)的函數(shù)。下面介紹函數(shù)式編程的五大特性。,七、函數(shù)式編程簡(jiǎn)介,在面向?qū)ο缶幊讨校覀儼褜?duì)象作為編程中的第一類對(duì)象,所有代碼的編寫都是圍繞對(duì)象來(lái)編程。那么函數(shù)式
49、編程中,我們的第一類對(duì)象就是函數(shù),也叫做 閉包 或者 仿函數(shù) (functor)對(duì)象。而高階函數(shù)的意思則是用另一個(gè)函數(shù)作為參數(shù),甚至可以返回一個(gè)函數(shù)的叫做 高階函數(shù) 。,七、函數(shù)式編程簡(jiǎn)介,無(wú)副作用函數(shù)副作用維基百科的解釋是:指當(dāng)調(diào)用函數(shù)時(shí),除了返回函數(shù)值之外,還對(duì)主調(diào)用函數(shù)產(chǎn)生附加的影響。簡(jiǎn)單來(lái)說(shuō)就是調(diào)用函數(shù)時(shí),函數(shù)執(zhí)行過(guò)程中不會(huì)改變參數(shù)的值。在函數(shù)式編程中需要極力避免可變變量,因此才能徹底避免函數(shù)的副作用。 Var x
50、= 1 Def XplusY(y : Int) = { x += y; x },七、函數(shù)式編程簡(jiǎn)介,七、函數(shù)式編程簡(jiǎn)介,尾遞歸是遞歸的一種優(yōu)化方法。因?yàn)檫f歸的空間效率很低,而且如果遞歸深度很深,容易產(chǎn)生棧溢出的情況。尾遞歸就是將遞歸語(yǔ)句寫在函數(shù)的最底部,這樣尾遞歸的每次調(diào)用的時(shí)候,不需要保存當(dāng)前狀態(tài),而是把當(dāng)前的狀態(tài)值直接傳給下次一次調(diào)用,然后清空當(dāng)前的狀態(tài)。那么占用的??臻g就是常量值了,不會(huì)出現(xiàn)棧的溢出。,惰性 求值 特別用于
51、函數(shù)式編程語(yǔ)言 中。在使用延遲求值的時(shí)候,表達(dá)式不在它被綁定到變量之后就立即求值,而是在該值被取用的時(shí)候求值 。 除可以得到性能的提升外,惰性計(jì)算的最重要的好處是它可以構(gòu)造一個(gè)無(wú)限的數(shù)據(jù)類型。,七、函數(shù)式編程簡(jiǎn)介,引用透明(Referential Transparent)的概念與函數(shù)的副作用相關(guān),且受其影響。 如果程序中兩個(gè)相同值得表達(dá)式能在該程序的任何地方互相替換,而不影響程序的動(dòng)作,那么該程序就具有引用透明性。它的優(yōu)點(diǎn)是比非
52、引用透明的語(yǔ)言的語(yǔ)義更容易理解,不那么晦澀。純函數(shù)式語(yǔ)言沒有變量,所以它們都具有引用透明性。,七、函數(shù)式編程簡(jiǎn)介,八、相關(guān)資源,An Architecture for Fast and General Data Processing on Large Clusters,http://spark.apache.org/docs/latest/,Q1:請(qǐng)敘述RDDs之間的兩種依賴方式及特性。Q2:簡(jiǎn)述在Spark框架中應(yīng)用的執(zhí)行流程。,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大數(shù)據(jù)技術(shù)及應(yīng)用培訓(xùn)
- 大數(shù)入門
- 基于Spark的情報(bào)大數(shù)據(jù)可視化分析.pdf
- 基于Spark平臺(tái)大數(shù)據(jù)推薦系統(tǒng)的研究.pdf
- 基于Spark的大數(shù)據(jù)挖掘技術(shù)的研究與實(shí)現(xiàn).pdf
- 基于Spark大數(shù)據(jù)平臺(tái)的火電廠節(jié)能分析.pdf
- 基于Spark的大數(shù)據(jù)清洗框架設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Spark的大數(shù)據(jù)處理關(guān)鍵技術(shù)研究.pdf
- 基于Spark大數(shù)據(jù)平臺(tái)日志審計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Spark的地理空間大數(shù)據(jù)查詢處理技術(shù)研究.pdf
- 基于Kubernetes的大數(shù)據(jù)流式計(jì)算Spark平臺(tái)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 公需科目大數(shù)據(jù)培訓(xùn)考試
- 大數(shù)據(jù)時(shí)代數(shù)據(jù)安全防護(hù)最佳實(shí)踐
- 公需科目大數(shù)據(jù)培訓(xùn)考試試題及答案
- 2017年公需科目大數(shù)據(jù)培訓(xùn)考試及答案
- 公需科目大數(shù)據(jù)培訓(xùn)考試試題及答案
- 大數(shù)據(jù)研究論文翻譯實(shí)踐報(bào)告.pdf
- 《大數(shù)據(jù)銀行》(節(jié)選)翻譯實(shí)踐報(bào)告.pdf
- 公需科目大數(shù)據(jù)培訓(xùn)考試答案
- 省公需科目大數(shù)據(jù)培訓(xùn)考試
評(píng)論
0/150
提交評(píng)論