mapreduce 排序

查看数: 10117 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-11-18 18:31

正文摘要:

本帖最后由 hery 于 2015-11-18 18:34 编辑 [mw_shl_code=applescript,true]package cn.edu.ruc.cloudcomputing.book.chapter05; import java.io.IOException; import org.apache.hadoop.conf.Configuratio ...

回复

linbowei 发表于 2015-12-1 09:21:24
hery 发表于 2015-11-30 18:27
这是hadoop实战上的一个例子,我当时运行也报错了,但是对reduce方法中,通过遍历value-list的次数得出某 ...

如果运行能够成功,而且结果可以出来,这样更加有利于我们去理解源代码和函数的原理

hery 发表于 2015-11-30 18:27:39
linbowei 发表于 2015-11-30 17:20
15/11/30 17:15:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfo ...

这是hadoop实战上的一个例子,我当时运行也报错了,但是对reduce方法中,通过遍历value-list的次数得出某个值的排名有点模糊,不理解
linbowei 发表于 2015-11-30 17:20:10

15/11/30 17:15:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/11/30 17:15:21 INFO input.FileInputFormat: Total input paths to process : 2
15/11/30 17:15:21 WARN snappy.LoadSnappy: Snappy native library not loaded
15/11/30 17:15:22 INFO mapred.JobClient: Running job: job_local_0001
15/11/30 17:15:22 INFO mapred.Task:  Using ResourceCalculatorPlugin : null
15/11/30 17:15:22 INFO mapred.MapTask: io.sort.mb = 100
15/11/30 17:15:22 INFO mapred.MapTask: data buffer = 79691776/99614720
15/11/30 17:15:22 INFO mapred.MapTask: record buffer = 262144/327680
15/11/30 17:15:22 WARN mapred.LocalJobRunner: job_local_0001
java.io.IOException: Illegal partition for 1 (-1)
        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1073)
        at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:691)
        at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
        at my.Sort$Map.map(Sort.java:27)
        at my.Sort$Map.map(Sort.java:1)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
15/11/30 17:15:23 INFO mapred.JobClient:  map 0% reduce 0%
15/11/30 17:15:23 INFO mapred.JobClient: Job complete: job_local_0001
15/11/30 17:15:23 INFO mapred.JobClient: Counters: 0
在我的虚拟机跑,会报这样的错误
bioger_hit 发表于 2015-11-18 19:31:54


这里其实楼主只要理解普通的mapreduce,这里的,map函数和reduce函数,几乎没有任何内容,跟其它mapreduce函数都是一样的。
map只起到了类型转换
reduce函数就是一个简单的循环输出,当然这些只是单纯从代码的角度来解。
如果从mapreduce的原理来理解,这里就复杂了。
楼主暂时从代码角度看,这里更容易些。

这里面最关键的内容是分区函数。
分区函数什么?恐怕楼主还不明白。
分区其实就是比如我们对大豆分类,如果我们按照颜色来分,分为黄豆,绿豆,黑豆
如果我们按照大小来分,那么分为大豆,中豆,小豆。

那么颜色和大小就类似于分区函数。

理解了分区函数,我们就知道了这些数字是如何排序的了。

首先这些数字会到map里进行分割,当然这里无需分割,然后通过分区函数,会对输入的数据进行分类,分类之后,reduce输出即可。

楼主可以尝试把分区函数改变或则注释掉,肯定结果会发生改变



关闭

推荐上一条 /2 下一条