MapReduce 分布式计算,移动计算而不是移动数据
步骤:split - map - shuffle - reduce
split : 把数据切成片段(计算框架自动做)。split块的大小与block相同。
Map : 跟程序员编写的代码相关。(java程序)
shuffle : 合并、排序
reduce : reduce 的个数由程序决定。
当map输出的数据个数较多,reduce 就多。
shuffle 的工作大多由mapreduce框架自动完成。
解决数据倾斜:更改partition规则,每一个partition对应一个reduce去执行。
合并(Combine)的目的:减少map的输出
MapReduce架构:
主JobTracker:负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task就重新分配其任务到其他节点。每一个hadoop集群只有一个JobTracker。一般它运行于Master节点上。
从TaskTracker:TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务,为了减少网络带宽TaskTracker最好运行在HDFS的DataNode上 (1.0版本有)
Map(Mapper) + Reduce (Reducer)
大量数据的并行计算:
Map<key, value> entry(条目)(key-value)
key:行号,0为基址
Map的输出是reduce的输入(数据格式一致,中间有shuffle)
shuffle:洗牌、分组、排序