大數據框架總結

hdfs

1 寫數據流程

2 HDFS讀數據流程1

3 HDFS副本節點選擇

4 HDFS nn 2nn 鏡像文件以及編輯日誌的工作機制

注意此類機制都是先更新編輯日誌,再更新內存文件block元數據。

checkpoint觸發默認條件是一小時或者滿足一百萬條操作日誌,肯定可以修改。

5 HDFS datanode工作機制

 

yarn

1 整體架構圖_1

2 yarn工作機制mr

hadoop

1 hadoop--map工作流程

 

2 hadoop--reduce階段

3 hadoop_shuffle階段

 

spark

1 spark-yarn任務提交

1 SparkSubmit
    //啓動進程
    --main
	    //封裝進程啓動的xxx參數
	    --new SparkSubmitArguments
		//提交
		--submit
		    //準備提交環境(返回的是自己spark程序的mainClass以及args等信息)
			--prepareSubmitEnvironment
			    //cluster提交模式
			    --childMainClass = "org.apache.spark.deploy.yarn.Client"
				//client提交模式
				--childMainClass = args.mainClass(自己打包spark程序的主類)
			//參數就是prepareSubmitEnvironment返回的結果
			--doRunMain (runMain)
			    //反射加載類
				--Utils.classForName(childMainClass)
				//查找main方法
				--mainClass.getMethod("main",new Array[String](0).getClass)
				//調用main方法
				--mainMethod.invoke

				
2 Client
    --main
		--new ClientArguments(argsString)
		--new Client
			//連接yarn的客戶端,內部參數是yarn集羣resourceManager的address等信息
			--yarnClient = YarnClient.createYarnClient
		--client.run()
			//產生applicationId
			--submitApplication
				//封裝指令 command = /bin/java org.apache.spark.deploy.yarn.ApplicationMaster
				--createContainerLaunchContext
				--createApplicationSubmissionContext
				//向yarn提交應用
				--yarnClient.submitApplication(appcontext)
				
			
3 ApplicationMaster(yarnNM中啓動)
	//啓動進程
	--main
		--new ApplicationMasterArguments(args)
		//創建應用管理器對象
		--new ApplicationMaster
		--master.run()
			//Cluster
			--runDriver
				//啓動用戶應用
				--startUserApplication
					//獲取用戶類的main方法
					--userClassLoader.loadClass(args.userClass).getMethod("main", classOf[Array[String]])
					//啓動線程,執行用戶類的main方法,線程的名字就是driver!!!
					--new Thread().start()
				//註冊AM
				--registerAM
					//獲取yarn資源
					--client.register
					//分配資源
					--allocator.allocateResources()
						//考慮數據文件節點的本地化
						--handleAllocatedContainers
							//啓動cachedThreadPool運行
							--runAllocatedContainers
								--new ExecutorRunnable().run()
									//rpc跟nm發送啓動進程的指令, command = /bin/java  org.apache.spark.executor.CoarseGrainedExecutorBackend
									--startContainer
									
4 CoarseGrainedExecutorBackend
	--main
		--run
			--onStart
				//ref爲CoarseGrainedExecutorBackend類中的Driver的rpc通信的句柄
				--ref.ask[Boolean](RegisterExecutor)
				
			--receive
				//rpc通信模式匹配executor後臺的操作
				--case RegisteredExecutor
					--new Executor
				--case launchTask
					--executor.launchTask

 2 spark​​​​​​ sortshufflemanager bypass機制相對於普通機制的異同

普通機制產生磁盤小文件的個數: 2*M(map task的個數)索引文件-和磁盤文件

bypass 機制觸發條件
1)shuffle reduce 端的 task 數量小於 spark.shuffle.sort.bypassMergeThreshold 參數值的時候;
2)不是聚合類的shuffle算子(比如reduceByKey)mapSideCombine即map端預聚合;

該機制下,當前 stage 的每個 task 會將數據的 key 進行 hash,然後將相同 hash 的 key 鎖對應的數據寫入到同一個內存緩衝區,緩衝寫滿後會溢寫到磁盤文件,這裏和 HashShuffleManager一致。然後會進入 merge 階段,將所有的磁盤文件合併成一個磁盤文件,並創建一個索引文件。

相比較於普通機制,這裏有兩個地方不同:

1)將數據寫入內存時候,普通模式是將數據寫入 Map 或者 Array 這樣的內存數據結構中,這裏是根據 key 的 Hash 值直接寫入內存;
2)該模式下在寫入磁盤之前不會排序;
3)磁盤寫機制不同

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章