mr环形缓冲区倒排索引反向溢写

发生在环形缓冲区溢写的快排序阶段 排序阶段,排序方式是,先按照分区编号Partition进行排序,然后按照key进行排序。
分区分完后,如果同一个分区内数据的key相同就不需要进行排序,
例如 一个分区内排序排完的数据为[a,1],[a,2],[c,1],[b,1]

那么因为索引0和1的key是相同的所以他们两个之间是不需要排序的,所以倒排序后的索引和数据为
[c,1],[b,1][a,1],[a,2]

然后往外溢写的时候也是反向溢写,所以输出顺序为[a,2][a,1],[b,1],[c,1]

在这里插入图片描述

总结:就是触发溢写时会将索引进行快排,然后按照排好的key正序进行溢写,如果key相同那就把索引倒排则反向溢写

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MapReduce是一种分布式计算模型,Python可以通过Hadoop Streaming实现MapReduce功能。以下是一个使用Python实现的简单MapReduce示例: 假设我们有一个包含数字的文本文件,我们想要计算每个数字出现的次数。 首先,我们需要编一个map.py脚本来实现map函数的功能。map.py的代码如下所示: ``` #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words = line.split() for word in words: print('%s\t%s' % (word, 1)) ``` 这个脚本将输入的每一行文本拆分成单个数字,并将每个数字输出为键值对(数字,1)。 接下来,我们需要编一个reduce.py脚本来实现reduce函数的功能。reduce.py的代码如下所示: ``` #!/usr/bin/env python import sys current_word = None current_count = 0 word = None for line in sys.stdin: line = line.strip() word, count = line.split('\t', 1) try: count = int(count) except ValueError: continue if current_word == word: current_count += count else: if current_word: print('%s\t%s' % (current_word, current_count)) current_count = count current_word = word if current_word == word: print('%s\t%s' % (current_word, current_count)) ``` 这个脚本将接收到的键值对按键进行序,并且累加相同键的值。最后输出每个数字出现的次数。 最后,我们可以通过Hadoop Streaming来运行MapReduce作业。假设我们的输入文件名为input.txt,输出文件名为output.txt,我们可以使用以下命令来运行: ``` hadoop jar /path/to/hadoop-streaming.jar \ -file /path/to/map.py -mapper /path/to/map.py \ -file /path/to/reduce.py -reducer /path/to/reduce.py \ -input /path/to/input.txt -output /path/to/output.txt ``` 这个命令将使用MapReduce对输入文件进行处理,并将结果输出到指定的输出文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值