2012-06-12 51 views
2

我在Amazon EMR上有一个长时间运行的Hadoop流式作业(15节点,> 1.5小时)。这项工作的失败率约为75%。我为mapper和reducer使用Python。确保Hadoop EMR上的日志

我已经做了如下优化:

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记录我的消息,而不是丢弃任何???

回答

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 

在/步骤,你得到一个文件夹,每个人的工作和低于此作业的标准错误,stdout和控制器输出这里被写入。

+1

是的,你可以在S3上指定一个日志文件夹,但麻烦的是我没有得到所有的日志消息。 – jldupont