hery 发表于 2015-11-30 18:27 如果运行能够成功,而且结果可以出来,这样更加有利于我们去理解源代码和函数的原理 |
linbowei 发表于 2015-11-30 17:20 这是hadoop实战上的一个例子,我当时运行也报错了,但是对reduce方法中,通过遍历value-list的次数得出某个值的排名有点模糊,不理解 |
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 在我的虚拟机跑,会报这样的错误 |
这里其实楼主只要理解普通的mapreduce,这里的,map函数和reduce函数,几乎没有任何内容,跟其它mapreduce函数都是一样的。 map只起到了类型转换 reduce函数就是一个简单的循环输出,当然这些只是单纯从代码的角度来解。 如果从mapreduce的原理来理解,这里就复杂了。 楼主暂时从代码角度看,这里更容易些。 这里面最关键的内容是分区函数。 分区函数什么?恐怕楼主还不明白。 分区其实就是比如我们对大豆分类,如果我们按照颜色来分,分为黄豆,绿豆,黑豆 如果我们按照大小来分,那么分为大豆,中豆,小豆。 那么颜色和大小就类似于分区函数。 理解了分区函数,我们就知道了这些数字是如何排序的了。 首先这些数字会到map里进行分割,当然这里无需分割,然后通过分区函数,会对输入的数据进行分类,分类之后,reduce输出即可。 楼主可以尝试把分区函数改变或则注释掉,肯定结果会发生改变 |