jar*_*ugh 15 python emr apache-spark
我在AWS EMR上运行一个非常简单的Spark作业,似乎无法从我的脚本中获取任何日志输出.
我试过打印到stderr:
from pyspark import SparkContext
import sys
if __name__ == '__main__':
sc = SparkContext(appName="HelloWorld")
print('Hello, world!', file=sys.stderr)
sc.stop()
Run Code Online (Sandbox Code Playgroud)
并采用火花记录器如图所示在这里:
from pyspark import SparkContext
if __name__ == '__main__':
sc = SparkContext(appName="HelloWorld")
log4jLogger = sc._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger(__name__)
logger.error('Hello, world!')
sc.stop()
Run Code Online (Sandbox Code Playgroud)
作业运行后EMR给我两个日志文件:controller和stderr.两个日志都不包含"Hello, world!"字符串.这是我的理解,stdout重定向到stderr火花.该stderr日志显示作业被接受,运行和顺利完成.
所以我的问题是,我在哪里可以查看我的脚本的日志输出?或者我应该在脚本中更改什么才能正确记录?
编辑:我使用此命令提交步骤:
aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE
Run Code Online (Sandbox Code Playgroud)
Gre*_*eda 11
我发现EMR针对特定步骤的日志记录几乎从未在控制台或stderr日志中出现,这些日志与AWS控制台中的步骤一起被拉出.
通常我会在作业的容器日志中找到我想要的东西(通常是在stdout中).
这些通常是在一条路上s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application??_XXXXXXXXX/container??_XXXXXXX/....您可能需要内部各闲逛application_...和container_...内目录containers.
最后一个容器目录应该有一个stdout.log和stderr.log.