来自:http://blog.csdn.net/hezuoxiang/article/details/6878026

写了个mapreduce的JAVA程序,自定义了个partition

class indexPartition extends HashPartitioner<Text, Text>
{
 public int getPartition(Text key, Text value,int numReduceTasks)
 {
  Text tmp = new Text(key.toString().substring(0,key.toString().indexOf(":")));
  super.getPartition(tmp, value, numReduceTasks);

return numReduceTasks;
  
 }
}

在运行时出现异常:java.io.IOException:Illegal partition for my:test1 (1)

第一步,找源码找原因

(1)按出现异常的提示:

at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:904)

at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:541)

找到源代码的MapTask.java文件,再找到NewOutputCollector.write方法,里面有一句:

collector.collect(key, value,partitioner.getPartition(key, value, partitions));

这里调用了getPartition方法的返回值作为参数

(2)在该文件查找出错的字串“Illegal partition for”,结果找一这一行:

if (partition < 0 || partition >= partitions)

{
          throw new IOException("Illegal partition for " + key + " (" + partition + ")");
 }

这是collect函数的一部分,partitions是函数传入的参数,也就是刚才看到的partitioner.getPartition(key, value, partitions)的返回结果

这时结合输出可知,当前的partition 为1,就是说partitions应该小于或等1才会出现异常了。

(3)对比一下我自己写的partitioner,问题找到了。我是直接把传入来的参数numReduceTasks返回,我是应该把父函数的返回值返回对

第二步,修改

class indexPartition extends HashPartitioner<Text, Text>
{
 public int getPartition(Text key, Text value,int numReduceTasks)
 {
  Text tmp = new Text(key.toString().substring(0,key.toString().indexOf(":")));
  int partitions = super.getPartition(tmp, value, numReduceTasks);
  return partitions;
  
 }
}

最新文章

  1. 详解BOM头以及去掉BOM头的方法
  2. [POJ2096] Collecting Bugs (概率dp)
  3. varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
  4. git无法clone远程代码库及git代理设置
  5. JavaScript性能优化:度量、监控与可视化1
  6. 小程序--改变子级别页面导航栏信息 / navigationBarTitleText
  7. install font
  8. C# 关于操作datatable的列名和删除某一列的数据
  9. 使用 QDockWidget嵌套布局来实现复杂界面,方便用户可以自定义界面,自由组合窗口
  10. import os, glob, fnmatch--Python os/glob/fnmatch主要函数总结
  11. 微信小程序项目实战 - 菜谱大全
  12. rman copy相关
  13. Luogu4022 CTSC2012 熟悉的文章 广义SAM、二分答案、单调队列
  14. 原生Ajax和jqueryAjax写法
  15. freeswitch笔记
  16. [蓝桥杯]ALGO-101.算法训练_图形显示
  17. 并发编程之 Semaphore 源码分析
  18. memcpy、memmove、memset、memchr、memcmp、strstr详解
  19. Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控
  20. asp.net core 发布到docker 极简步骤

热门文章

  1. BZOJ1018 堵塞的交通(线段树)
  2. 「UOJ351」新年的叶子
  3. __declspec(dllexport) 和 __declspec(dllimport)的区别
  4. 四、python之 if while for
  5. Shell基础学习(二) Shell变量
  6. HDU 4690 EBCDIC (2013多校 1005题 胡搞题)
  7. ubuntu上安装systemtap
  8. Sublime的中文GBK显示乱码的解决方法
  9. p3p sso
  10. java多线程知识汇总(三)如何选择锁?如何加锁