对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
来源:互联网 发布:中国网络通信有限公司 编辑:程序博客网 时间:2024/06/09 17:57
写了个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;
}
}
OK,搞定。
- 对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
- Hadoop的MapReduce执行过程
- hadoop中mapreduce的执行过程
- Hadoop 键值对的mapreduce过程剖析
- Hadoop 键值对的MapReduce过程剖析
- Hadoop 键值对的mapreduce过程剖析
- 关于Illegal partition for
- Hadoop MapReduce 程序执行过程
- Hadoop MapReduce执行过程详解
- Hadoop MapReduce执行过程详解
- Hadoop的MapReduce函数的执行的过程
- hadoop的mapreduce过程
- hadoop非mapreduce过程对hdfs文件的读写
- 处理您的请求时发生异常。此外,对第一个异常执行自定义错误页时发生另一异常。已终止请求。
- C# MVC 处理您的请求时发生异常。此外,对第一个异常执行自定义错误页时发生另一异常。已终止请求。
- Hadoop MapReduce执行过程实例详解
- mysql存储过程执行时发生Error Code: 1267. Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_gener
- Hadoop MapReduce执行过程中map和reduce执行过程
- 使用.netrc文件进行自动ftp
- VC重载PreTranslateMessage事件实现鼠标双击
- set_irq_type 引发的 irq函数的变更
- HTTP协议
- inline内联函数的引入
- 对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
- 【转】]mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc的区别和不同
- 选择排序
- html base标签
- 【转】PHP程序员最容易犯得十种错误
- C++的封装性、继承性和多态性概念
- js常用函数
- 如何发布ActiveX 控件
- Oracle中序列和触发器的使用