Python 确保Hadoop EMR上的日志
我在AmazonEMR上有一个长时间运行的Hadoop流媒体作业(15个节点,>1.5小时)。作业在大约75%的完成率时失败。我正在为mapper和reducer使用Python 我进行了以下优化:Python 确保Hadoop EMR上的日志,python,hadoop,amazon-web-services,amazon-emr,emr,Python,Hadoop,Amazon Web Services,Amazon Emr,Emr,我在AmazonEMR上有一个长时间运行的Hadoop流媒体作业(15个节点,>1.5小时)。作业在大约75%的完成率时失败。我正在为mapper和reducer使用Python 我进行了以下优化: sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0) logging.getLogger().setLevel(logging.INFO) 在
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0)
logging.getLogger().setLevel(logging.INFO)
在使用日志记录模块发出日志条目之后,我还添加了以下内容:
sys.stderr.flush()
time.sleep(30)
sys.exit(3)
尝试捕获错误但无效:Hadoop日志文件不显示我的错误:(
如何让Hadoop记录我的消息而不删除任何消息???我不是100%了解python解决方案,但我知道在使用EMR命令行界面时,必须在Amazon S3中指定日志URI
比如说
./elastic-mapreduce --create --other-options --log-uri s3n://emr.test/logs
这是在集群启动时指定的
/jobflowid
/daemons
/jobs
/nodes
/steps
/task-attempts
在/steps下,每个作业都有一个文件夹,在该文件夹下,作业的stderr、stdout和控制器输出都写在这里。我对python解决方案不是100%了解,但我知道在使用EMR命令行界面时,必须在AmazonS3中指定日志URI
比如说
./elastic-mapreduce --create --other-options --log-uri s3n://emr.test/logs
这是在集群启动时指定的
/jobflowid
/daemons
/jobs
/nodes
/steps
/task-attempts
在/steps下,每个作业都有一个文件夹,在/steps下,作业的stderr、stdout和控制器输出都写在这里。是的,您可以在S3上指定一个日志文件夹,但问题是我没有获得所有日志消息。是的,您可以在S3上指定一个日志文件夹,但问题是我没有获得所有日志消息。