开发者社区 问答 正文

mapreduce跑不了


Combiner会报错:


Exception in thread "main" java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
    at com.aliyun.odps.mapred.LocalJobRunner.submit(LocalJobRunner.java:94)
    at com.aliyun.odps.mapred.JobClient.submitJob(JobClient.java:157)
    at com.aliyun.odps.mapred.JobClient.runJob(JobClient.java:60)
    at mygroup.mapreduce.JobLauncher.main(JobLauncher.java:480)
Caused by: java.lang.ArithmeticException: / by zero
    at com.aliyun.odps.mapred.local.MapOutputBuffer.getPartition(MapOutputBuffer.java:102)
    at com.aliyun.odps.mapred.local.MapOutputBuffer.add(MapOutputBuffer.java:106)
    at com.aliyun.odps.mapred.local.MapDriver$ProxiedMapContextImpl$CombinerContextImpl.write(MapDriver.java:231)
    at mygroup.mapreduce.MyCombiner.reduce(MyCombiner.java:29)
    at com.aliyun.odps.mapred.local.MapDriver$ProxiedMapContextImpl.close(MapDriver.java:274)
    at com.aliyun.odps.mapred.local.MapDriver.run(MapDriver.java:317)
    at com.aliyun.odps.mapred.LocalJobRunner.handleNonPipeMode(LocalJobRunner.java:234)
    at com.aliyun.odps.mapred.LocalJobRunner.runJob(LocalJobRunner.java:113)
    at com.aliyun.odps.mapred.LocalJobRunner.submit(LocalJobRunner.java:91)




我看到combiner输出的格式和Mapper是一致的,但是在文档里说要和Reducer保持一致:


[font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]与经典的MapReduce框架协议不同,在ODPS中,Combiner的输入、输出的参数必须与Reduce保持一致。”  https://help.aliyun.com/document_detail/27875.html?spm=5176.doc27878.6.163.rG0r59


如果我把Combiner中“context.write(key, count);” 改成“context.write(key);” (不输出count) 那么整个程序是可以运行的,但是Reducer并不会被执行,不知道为什么

展开
收起
perhapszzy 2016-05-18 06:30:50 5723 分享 版权
3 条回答
写回答
取消 提交回答
  • 回 4楼perhapszzy的帖子
    在本地跑的时候,在src/main/resources/META-INF/base.mapred.xml中设置numReduceTask的值为1.可以跑
    2016-05-18 18:16:20
    赞同 展开评论
  • 回 1楼(perhapszzy) 的帖子
    你好,odps sdk请问你是哪个版本?Combiner的输入参数和Reduce保持一致,输出必须和Map的保持一致。
    关于MR的配置你是怎样配置的?在御膳房运行MR跟普通客户端运行不一样。
    这是最新御膳房文档的链接: http://www.yushanfang.com/portal/help/doc.html?spm=0.0.0.0.PUbNsE&file=MrUdfLocalDev

    -------------------------

    回 5楼(wikcy) 的帖子
    从报错栈推测是不是把reduceNum 设置为0了,然后还使用了自定义partitioner?
    2016-05-18 10:12:58
    赞同 展开评论
  • Remapreduce跑不了
    补充一下我是根据御膳房文档中“MR&UDF本地开发工具”文章(链接我发不了。。),运行的是样例Word Count(程序在创建完project就有的)

    -------------------------

    Remapreduce跑不了
    我就是按照那个配置的,那个貌似并没有安装odps sdk

    -------------------------

    Remapreduce跑不了
    而且如果我把Combiner在base.mapred.xml里面去掉,会得到这个错误:

    Exception in thread "main" java.lang.RuntimeException: java.lang.UnsupportedOperationException: ODPS-0720503:Unexpected intermediate output in mapper, it is only allowed in mapreduce (reduce num > 0) jobs
        at com.aliyun.odps.mapred.LocalJobRunner.submit(LocalJobRunner.java:94)
        at com.aliyun.odps.mapred.JobClient.submitJob(JobClient.java:157)
        at com.aliyun.odps.mapred.JobClient.runJob(JobClient.java:60)
        at mygroup.mapreduce.JobLauncher.main(JobLauncher.java:480)
    Caused by: java.lang.UnsupportedOperationException: ODPS-0720503:Unexpected intermediate output in mapper, it is only allowed in mapreduce (reduce num > 0) jobs
        at com.aliyun.odps.mapred.local.MapDriver$DirectMapContextImpl.write(MapDriver.java:115)
        at mygroup.mapreduce.MyMapper.map(MyMapper.java:26)
        at com.aliyun.odps.mapred.local.MapDriver.run(MapDriver.java:312)
        at com.aliyun.odps.mapred.LocalJobRunner.handleNonPipeMode(LocalJobRunner.java:234)
        at com.aliyun.odps.mapred.LocalJobRunner.runJob(LocalJobRunner.java:113)
        at com.aliyun.odps.mapred.LocalJobRunner.submit(LocalJobRunner.java:91)
        ... 3 more

    -------------------------

    Remapreduce跑不了
    把 numReduceTask 设成1 可以跑了!谢谢!

    -------------------------

    Remapreduce跑不了
    提交程序时 @{env} 和 {rid} 应该填啥?

    http://@{env}.codebase.de.yushanfang.com/scheduler/res?id={rid}
    2016-05-18 06:34:15
    赞同 展开评论