python - 确保 Hadoop EMR 上的日志

标签 python hadoop amazon-web-services amazon-emr emr

我在 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/

相关文章:

python - 如何在 Python 3.7 中遍历大型有序字典?

c# - 无法在HDInsight的非默认容器中的Hive表上远程运行查询

hadoop - Hive 中的 UpdateInputAccessTimeHook 没有实现 Hook 接口(interface),所以它不能从 Hive 中使用吗?

hadoop - 配置单元错误:任务已被ExecutorService拒绝

linux - 将 amazon-linux 实例从 PV 转换为 HVM 的最简单方法

python - 使 Python 脚本可执行 chmod755?

python - Keras 序列 : Specify input shape with three parameters

python - 在持续集成测试期间使用 Python 脚本启动和停止 Google App Engine dev_appserver

amazon-web-services - 为 Golang Lambda 功能单元测试模拟 AWS API 网关请求和 DynamoDB

amazon-web-services - DNS 名称为 foo.com 的 CNAME 类型的 RRSet。不允许出现在 bar.com 区域的顶点