天天看点

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
           

继续阅读