1.MapReduce是一个分布式计算框架
它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。起源于Google2.适用于大规模数据处理场景
每个节点处理存储在该节点的数据3.每个job包含Map和Reduce两部分
1.分而治之
简化并行计算的编程模型2.构建抽象模型:Map和Reduce
开发人员专注于实现Mapper和Reducer函数3.隐藏系统层细节
开发人员专注于业务逻辑实现优点
易于编程可扩展性高容错性高吞吐量不适用领域
难以实时计算不适合流式计算编程链接:
数据定义格式
map: (K1,V1) → list (K2,V2)reduce: (K2,list(V2)) → list (K3,V3)MapReduce执行过程
MapperCombinerPartitionerShuffle and SortReducer Map一定要有,combiner可有可无,paritioner一定要有,reducer在某种情况下可以没有; mapper数目无法操作有inputsplit决定的(可以改块大小达到mapper数目),但是Reducer可以操作Job Tracker
运行在Namenode接受客户端Job请求提交给Task TrackerTask Tracker
从Job Tracker接受任务请求执行map、reduce等操作返回心跳给Job Tracker重要图: yarn的时候回香江
MapeReduce的局限性
yarn的变化 yarn环境下的资源管理器 jt resource 任务放在ResourceManager job
在map之前,根据输入文件创建inputSplit
每个InputSplit对应一个Mapper任务输入分片存储的是分片长度和记录数据位置的数组记录边界划分的(*)block和split的区别
block是数据的物理表示split是块中数据的逻辑表示split划分是在记录的边界处split的数量应不大于block的数量(一般相等)必须可序列化(serializable)
作用:网络传输以及持久化存储IntWritable、LongWriteable、FloatWritable、Text、DoubleWritable, BooleanWritable、NullWritable等都继承了Writable接口
并实现write()和readFields()方法Keys必须实现WritableComparable接口
Reduce阶段需要sortkeys需要可比较有2方法:getinputsplit:又来计算有多少个inputsplit,他就知道启动几个mapper createReconReader<k,v>: