Hadoop基础(2)

1.在Job初始化时,设定input format,output format,key和value。

2.将HDFS中的block划分成split分给map(在hdfs.xml中dfs.block.size设置block大小)。

3.map通过input format读取(key, value)并处理。处理后将生成数据放入buffer(buffer大小可设定)。

buffer结构:除了key和value之外,还包括meta。一个meta包括了index,key length,value length,partition number。index表示meta所对应的(key, value)的索引坐标,partition number表示对应(key, value)的partition号。

4.当buffer放满时,将buffer放入sort and spill中进行排序,排序时以partition为主键,key为副键。

(partitions可由用户定义,数量由reduce个数确定。例如:terasort设定的partitions确保了:partition0的所有key一定大于partition1。这样就保证了,sort and spill之后在整个map output文件中key是有序的。grep设定的partitions确保了:partition0的所有key(也就是匹配到的词)都相同,这样,sort and spill之后partition中key的个数就是匹配到词的个数。)

5.排序结束后,生成多个(有可能只有一个)map output文件和对应的index文件(标记着mapout的partition的索引,也就是partition0,partition1...partitionN在mapout文件的起始位置),将多个(如果只有1个就不需要merge)mapout和对应的index文件merge成两个文件,最后在一个slave上只有一个mapout和对应的一个index。

6.Reduce根据index文件通过shuffle,fetch对应partition号的数据(也就是reduce0 fetch partition0)。

(fetch过程在集群中是通过网络完成的,如果是pesudo模式shuffle会直接读取本地文件,也就是绕过了真正的shuffle)。

7.多个Reduce处理后进行merge,直到只剩下一个文件为止,通过output format输出结果。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值