本篇內(nèi)容主要講解“Spark的性能特點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark的性能特點有哪些”吧!
專注于為中小企業(yè)提供網(wǎng)站設計、網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)陸港免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
Spark:
Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設計的快速通用的計算引擎。
Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark擁有Hadoop MapReduce所具有的優(yōu)點;但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機器學習等需要迭代的MapReduce的算法。
Spark 是一種與 Hadoop 相似的開源集群計算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載。
Spark 是在 Scala 語言中實現(xiàn)的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統(tǒng)中并行運行。通過名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發(fā),可用來構(gòu)建大型的、低延遲的數(shù)據(jù)分析應用程序。
Spark的性能特點:
1.更快的速度:內(nèi)存計算下,Spark 比 Hadoop 快100倍。
內(nèi)存計算引擎,提供Cache機制來支持需要反復迭代計算或者多次數(shù)據(jù)共享,減少數(shù)據(jù)讀取的I/O開銷
DAG引擎,減少多次計算之間中間結(jié)果寫到HDFS的開銷;
使用多線程池模型來減少task啟動開銷,shuffle過程中避免不必要的sort操作已經(jīng)減少磁盤I/O操作;
2.易用性:
Spark 提供了80多個高級運算符。
提供了豐富的API,支持JAVA,Scala,Python和R四種語言;
代碼量比MapReduce少2~5倍;
3.通用性:Spark 提供了大量的庫,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。 開發(fā)者可以在同一個應用程序中無縫組合使用這些庫。
4.支持多種資源管理器:Spark 支持 Hadoop YARN,Apache Mesos,及其自帶的獨立集群管理器
Spark基本原理:
Spark Streaming:構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本的原理是將Stream數(shù)據(jù)分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數(shù)據(jù)。Spark Streaming構(gòu)建在Spark上,一方面是因為Spark的低延遲執(zhí)行引擎(100ms+),雖然比不上專門的流式數(shù)據(jù)處理軟件,也可以用于實時計算,另一方面相比基于Record的其它處理框架(如Storm),一部分窄依賴的RDD數(shù)據(jù)集可以從源數(shù)據(jù)重新計算達到容錯處理目的。此外小批量處理的方式使得它可以同時兼容批量和實時數(shù)據(jù)處理的邏輯和算法。方便了一些需要歷史數(shù)據(jù)和實時數(shù)據(jù)聯(lián)合分析的特定應用場合。
Spark背景:
1.MapReduce局限性:
1.僅支持Map和Reduce兩種操作;
2.處理效率低效;不適合迭代計算(如機器學習、圖計算等),交互式處理(數(shù)據(jù)挖掘)和流失處理(日志分析)
3.Map中間結(jié)果需要寫磁盤,Reduce寫HDFS,多個MR之間通過HDFS交換數(shù)據(jù);
4.任務調(diào)度和啟動開銷大;
5.無法充分利用內(nèi)存;(與MR產(chǎn)生時代有關,MR出現(xiàn)時內(nèi)存價格比較高,采用磁盤存儲代價小)
6.Map端和Reduce端均需要排序;
7.MapReduce編程不夠靈活。(比較Scala函數(shù)式編程而言)
8.框架多樣化[采用一種框架技術(Spark)同時實現(xiàn)批處理、流式計算、交互式計算]:
批處理:MapReduce、Hive、Pig;
流式計算:Storm
交互式計算:Impala
Spark核心概念:
RDD:Resilient Distributed Datasets,彈性分布式數(shù)據(jù)集
分布在集群中的只讀對象集合(由多個Partition 構(gòu)成);
可以存儲在磁盤或內(nèi)存中(多種存儲級別);
通過并行“轉(zhuǎn)換”操作構(gòu)造;
失效后自動重構(gòu);
RDD基本操作(operator)
Transformation具體內(nèi)容
map(func) :返回一個新的分布式數(shù)據(jù)集,由每個原元素經(jīng)過func函數(shù)轉(zhuǎn)換后組成
filter(func) : 返回一個新的數(shù)據(jù)集,由經(jīng)過func函數(shù)后返回值為true的原元素組成
*flatMap(func) : 類似于map,但是每一個輸入元素,會被映射為0到多個輸出元素(因此,func函數(shù)的返回值是一個Seq,而不是單一元素)
flatMap(func) : 類似于map,但是每一個輸入元素,會被映射為0到多個輸出元素(因此,func函數(shù)的返回值是一個Seq,而不是單一元素)
sample(withReplacement, frac, seed) :
根據(jù)給定的隨機種子seed,隨機抽樣出數(shù)量為frac的數(shù)據(jù)。
union(otherDataset) : 返回一個新的數(shù)據(jù)集,由原數(shù)據(jù)集和參數(shù)聯(lián)合而成
groupByKey([numTasks]) :
在一個由(K,V)對組成的數(shù)據(jù)集上調(diào)用,返回一個(K,Seq[V])對的數(shù)據(jù)集。注意:默認情況下,使用8個并行任務進行分組,你可以傳入numTask可選參數(shù),根據(jù)數(shù)據(jù)量設置不同數(shù)目的Task
reduceByKey(func, [numTasks]) : 在一個(K,V)對的數(shù)據(jù)集上使用,返回一個(K,V)對的數(shù)據(jù)集,key相同的值,都被使用指定的reduce函數(shù)聚合到一起。和groupbykey類似,任務的個數(shù)是可以通過第二個可選參數(shù)來配置的。
join(otherDataset, [numTasks]) :
在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用,返回一個(K,(V,W))對,每個key中的所有元素都在一起的數(shù)據(jù)集
groupWith(otherDataset, [numTasks]) : 在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用,返回一個數(shù)據(jù)集,組成元素為(K, Seq[V], Seq[W]) Tuples。這個操作在其它框架,稱為CoGroup
cartesian(otherDataset) : 笛卡爾積。但在數(shù)據(jù)集T和U上調(diào)用時,返回一個(T,U)對的數(shù)據(jù)集,所有元素交互進行笛卡爾積。
flatMap(func) :
類似于map,但是每一個輸入元素,會被映射為0到多個輸出元素(因此,func函數(shù)的返回值是一個Seq,而不是單一元素)
Actions具體內(nèi)容
reduce(func) : 通過函數(shù)func聚集數(shù)據(jù)集中的所有元素。Func函數(shù)接受2個參數(shù),返回一個值。這個函數(shù)必須是關聯(lián)性的,確??梢员徽_的并發(fā)執(zhí)行
collect() : 在Driver的程序中,以數(shù)組的形式,返回數(shù)據(jù)集的所有元素。這通常會在使用filter或者其它操作后,返回一個足夠小的數(shù)據(jù)子集再使用,直接將整個RDD集Collect返回,很可能會讓Driver程序OOM
count() : 返回數(shù)據(jù)集的元素個數(shù)
take(n) : 返回一個數(shù)組,由數(shù)據(jù)集的前n個元素組成。注意,這個操作目前并非在多個節(jié)點上,并行執(zhí)行,而是Driver程序所在機器,單機計算所有的元素(Gateway的內(nèi)存壓力會增大,需要謹慎使用)
first() : 返回數(shù)據(jù)集的***個元素(類似于take(1))
saveAsTextFile(path) : 將數(shù)據(jù)集的元素,以textfile的形式,保存到本地文件系統(tǒng),hdfs或者任何其它hadoop支持的文件系統(tǒng)。Spark將會調(diào)用每個元素的toString方法,并將它轉(zhuǎn)換為文件中的一行文本
saveAsSequenceFile(path) : 將數(shù)據(jù)集的元素,以sequencefile的格式,保存到指定的目錄下,本地系統(tǒng),hdfs或者任何其它hadoop支持的文件系統(tǒng)。RDD的元素必須由key-value對組成,并都實現(xiàn)了Hadoop的Writable接口,或隱式可以轉(zhuǎn)換為Writable(Spark包括了基本類型的轉(zhuǎn)換,例如Int,Double,String等等)
foreach(func) : 在數(shù)據(jù)集的每一個元素上,運行函數(shù)func。這通常用于更新一個累加器變量,或者和外部存儲系統(tǒng)做交互
算子分類
大致可以分為三大類算子:
Value數(shù)據(jù)類型的Transformation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項是Value型的數(shù)據(jù)。
Key-Value數(shù)據(jù)類型的Transfromation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項是Key-Value型的數(shù)據(jù)對。
Action算子,這類算子會觸發(fā)SparkContext提交Job作業(yè)。
Spark RDD cache/persist
Spark RDD cache
1.允許將RDD緩存到內(nèi)存中或磁盤上,以便于重用
2.提供了多種緩存級別,以便于用戶根據(jù)實際需求進行調(diào)整
3.cache使用
之前用MapReduce實現(xiàn)過WordCount,現(xiàn)在我們用Scala實現(xiàn)下wordCount.是不是很簡潔呢?!
import org.apache.spark.{SparkConf, SparkContext} object SparkWordCount{ def main(args: Array[String]) { if (args.length == 0) { System.err.println("Usage: SparkWordCount <inputfile> <outputfile>") System.exit(1) } val conf = new SparkConf().setAppName("SparkWordCount") val sc = new SparkContext(conf) val file=sc.textFile("file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/README.md") val counts=file.flatMap(line=>line.split(" ")) .map(word=>(word,1)) .reduceByKey(_+_) counts.saveAsTextFile("file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/countReslut.txt") } }
關于RDD的Transformation與Action的特點我們介紹下;
1.接口定義方式不同:
Transformation: RDD[X]–>RDD[y]
Action:RDD[x]–>Z (Z不是一個RDD,可能是一個基本類型,數(shù)組等)
2.惰性執(zhí)行:
Transformation:只會記錄RDD轉(zhuǎn)化關系,并不會觸發(fā)計算
Action:是觸發(fā)程序執(zhí)行(分布式)的算子。
程序的執(zhí)行流程:
Spark運行模式:
Local(本地模式):
1.單機運行,通常用于測試;
local:只啟動一個executor
local[k]:啟動k個executor
local[*]:啟動跟cpu數(shù)目相同的executor
2.standalone(獨立模式)
獨立運行在一個集群中
3.Yarn/mesos
1.運行在資源管理系統(tǒng)上,比如Yarn或mesos
2.Spark On Yarn存在兩種模式
yarn-client
yanr-cluster
兩種方式的區(qū)別:
Spark在企業(yè)中的應用場景
基于日志數(shù)據(jù)的快速查詢系統(tǒng)業(yè)務;
構(gòu)建于Spark之上的SparkSQL ,利用其快速以及內(nèi)存表等優(yōu)勢,承擔了日志數(shù)據(jù)的即席查詢工作。
典型算法的Spark實現(xiàn)
預測用戶的廣告點擊概率;
計算兩個好友間的共同好友數(shù);
用于ETL的SparkSQL和DAG任務。
到此,相信大家對“Spark的性能特點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
分享題目:Spark的性能特點有哪些
文章起源:http://jinyejixie.com/article22/ghogjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、用戶體驗、ChatGPT、網(wǎng)站排名、外貿(mào)建站、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)