MapReduce_笔记1

Map
Record reader:通过输入格式(inputformat)将输入split解析成记录,目的是将输入数据解析成记录,但不负责解析数据本身,将数据以键/值对的形式传送给mapper处理 ,通常“键”是数据在文件中的位置,值是组成的记录数据块。
Map:用户定义map函数通过处理Record reader处理的键/值,键/值得选择正确(即合理的inputformat)对整个MapReduce的。其中包含setup()和cleanup()2个函数,一个负责任务开始前初始任务,并且只执行一次。一个负责任务结束后,并且只执行一次,建议将初始资源话及释放工作效率有很大的影响。键是数据在reducer中处理时被分组的依据,值是reducer需要分析的数据,其分区好的数据最终会写入到本地文件系统中,等待其各自的reducer拉取
Combiner:一个可选的本地reducer(一种方法,在Map函数中处理相同键)可以在Map阶段聚合数据,例如一个mapreduce实现数的计数,可以先将数进行求和(通过Combiner方法),可以明显的减少网络传输的量发一次(hello,3)比发三次(hello,1)要节省的多
Partitioner:将mapper输出的键/值对拆分成为分片(shard),每个reducer对应一个分片,默认情况下partitioner先计算目标的md5。然后进行reduer(map*0.95~1.75官方提供),这种方式能够随机的将整个键空间平均分发给每个reducer,同时也能够保证不同mapper产生的相同的键可以被分配到同一个reducer。对于每个map任务,其

Reduce
shuffle(混排)和排序(sort):将所有partitioner写入的输出文件拉取到运行reducer的本地机器上,然后将这些数据按照键排序并写到一个较大的数据列表中,排序的目的是将相同的键聚合到一起,这样其所对应的值就可以很方便地在reduce任务中进行迭代处理,这个过程不可定制,而且是由框架自动处理的

reduce:将已经分好组的数据作为输入,并依次为每个对应的分组执行的reduce函数.reduce函数的输入时键以及包含与该键对应的所有值的迭代器,这些数据该阶段可以被聚类,过滤或以多种形式合并,当reduce函数执行完毕后,会将0个或多个键/值对发送到最后的输出格式
输出格式:获取reduce函数输出的最终的键/值对,并通过record writer将它写入到文件中,每条记录键和值默认通过tab分割,最终将结果写到HDFS上

InputFormat
getSplits:在实现时通常是通过给定的JobContext对象获取配置的输入并返回一个InputSplit对象的List。输入split有一个方法,能返回与数据在集群中存储位置相关的机器组成的数组,这为框架决定哪个TaskTracker应该执行哪个map任务提供依据,因为该方法在前端使用(即在作业交到JobTracker之前),所以也很适合验证作业配置并抛出任何必要的异常。
createRecordReader:该方法用于在后端生成一个RecordReader的实现

RecordReader
initialize:将map分配的InputSplit和TaskAttemptContext作为输入参数,然后初始化record reader。对于基于文件的输入格式,很适合在这寻找文件开始读取字节的位置
getCurrentKey和getCurrentValue:将生成的键/值对传递给mapper的实现
nextKeyValue:读取下一个键/值对,放回true,直到所有数据读取完毕
getProgress:框架通过该方法数据度量信息
close:在没有键/值对需要处理后,框架调用该方法完成相关清理工作

OutputFormat
checkOutputSpecs:验证作业指定的输出,如在作业提交前确保输出目录不存在,否者输出将被覆盖
getRecordWriter:返回RcordWriter的实现,该实现复杂将键/值对序列化到一个输出(通常是一个FileSystem对象)
getOutputCommiter:初始化区间,作业的输出提交者设置每个任务,成功完成时提交任务,并且当每个任务结束(不管成功已否)后执行清理,对于基于文件的输出,FileOutputCommitter可以用于处理所有这些繁重的事情,FileOutputCommitter将为每个map任务创建一个临时输出目录,然后当必要时将成功的输出移动到配置的输出目录

RecordWriter
write:
close:

((FileSplit)context.getInputSplit()).getName():获取文件名
context.getCounter(STATE_COUNTER_GROUP,”计数器名”.increment(1)):计数器增量
Comparator:确定键如何排序和分组
MultipleInputs:处理不同输入数据格式(多个Map)
DistributedCache:缓存文件,将缓存文件拷贝到每个job中
CompositeInputFormat,TupleWriteable 实现下join
CombineFileInputFormat:将多个小文件合成成多个块
Job.getcounters().findcounter(”,”).getvalues:读取计数器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值