【问题标题】:boto-emr job error: python broken pipeline error and java.lang.OutOfMemoryErrorboto-emr 作业错误:python 损坏的管道错误和 java.lang.OutOfMemoryError
【发布时间】:2015-04-16 12:16:09
【问题描述】:

我在 AWS/EMR 上准备了一个流式boto 工作流,使用熟悉的测试管道运行得非常好:

 sed -n '0~10000p'  Big.csv | ./map.py | sort -t$'\t' -k1 | ./reduce.py

当我增加输入数据的大小时,boto emr 作业运行也很有效,直到某个阈值导致作业因 python 损坏管道错误而失败:

 Traceback (most recent call last):
   File "/mnt/var/lib/hadoop/mapred/taskTracker/hadoop/jobcache/job_201504151813_0001/attempt_201504151813_0001_r_000002_0/work/./reduce.py", line 18, in <module>
json.dump( { "cid":cur_key , "promo_hx":kc } , sys.stdout ) 
   File "/usr/lib/python2.6/json/__init__.py", line 181, in dump
fp.write(chunk)
 IOError: [Errno 32] Broken pipe

还有以下java错误:

  org.apache.hadoop.streaming.PipeMapRed (Thread-38): java.lang.OutOfMemoryError: Java heap space

假设首先发生内存错误,导致管道损坏。

任何输入数据大小的映射任务都已完成;错误发生在减速器阶段。我的 reducer 是常用的流式 reducer(我使用的是 AMI 3.2.3 和 Python 2.6.9 中内置的 jason 包):

 for line in sys.stdin:
      line                = line.strip()
      key  , value        = line.split('\t')
      ...
      print json.dumps( { "cid":cur_key , "promo_hx":kc } , sort_keys=True , separators=(',',': ') )

知道发生了什么吗?谢谢。

【问题讨论】:

    标签: python amazon-web-services boto emr


    【解决方案1】:

    看来您需要增加减速器的内存大小。这可以通过实例类型来完成(参见http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/TaskConfiguration_H2.html 了解实例类型的默认值)或通过在作业级别或集群级别(http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html#PredefinedbootstrapActions_ConfigureHadoop)调整mapreduce.reduce.* 属性来完成。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 2012-12-07
    • 2014-04-28
    • 2011-02-12
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多