欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spark調(diào)度架構(gòu)原理詳解

 更新時(shí)間:2017年12月26日 14:32:09   作者:土肥圓的猿  
這篇文章主要介紹了Spark 調(diào)度架構(gòu)原理詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。

1.啟動(dòng)spark集群,就是執(zhí)行sbin/start-all.sh,啟動(dòng)master和多個(gè)worker節(jié)點(diǎn),master主要作為集群的管理和監(jiān)控,worker節(jié)點(diǎn)主要擔(dān)任運(yùn)行各個(gè)application的任務(wù)。master節(jié)點(diǎn)需要讓worker節(jié)點(diǎn)匯報(bào)自身狀況,比如CPU,內(nèi)存多大,這個(gè)過(guò)程都是通過(guò)心跳機(jī)制來(lái)完成的

2.master收到worker的匯報(bào)信息之后,會(huì)給予worker信息

3.driver提交任務(wù)給spark集群[driver和master之間的通信是通過(guò)AKKAactor來(lái)做的,也就是說(shuō)master是akkaactor異步通信模型中的一個(gè)actor模型,driver也是一樣,driver異步向mater發(fā)送注冊(cè)信息(registerApplication)異步注冊(cè)信息]

4.master節(jié)點(diǎn)對(duì)application預(yù)估,7個(gè)G的內(nèi)存完成任務(wù),對(duì)任務(wù)進(jìn)行分配,每一個(gè)worker節(jié)點(diǎn)上都分配3.5G的內(nèi)存去執(zhí)行任務(wù),在master就對(duì)各個(gè)worker上的任務(wù)進(jìn)行整體的監(jiān)控調(diào)度

5.worker節(jié)點(diǎn)領(lǐng)到任務(wù),開(kāi)始執(zhí)行,在worker節(jié)點(diǎn)上啟動(dòng)相應(yīng)的executor進(jìn)程來(lái)執(zhí)行,每個(gè)executor中都有一個(gè)線程池的概念,里面存有多個(gè)task線程

6.executor會(huì)從線程池中取出task去計(jì)算rddpatition中的數(shù)據(jù),transformation操作,action操作

7.worker節(jié)點(diǎn)向driver節(jié)點(diǎn)匯報(bào)計(jì)算狀態(tài)

通過(guò)本地并行化集合創(chuàng)建RDD

public class JavaLocalSumApp{
	public static void main(String[] args){
		SparkConf conf = new SparkConf().setAppName("JavaLocalSumApp");
		JavaSparkContext sc = new JavaSparkContext(conf);
		List<Integer> list = Arrays.asList(1,3,4,5,6,7,8);
		//通過(guò)本地并行化集合創(chuàng)建RDD
		JavaRDD <Integer> listRDD = sc.parallelize(list);
		//求和
		Integer sum = listRDD.reduce(new Function2<Integer,Integer,Integer,Integer>(){
			@Override
			    public Integer call(Integer v1,Integer v2) throws Exception{
				return v1+v2;
			}
		}
		);
		System.out.println(sum)
	}
}
//java 中的函數(shù)式編程,需要將編譯器設(shè)置成1.8
listRDD.reduce((v1,v2)=> v1+v2)

Sparktransformation和action操作

RDD:彈性分布式數(shù)據(jù)集,是一種集合,支持多種來(lái)源,有容錯(cuò)機(jī)制,可以被緩存,支持并行操作,一個(gè)RDD代表一個(gè)分區(qū)里的數(shù)據(jù)集

RDD有兩種操作算子:

Transformation(轉(zhuǎn)化):Transformation屬于延遲計(jì)算,當(dāng)一個(gè)RDD轉(zhuǎn)換成另一個(gè)RDD時(shí)并沒(méi)有立即進(jìn)行轉(zhuǎn)換,緊緊是記住了數(shù)據(jù)集的邏輯操作

Action(執(zhí)行):觸發(fā)Spark作業(yè)的運(yùn)行,真正觸發(fā)轉(zhuǎn)換算子的計(jì)算

spark算子的作用

該圖描述的是Spark在運(yùn)行轉(zhuǎn)換中通過(guò)算子對(duì)RDD進(jìn)行轉(zhuǎn)換,算子是RDD中定義的函數(shù),可以對(duì)RDD中的數(shù)據(jù)進(jìn)行轉(zhuǎn)換和操作。

輸入:在Spark程序運(yùn)行中,數(shù)據(jù)從外部數(shù)據(jù)空間(如分布式存儲(chǔ):textFile讀取HDFS等,parallelize方法輸入Scala集合或數(shù)據(jù))輸入Spark ,數(shù)據(jù)進(jìn)入Spark運(yùn)行時(shí)數(shù)據(jù)空間,轉(zhuǎn)化為Spark中的數(shù)據(jù)塊,通過(guò)BlockManager進(jìn)行管理

運(yùn)行:在Spark數(shù)據(jù)輸入形成RDD后便可以通過(guò)變換算子,如filter等。對(duì)數(shù)據(jù)進(jìn)行操作并將RDD轉(zhuǎn)換為新的RDD,通過(guò)Action算子,觸發(fā)Spark提交作業(yè),如果數(shù)據(jù)需要復(fù)用,可以通過(guò)Cache算子,將數(shù)據(jù)緩存到內(nèi)存

輸出:程序運(yùn)行結(jié)束數(shù)據(jù)會(huì)輸出Spark運(yùn)行時(shí)空間,存儲(chǔ)到分布式存儲(chǔ)中(如saveAsTextFile輸出到HDFS),或Scala數(shù)據(jù)或集合中(collect輸出到Scala集合,count返回Scala int 型數(shù)據(jù))

Transformation 和 Actions操作概況

Transformation

map(func):返回一個(gè)新的分布式數(shù)據(jù)集,由每個(gè)原元素經(jīng)過(guò)func函數(shù)轉(zhuǎn)換后組成
filter(func) :返回一個(gè)新的數(shù)據(jù)集,由經(jīng)過(guò)func函數(shù)
flatMap(func):類似于map,但是每一個(gè)輸入元素,會(huì)被映射為0到多個(gè)輸出元素(因此,func函數(shù)的返回值是一個(gè)Seq,而不是單一元素)
sample(withReplacement, frac, seed): 根據(jù)給定的隨機(jī)種子seed,隨機(jī)抽樣出數(shù)量為frac的數(shù)據(jù)
union(otherDataset): 返回一個(gè)新的數(shù)據(jù)集,由原數(shù)據(jù)集和參數(shù)聯(lián)合而成
roupByKey([numTasks]): 在一個(gè)由(K,V)對(duì)組成的數(shù)據(jù)集上調(diào)用,返回一個(gè)(K,Seq[V])對(duì)的數(shù)據(jù)集。注意:默認(rèn)情況下,使用8個(gè)并行任務(wù)進(jìn)行分組,你可以傳入numTask可選參數(shù),根據(jù)數(shù)據(jù)量設(shè)置不同數(shù)目的Task
reduceByKey(func, [numTasks]): 在一個(gè)(K,V)對(duì)的數(shù)據(jù)集上使用,返回一個(gè)(K,V)對(duì)的數(shù)據(jù)集,key相同的值,都被使用指定的reduce函數(shù)聚合到一起。和groupbykey類似,任務(wù)的個(gè)數(shù)是可以通過(guò)第二個(gè)可選參數(shù)來(lái)配置的。
join(otherDataset, [numTasks]): 在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用,返回一個(gè)(K,(V,W))對(duì),每個(gè)key中的所有元素都在一起的數(shù)據(jù)集
groupWith(otherDataset, [numTasks]): 在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用,返回一個(gè)數(shù)據(jù)集,組成元素為(K, Seq[V], Seq[W]) Tuples。這個(gè)操作在其它框架,稱為CoGroup
cartesian(otherDataset): 笛卡爾積。但在數(shù)據(jù)集T和U上調(diào)用時(shí),返回一個(gè)(T,U)對(duì)的數(shù)據(jù)集,所有元素交互進(jìn)行笛卡爾積。

Actions操作

reduce(func): 通過(guò)函數(shù)func聚集數(shù)據(jù)集中的所有元素。Func函數(shù)接受2個(gè)參數(shù),返回一個(gè)值。這個(gè)函數(shù)必須是關(guān)聯(lián)性的,確保可以被正確的并發(fā)執(zhí)行
collect(): 在Driver的程序中,以數(shù)組的形式,返回?cái)?shù)據(jù)集的所有元素。這通常會(huì)在使用filter或者其它操作后,返回一個(gè)足夠小的數(shù)據(jù)子集再使用,直接將整個(gè)RDD集Collect返回,很可能會(huì)讓Driver程序OOM
count(): 返回?cái)?shù)據(jù)集的元素個(gè)數(shù)
take(n): 返回一個(gè)數(shù)組,由數(shù)據(jù)集的前n個(gè)元素組成。注意,這個(gè)操作目前并非在多個(gè)節(jié)點(diǎn)上,并行執(zhí)行,而是Driver程序所在機(jī)器,單機(jī)計(jì)算所有的元素(Gateway的內(nèi)存壓力會(huì)增大,需要謹(jǐn)慎使用)
first(): 返回?cái)?shù)據(jù)集的第一個(gè)元素(類似于take(1))
saveAsTextFile(path): 將數(shù)據(jù)集的元素,以textfile的形式,保存到本地文件系統(tǒng),hdfs或者任何其它hadoop支持的文件系統(tǒng)。Spark將會(huì)調(diào)用每個(gè)元素的toString方法,并將它轉(zhuǎn)換為文件中的一行文本
saveAsSequenceFile(path): 將數(shù)據(jù)集的元素,以sequencefile的格式,保存到指定的目錄下,本地系統(tǒng),hdfs或者任何其它hadoop支持的文件系統(tǒng)。RDD的元素必須由key-value對(duì)組成,并都實(shí)現(xiàn)了Hadoop的Writable接口,或隱式可以轉(zhuǎn)換為Writable(Spark包括了基本類型的轉(zhuǎn)換,例如Int,Double,String等等)
foreach(func): 在數(shù)據(jù)集的每一個(gè)元素上,運(yùn)行函數(shù)func。這通常用于更新一個(gè)累加器變量,或者和外部存儲(chǔ)系統(tǒng)做交互

WordCount執(zhí)行過(guò)程

總結(jié)

以上就是本文關(guān)于Spark 調(diào)度架構(gòu)原理詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • java得到某年某周的第一天實(shí)現(xiàn)思路及代碼

    java得到某年某周的第一天實(shí)現(xiàn)思路及代碼

    某年某周的第一天,此功能如何使用java編程得到呢?既然有了問(wèn)題就有解決方法,感興趣的朋友可以了解下本文,或許會(huì)給你帶來(lái)意想不到的收獲哦
    2013-01-01
  • javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)

    javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)

    下面小編就為大家?guī)?lái)一篇javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java高性能本地緩存框架Caffeine的實(shí)現(xiàn)

    Java高性能本地緩存框架Caffeine的實(shí)現(xiàn)

    本文主要介紹了Java高性能本地緩存框架Caffeine的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot集成slf4j+log4j2的示例代碼

    SpringBoot集成slf4j+log4j2的示例代碼

    這篇文章主要介紹了SpringBoot集成slf4j+log4j2的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Redisson分布式信號(hào)量RSemaphore的使用超詳細(xì)講解

    Redisson分布式信號(hào)量RSemaphore的使用超詳細(xì)講解

    這篇文章主要介紹了Redisson分布式信號(hào)量RSemaphore的使用,基于Redis的Redisson的分布式信號(hào)量RSemaphore采用了與java.util.concurrent.Semaphore相似的接口和用法
    2023-02-02
  • Java實(shí)現(xiàn)圖片比對(duì)算法

    Java實(shí)現(xiàn)圖片比對(duì)算法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖片比對(duì)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java實(shí)現(xiàn)簡(jiǎn)單的酒店管理系統(tǒng)

    Java實(shí)現(xiàn)簡(jiǎn)單的酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Netty序列化深入理解與使用

    Netty序列化深入理解與使用

    序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫(xiě)入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過(guò)從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象
    2022-08-08
  • Java WeakHashMap案例詳解

    Java WeakHashMap案例詳解

    這篇文章主要介紹了Java WeakHashMap案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java聊天室之使用Socket實(shí)現(xiàn)通信功能

    Java聊天室之使用Socket實(shí)現(xiàn)通信功能

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易聊天室之使用Socket實(shí)現(xiàn)通信功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-10-10

最新評(píng)論