3. MapReduce
File 要处理的处理文件:
文件存储在HDFS中,每个文件切分成多个一
定大小(默认64M)的Block(默认3个备份)
存储在多个节点(DataNode)上。
文件数据内容:
This is a mapreduce pptn
This is a mapreduce pptn
……
4. MapReduce
InputFormat:
数据格式定义,如以“n”分隔每一条记录,
以” ”(空格) 区分一个目标单词。
“This is a mapreduce pptn”为一条记录
“this”“is”等 为一个目标单词
5. MapReduce
Split:
inputSplit是map函数的输入
逻辑概念,一个inputSpilt和Block是默认1对1
关系,可以是1对多(多对1呢?)
实际上,每个split实际上包含后一个Block中
开头部分的数据(解决记录跨Block问题)
比如记录“This is a mapreduce pptn”跨越存
储在两个Block中,那么这条记录属于前一个
Block对应的split
6. MapReduce
RecordReader:
每读取一条记录,调用一次map函数。
比如读取一条记录“This is a mapreduce
ppt”v,然后作为参数值v,调用map(v).
然后继续这个过程,读取下一条记录直到split
尾。
7. MapReduce
Map函数:
function map(record v):
for word in v:
collect(word,1)//{“word”:1}
调用执行一次 map(“This is a mapreduce ppt” )
在内存中增加数据:
{“this”:1}
{“is ”:1}
{“a”:1}
{“mapreduce ”:1}
{“ppt”:1}
22. MapReduce
Reduce函数:
function reduce({key,v[]}):
for value in v:
collectAdd(key,value)
{“this”,[8,9,3,10]}
……
{“task”,[6,2,5]}
{“other”,【19,3】}
{“this”,[30]}
……
{“task”,[13]}
{“other”,【22】}