天天看點

MapReduce程式執行過程

input:讀取程式輸入
		
								預設:讀hdfs上檔案,将檔案拆分為分片split
								500m 	-->4個block 	--> 4個split  --> 将每個split中的每一行轉換為一個keyvalue
									key:行的偏移量
									value:行的内容
		map:将任務進行拆分嗎,啟動多個map task 來處理每個分片
		
							預設:一個分片對應一個map task(線程)
							每個maptask中的每一條去調用一次map方法
							map方法:
									1:對資料進行處理:
													-->對資料進行過濾,合法性判斷
													-->對資料進行格式化
														dd/MM/yyyy:HH:mm:ss	->yyyy-MM-dd HH:mm:ss
													-->資料字段補全
									2:封裝新的key value進行輸出
		shuffle:将map輸出結果按照key進行分組,相同的key的value進行合并
		
													-->對資料進行操作:
														分區,排序,分組
														key,{value1,value2,value3,......}
					reduce:将任務的結果進行合并,啟動reduce task 對shuffle輸出的每條資料進行處理,每一種keyvalue調用一次
					
							reduce方法
							reduce方法:
									1:對每種key的資料進行處理
										eg:求和統計類的操作
									2:封裝結果的keyvakle	
		output:将整個程式的結果進行輸出,預設輸出到hdfs變為檔案


		input輸出:
		
									<0,hbase hive hadoop>
									<20,spark hadoop>
									<40,hadoop hive>
									<60,spark hbase>
									<80,spark hadoop>
		map輸出:
							
									hbase   1
									hive 	1
									hadoop  1
									spark   1
									hadoop	1
									hadoop  1
									hive    1
									spark 	1
									hbase 	1
									spark 	1
									hadoop 	1
		shullef輸出:
		
									hbase	{1,1}
									hive	{1,1}
									hadoop 	{1,1,1,1}
									spark	{1,1,1}
		reduce輸出:
		
									hbase	2
									hive	2
									hadoop 	4
									spark	3
		output輸出:
		
									hbase	2
									hive	2
									hadoop 	4
									spark	3
           

繼續閱讀