我在 Amazon EMR 上有一个长时间运行的 Hadoop 流作业(15 个节点,>1.5 小时)。作业在大约 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)
try catch 错误无济于事:Hadoop 日志文件不显示我的错误:(
如何让 Hadoop 记录我的消息而不丢弃任何消息???
最佳答案
我不是 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 下,每个单独的作业都有一个文件夹,在这个文件夹下,作业的标准错误、标准输出和 Controller 输出都写在这里。
关于python - 确保 Hadoop EMR 上的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989024/