2013年3月5日
摘要: 1. 如果碰到异常“Task attempt failed to report status for xxx seconds. Killing!”,最可能是碰到死循环了。2. 如果没有死循环:控制超时的属性是:mapred.task.timeout,默认600000ms,即600s。可以设置成更大的值。可以直接在Jobconf或Configuration中修改(只对本Job起作用),也可以修改mapred-site.xml(对所有Job起作用)。3. 如果没有死循环,但task执行时间长又不好确定,可以在Reducer或Mapper中主动发送心跳,但需控制发送心跳的频率: long he... 阅读全文
posted @ 2013-03-05 15:08 山君 阅读(9657) 评论(0) 推荐(0) 编辑
摘要: 有个MR Job,输入数据大小几G,输入大小估计几十T(未压缩)。输出量太大,为空间方面考虑决定使用压缩。map的输出与Job的输入一样大小,优化幅度不大,暂时不考虑map输出的压缩,着重于Reduce输出的压缩。《Hadoop权威指南》中介绍了几种压缩格式,因为此Job的输出还要作为下一个MR的输入,故:1. 第一次选了《权威指南》中介绍的支持切分的bzip2格式,输出格式为Sequence File。结果:速度贼慢,比不压缩的还慢。可以断定在压缩上面花费过多时间。2. bzip2压缩只能放弃,但又不甘心无压缩输出。搜索了些资料(http://blog.sina.com.cn/s/blog_ 阅读全文
posted @ 2013-03-05 14:52 山君 阅读(1032) 评论(0) 推荐(0) 编辑
  2013年2月21日
摘要: 1. Job会执行完毕2. 如果HQL语句的结果要写入某个表的话,写入操作不会执行。具体原因未知解决办法:把语句写入文件xxx.hql,然后用hive -f xxx.hql & 以后台命令的方式执行。 阅读全文
posted @ 2013-02-21 11:21 山君 阅读(255) 评论(0) 推荐(0) 编辑
  2013年2月18日
摘要: 栈异常信息为:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) at java.lan 阅读全文
posted @ 2013-02-18 10:40 山君 阅读(3592) 评论(0) 推荐(0) 编辑
  2013年1月28日
摘要: 第一次使用datajoin软件包进行数据连接,是模仿着《Hadoop实战》那本书写的。解决了几个问题(后面说)之后终于job成功启动并且mapper执行完毕,但reduce总是不能执行完成,进度卡在66.67%或99.33%。mapper输出是想要的格式,而且小规模输入数据测试时整个job能成功完成。在查看未完成reduce的状态,发现key不变,“numOfValues”的值却一直在增大,于是就觉得应该是碰到了死循环。我的reducer中没什么会导致死循环的地方,于是查看DataJoinReducerBase的源码,打印了一些信息之后查看的重点就落在了regroup()方法中,最后终于让我找 阅读全文
posted @ 2013-01-28 20:11 山君 阅读(2138) 评论(1) 推荐(0) 编辑
摘要: 今天发现Reduce中一个双重循环输出有问题,本来是对values的两次循环然后输出各值得交叉连接对,但输出总是不够数量。后来才发现是因为迭代器(Iterable,Iterator)访问了一次某个元素之后即从迭代器中删了这个元素造成。以前一直是一重循环,而且只访问一次,所以一直没发现这个问题。基础问题,汗。。。可以用下列代码验证:List<String> values = new ArrayList<String>(); values.add("E0VzYHYw"); values.add("GUNYQM4"); values.a 阅读全文
posted @ 2013-01-28 19:41 山君 阅读(808) 评论(0) 推荐(0) 编辑
  2012年10月31日
摘要: 症状:在Reduce中使用MultipleOutputs根据输入的key输出到某个MultipleOutputs.addNamedOutput()中,程序运行结束却没有对应的输出文件。解决:在Reduce的cleanup方法中调用mos.close();ps 其他可能原因:1. reduce一直都没有输入,这个要查看MR Job的计数器。我之前因为Reduce的输入Key格式跟Map 输出要求不匹配,导致Reduce一直没有输入,这个需要查看MR Job的日志。通过在初始化Job时声明job.setMapOutputKeyClass(T); job.setMapOutputValueClas. 阅读全文
posted @ 2012-10-31 12:03 山君 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 原生的计数器有(格式:<显示名> | <内部名>):FileSystemCounters | FileSystemCounters---FILE_BYTES_READ | FILE_BYTES_READ---FILE_BYTES_WRITTEN | FILE_BYTES_WRITTEN---HDFS_BYTES_READ | HDFS_BYTES_READ---HDFS_BYTES_WRITTEN | HDFS_BYTES_WRITTENJob Counters | org.apache.hadoop.mapred.JobInProgress$Counter---Tot 阅读全文
posted @ 2012-10-31 11:49 山君 阅读(1213) 评论(2) 推荐(0) 编辑