MR编程模型
MR编程模型主要分为五个步骤:输入、映射、分组、规约、输出。
-
输入(InputFormat):
主要包含两个步骤—数据分片、迭代输入
数据分片(getSplits):数据分为多少个splits,就有多少个map task;
单个split的大小,由设置的split.minsize和split.maxsize决定;
公式为 max{minsize, min{maxsize, blocksize}};
hadoop2.7.3之前blocksize默认64M,之后默认128M。决定了单个split大小之后,就是hosts选择,一个split可能包含多个block(将minsize设置大于128M); 而多个block可能分布在多个hosts节点上(一个block默认3备份,如果4个block就可能在12个节点),getsplits会选择包含数据最多的一部分hosts。 由此可见,为了让数据本地话更合理,最好是一个block一个task,也就是说split大小跟block大小一致。 getSplits会产生两个文件 job.split: 迭代输入:
- 映射(map)
- 分组(partition)
- 规约(reduce)
- 输出(OutputFormat)