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