2

我在 Amazon EMR(15 个节点,>1.5 小时)上有一个长时间运行的 Hadoop 流作业。该作业在完成度约为 75% 时失败。我将 Python 用于 mapper 和 reducer。

我做了以下优化:

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0)

logging.getLogger().setLevel(logging.INFO)

在使用模块发布日志条目后,我还添加了以下内容logging

    sys.stderr.flush()
    time.sleep(30)
    sys.exit(3)

尝试捕获错误无济于事:Hadoop 日志文件不显示我的错误 :(

如何让 Hadoop 记录我的消息而不丢弃任何消息???

4

1 回答 1

0

我不是 100% 了解 python 解决方案,但我知道在使用 EMR 命令行界面时,您必须在 Amazon S3 中指定日志记录 URI。

例如

./elastic-mapreduce --create --other-options --log-uri s3n://emr.test/logs

这是在集群启动时指定的。然后在 S3 上的日志目录下创建以下目录

/jobflowid
   /daemons
   /jobs
   /nodes
   /steps
   /task-attempts

在 /steps 下,每个单独的作业都有一个文件夹,在此下方,作业的 stderr、stdout 和控制器输出都写在这里。

于 2012-06-14T15:40:17.440 回答